summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrédéric Guillot <fred@kanboard.net>2018-06-21 14:13:41 -0700
committerFrédéric Guillot <fred@kanboard.net>2018-06-21 14:13:41 -0700
commita491348d442ab8e6cd2fa403d4365cdad78e52ce (patch)
treea00f575d82afb2c9051bad95398b4250f4a3d44d
parentc73ac5f1f818b6b21083f6785b4b2f6d778a6496 (diff)
Vendoring deprecated composer libs
-rw-r--r--composer.json7
-rw-r--r--composer.lock138
-rw-r--r--libs/jsonrpc/LICENSE (renamed from vendor/fguillot/json-rpc/LICENSE)0
-rw-r--r--libs/jsonrpc/README.markdown412
-rw-r--r--libs/jsonrpc/src/JsonRPC/Client.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Client.php)20
-rw-r--r--libs/jsonrpc/src/JsonRPC/Exception/AccessDeniedException.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Exception/AccessDeniedException.php)4
-rw-r--r--libs/jsonrpc/src/JsonRPC/Exception/AuthenticationFailureException.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Exception/AuthenticationFailureException.php)4
-rw-r--r--libs/jsonrpc/src/JsonRPC/Exception/ConnectionFailureException.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Exception/ConnectionFailureException.php)4
-rw-r--r--libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonFormatException.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonFormatException.php)4
-rw-r--r--libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php)4
-rw-r--r--libs/jsonrpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php)4
-rw-r--r--libs/jsonrpc/src/JsonRPC/Exception/ResponseException.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Exception/ResponseException.php)2
-rw-r--r--libs/jsonrpc/src/JsonRPC/Exception/RpcCallFailedException.php15
-rw-r--r--libs/jsonrpc/src/JsonRPC/Exception/ServerErrorException.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Exception/ServerErrorException.php)4
-rw-r--r--libs/jsonrpc/src/JsonRPC/HttpClient.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/HttpClient.php)184
-rw-r--r--libs/jsonrpc/src/JsonRPC/MiddlewareHandler.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/MiddlewareHandler.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/MiddlewareInterface.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/MiddlewareInterface.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/ProcedureHandler.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/ProcedureHandler.php)34
-rw-r--r--libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Request/BatchRequestParser.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/Request/RequestBuilder.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Request/RequestBuilder.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/Request/RequestParser.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Request/RequestParser.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/Response/ResponseBuilder.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Response/ResponseBuilder.php)74
-rw-r--r--libs/jsonrpc/src/JsonRPC/Response/ResponseParser.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Response/ResponseParser.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/Server.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Server.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/Validator/HostValidator.php73
-rw-r--r--libs/jsonrpc/src/JsonRPC/Validator/JsonEncodingValidator.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Validator/JsonEncodingValidator.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/Validator/JsonFormatValidator.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Validator/JsonFormatValidator.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/Validator/RpcFormatValidator.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Validator/RpcFormatValidator.php)0
-rw-r--r--libs/jsonrpc/src/JsonRPC/Validator/UserValidator.php (renamed from vendor/fguillot/json-rpc/src/JsonRPC/Validator/UserValidator.php)0
-rw-r--r--libs/jsonrpc/tests/ClientTest.php103
-rw-r--r--libs/jsonrpc/tests/HttpClientTest.php220
-rw-r--r--libs/jsonrpc/tests/MiddlewareHandlerTest.php40
-rw-r--r--libs/jsonrpc/tests/ProcedureHandlerTest.php153
-rw-r--r--libs/jsonrpc/tests/Request/RequestBuilderTest.php53
-rw-r--r--libs/jsonrpc/tests/Response/HeaderMockTest.php25
-rw-r--r--libs/jsonrpc/tests/Response/ResponseBuilderTest.php151
-rw-r--r--libs/jsonrpc/tests/Response/ResponseParserTest.php100
-rw-r--r--libs/jsonrpc/tests/ServerProtocolTest.php237
-rw-r--r--libs/jsonrpc/tests/ServerTest.php258
-rw-r--r--libs/jsonrpc/tests/Validator/HostValidatorTest.php32
-rw-r--r--libs/jsonrpc/tests/Validator/JsonEncodingValidatorTest.php22
-rw-r--r--libs/jsonrpc/tests/Validator/JsonFormatValidatorTest.php19
-rw-r--r--libs/jsonrpc/tests/Validator/RpcFormatValidatorTest.php48
-rw-r--r--libs/jsonrpc/tests/Validator/UserValidatorTest.php24
-rwxr-xr-xlibs/phpqrcode/LICENSE (renamed from vendor/aferrandini/phpqrcode/LICENSE)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_1.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_1.png)bin126 -> 126 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_10.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_10.dat)bin204 -> 204 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_10.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_10.png)bin202 -> 202 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_11.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_11.dat)bin210 -> 210 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_11.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_11.png)bin205 -> 205 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_12.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_12.dat)bin222 -> 222 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_12.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_12.png)bin216 -> 216 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_13.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_13.dat)bin223 -> 223 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_13.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_13.png)bin210 -> 210 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_14.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_14.dat)bin227 -> 227 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_14.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_14.png)bin213 -> 213 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_15.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_15.dat)bin242 -> 242 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_15.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_15.png)bin219 -> 219 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_16.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_16.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_16.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_16.png)bin211 -> 211 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_17.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_17.dat)bin237 -> 237 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_17.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_17.png)bin211 -> 211 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_18.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_18.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_18.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_18.png)bin228 -> 228 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_19.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_19.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_19.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_19.png)bin225 -> 225 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_2.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_2.png)bin144 -> 144 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_20.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_20.dat)bin250 -> 250 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_20.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_20.png)bin225 -> 225 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_21.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_21.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_21.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_21.png)bin235 -> 235 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_22.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_22.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_22.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_22.png)bin226 -> 226 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_23.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_23.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_23.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_23.png)bin220 -> 220 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_24.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_24.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_24.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_24.png)bin242 -> 242 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_25.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_25.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_25.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_25.png)bin242 -> 242 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_26.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_26.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_26.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_26.png)bin244 -> 244 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_27.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_27.dat)bin284 -> 284 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_27.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_27.png)bin237 -> 237 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_28.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_28.dat)bin318 -> 318 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_28.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_28.png)bin234 -> 234 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_29.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_29.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_29.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_29.png)bin232 -> 232 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_3.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_3.png)bin147 -> 147 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_30.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_30.dat)bin324 -> 324 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_30.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_30.png)bin255 -> 255 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_31.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_31.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_31.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_31.png)bin260 -> 260 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_32.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_32.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_32.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_32.png)bin262 -> 262 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_33.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_33.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_33.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_33.png)bin253 -> 253 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_34.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_34.dat)bin331 -> 331 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_34.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_34.png)bin256 -> 256 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_35.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_35.dat)bin342 -> 342 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_35.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_35.png)bin243 -> 243 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_36.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_36.dat)bin370 -> 370 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_36.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_36.png)bin272 -> 272 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_37.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_37.dat)bin376 -> 376 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_37.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_37.png)bin279 -> 279 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_38.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_38.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_38.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_38.png)bin279 -> 279 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_39.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_39.dat)bin404 -> 404 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_39.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_39.png)bin264 -> 264 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_4.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_4.png)bin149 -> 149 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_40.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_40.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_40.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_40.png)bin267 -> 267 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/frame_5.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_5.png)bin150 -> 150 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_6.dat)bin132 -> 132 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_6.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_6.png)bin151 -> 151 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_7.dat)bin196 -> 196 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_7.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_7.png)bin189 -> 189 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_8.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_8.dat)bin201 -> 201 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_8.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_8.png)bin204 -> 204 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_9.dat (renamed from vendor/aferrandini/phpqrcode/cache/frame_9.dat)bin206 -> 206 bytes
-rwxr-xr-xlibs/phpqrcode/cache/frame_9.png (renamed from vendor/aferrandini/phpqrcode/cache/frame_9.png)bin199 -> 199 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_101_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_101_0.dat)bin157 -> 157 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_105_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_105_0.dat)bin162 -> 162 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_109_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_109_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_113_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_113_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_117_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_117_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_121_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_121_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_125_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_125_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_129_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_129_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_133_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_133_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_137_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_137_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_141_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_141_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_145_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_145_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_149_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_149_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_153_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_153_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_157_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_157_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_161_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_161_0.dat)bin241 -> 241 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_165_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_165_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_169_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_169_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_173_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_173_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_177_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_177_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_21_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_21_0.dat)bin48 -> 48 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_25_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_25_0.dat)bin57 -> 57 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_29_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_29_0.dat)bin59 -> 59 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_33_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_33_0.dat)bin62 -> 62 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_37_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_37_0.dat)bin65 -> 65 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_41_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_41_0.dat)bin68 -> 68 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_45_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_45_0.dat)bin106 -> 106 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_49_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_49_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_53_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_53_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_57_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_57_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_61_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_61_0.dat)bin119 -> 119 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_65_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_65_0.dat)bin123 -> 123 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_69_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_69_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_73_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_73_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_77_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_77_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_81_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_81_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_85_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_85_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_89_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_89_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_93_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_93_0.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_0/mask_97_0.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_0/mask_97_0.dat)bin150 -> 150 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_101_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_101_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_105_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_105_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_109_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_109_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_113_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_113_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_117_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_117_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_121_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_121_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_125_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_125_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_129_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_129_1.dat)bin164 -> 164 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_133_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_133_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_137_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_137_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_141_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_141_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_145_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_145_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_149_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_149_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_153_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_153_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_157_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_157_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_161_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_161_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_165_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_165_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_169_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_169_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_173_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_173_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_177_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_177_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_21_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_21_1.dat)bin42 -> 42 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_25_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_25_1.dat)bin48 -> 48 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_29_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_29_1.dat)bin50 -> 50 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_33_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_33_1.dat)bin53 -> 53 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_37_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_37_1.dat)bin56 -> 56 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_41_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_41_1.dat)bin58 -> 58 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_45_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_45_1.dat)bin82 -> 82 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_49_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_49_1.dat)bin84 -> 84 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_53_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_53_1.dat)bin87 -> 87 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_57_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_57_1.dat)bin92 -> 92 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_61_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_61_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_65_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_65_1.dat)bin99 -> 99 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_69_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_69_1.dat)bin102 -> 102 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_73_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_73_1.dat)bin104 -> 104 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_77_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_77_1.dat)bin110 -> 110 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_81_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_81_1.dat)bin114 -> 114 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_85_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_85_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_89_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_89_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_93_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_93_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_1/mask_97_1.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_1/mask_97_1.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_101_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_101_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_105_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_105_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_109_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_109_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_113_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_113_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_117_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_117_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_121_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_121_2.dat)bin127 -> 127 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_125_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_125_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_129_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_129_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_133_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_133_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_137_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_137_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_141_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_141_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_145_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_145_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_149_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_149_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_153_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_153_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_157_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_157_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_161_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_161_2.dat)bin190 -> 190 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_165_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_165_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_169_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_169_2.dat)bin196 -> 196 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_173_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_173_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_177_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_177_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_21_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_21_2.dat)bin35 -> 35 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_25_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_25_2.dat)bin41 -> 41 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_29_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_29_2.dat)bin45 -> 45 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_33_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_33_2.dat)bin47 -> 47 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_37_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_37_2.dat)bin47 -> 47 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_41_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_41_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_45_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_45_2.dat)bin68 -> 68 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_49_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_49_2.dat)bin70 -> 70 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_53_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_53_2.dat)bin73 -> 73 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_57_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_57_2.dat)bin76 -> 76 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_61_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_61_2.dat)bin78 -> 78 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_65_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_65_2.dat)bin89 -> 89 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_69_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_69_2.dat)bin88 -> 88 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_73_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_73_2.dat)bin94 -> 94 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_77_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_77_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_81_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_81_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_85_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_85_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_89_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_89_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_93_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_93_2.dat)bin103 -> 103 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_2/mask_97_2.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_2/mask_97_2.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_101_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_101_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_105_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_105_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_109_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_109_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_113_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_113_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_117_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_117_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_121_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_121_3.dat)bin212 -> 212 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_125_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_125_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_129_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_129_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_133_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_133_3.dat)bin216 -> 216 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_137_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_137_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_141_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_141_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_145_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_145_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_149_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_149_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_153_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_153_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_157_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_157_3.dat)bin248 -> 248 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_161_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_161_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_165_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_165_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_169_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_169_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_173_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_173_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_177_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_177_3.dat)bin312 -> 312 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_21_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_21_3.dat)bin60 -> 60 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_25_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_25_3.dat)bin75 -> 75 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_29_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_29_3.dat)bin75 -> 75 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_33_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_33_3.dat)bin79 -> 79 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_37_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_37_3.dat)bin83 -> 83 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_41_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_41_3.dat)bin85 -> 85 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_45_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_45_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_49_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_49_3.dat)bin127 -> 127 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_53_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_53_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_57_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_57_3.dat)bin126 -> 126 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_61_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_61_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_65_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_65_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_69_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_69_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_73_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_73_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_77_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_77_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_81_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_81_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_85_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_85_3.dat)bin160 -> 160 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_89_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_89_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_93_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_93_3.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_3/mask_97_3.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_3/mask_97_3.dat)bin175 -> 175 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_101_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_101_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_105_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_105_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_109_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_109_4.dat)bin182 -> 182 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_113_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_113_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_117_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_117_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_121_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_121_4.dat)bin208 -> 208 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_125_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_125_4.dat)bin213 -> 213 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_129_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_129_4.dat)bin220 -> 220 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_133_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_133_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_137_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_137_4.dat)bin248 -> 248 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_141_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_141_4.dat)bin254 -> 254 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_145_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_145_4.dat)bin255 -> 255 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_149_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_149_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_153_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_153_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_157_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_157_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_161_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_161_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_165_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_165_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_169_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_169_4.dat)bin297 -> 297 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_173_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_173_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_177_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_177_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_21_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_21_4.dat)bin57 -> 57 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_25_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_25_4.dat)bin76 -> 76 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_29_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_29_4.dat)bin78 -> 78 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_33_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_33_4.dat)bin89 -> 89 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_37_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_37_4.dat)bin86 -> 86 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_41_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_41_4.dat)bin89 -> 89 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_45_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_45_4.dat)bin120 -> 120 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_49_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_49_4.dat)bin124 -> 124 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_53_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_53_4.dat)bin128 -> 128 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_57_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_57_4.dat)bin130 -> 130 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_61_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_61_4.dat)bin132 -> 132 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_65_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_65_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_69_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_69_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_73_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_73_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_77_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_77_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_81_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_81_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_85_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_85_4.dat)bin154 -> 154 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_89_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_89_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_93_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_93_4.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_4/mask_97_4.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_4/mask_97_4.dat)bin176 -> 176 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_101_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_101_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_105_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_105_5.dat)bin224 -> 224 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_109_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_109_5.dat)bin211 -> 211 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_113_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_113_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_117_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_117_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_121_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_121_5.dat)bin256 -> 256 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_125_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_125_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_129_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_129_5.dat)bin259 -> 259 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_133_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_133_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_137_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_137_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_141_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_141_5.dat)bin297 -> 297 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_145_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_145_5.dat)bin300 -> 300 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_149_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_149_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_153_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_153_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_157_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_157_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_161_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_161_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_165_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_165_5.dat)bin332 -> 332 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_169_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_169_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_173_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_173_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_177_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_177_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_21_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_21_5.dat)bin74 -> 74 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_25_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_25_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_29_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_29_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_33_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_33_5.dat)bin106 -> 106 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_37_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_37_5.dat)bin103 -> 103 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_41_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_41_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_45_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_45_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_49_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_49_5.dat)bin146 -> 146 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_53_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_53_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_57_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_57_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_61_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_61_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_65_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_65_5.dat)bin163 -> 163 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_69_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_69_5.dat)bin167 -> 167 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_73_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_73_5.dat)bin184 -> 184 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_77_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_77_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_81_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_81_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_85_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_85_5.dat)bin186 -> 186 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_89_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_89_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_93_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_93_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_5/mask_97_5.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_5/mask_97_5.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_101_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_101_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_105_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_105_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_109_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_109_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_113_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_113_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_117_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_117_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_121_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_121_6.dat)bin309 -> 309 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_125_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_125_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_129_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_129_6.dat)bin310 -> 310 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_133_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_133_6.dat)bin296 -> 296 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_137_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_137_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_141_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_141_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_145_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_145_6.dat)bin357 -> 357 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_149_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_149_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_153_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_153_6.dat)bin367 -> 367 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_157_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_157_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_161_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_161_6.dat)bin399 -> 399 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_165_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_165_6.dat)bin400 -> 400 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_169_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_169_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_173_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_173_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_177_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_177_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_21_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_21_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_25_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_25_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_29_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_29_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_33_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_33_6.dat)bin124 -> 124 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_37_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_37_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_41_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_41_6.dat)bin132 -> 132 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_45_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_45_6.dat)bin189 -> 189 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_49_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_49_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_53_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_53_6.dat)bin195 -> 195 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_57_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_57_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_61_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_61_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_65_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_65_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_69_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_69_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_73_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_73_6.dat)bin230 -> 230 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_77_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_77_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_81_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_81_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_85_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_85_6.dat)bin229 -> 229 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_89_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_89_6.dat)bin263 -> 263 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_93_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_93_6.dat)bin276 -> 276 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_6/mask_97_6.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_6/mask_97_6.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_101_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_101_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_105_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_105_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_109_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_109_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_113_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_113_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_117_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_117_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_121_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_121_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_125_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_125_7.dat)bin288 -> 288 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_129_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_129_7.dat)bin282 -> 282 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_133_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_133_7.dat)bin281 -> 281 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_137_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_137_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_141_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_141_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_145_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_145_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_149_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_149_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_153_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_153_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_157_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_157_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_161_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_161_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_165_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_165_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_169_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_169_7.dat)bin383 -> 383 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_173_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_173_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_177_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_177_7.dat)bin407 -> 407 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_21_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_21_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_25_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_25_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_29_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_29_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_33_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_33_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_37_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_37_7.dat)bin122 -> 122 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_41_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_41_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_45_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_45_7.dat)bin173 -> 173 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_49_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_49_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_53_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_53_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_57_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_57_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_61_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_61_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_65_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_65_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_69_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_69_7.dat)bin202 -> 202 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_73_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_73_7.dat)bin221 -> 221 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_77_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_77_7.dat)bin226 -> 226 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_81_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_81_7.dat)0
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_85_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_85_7.dat)bin213 -> 213 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_89_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_89_7.dat)bin244 -> 244 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_93_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_93_7.dat)bin248 -> 248 bytes
-rwxr-xr-xlibs/phpqrcode/cache/mask_7/mask_97_7.dat (renamed from vendor/aferrandini/phpqrcode/cache/mask_7/mask_97_7.dat)0
-rw-r--r--libs/phpqrcode/lib/PHPQRCode.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/Autoloader.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/Autoloader.php)0
-rw-r--r--libs/phpqrcode/lib/PHPQRCode/Constants.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/Constants.php)0
-rw-r--r--libs/phpqrcode/lib/PHPQRCode/FrameFiller.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/FrameFiller.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/QRbitstream.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRbitstream.php)0
-rw-r--r--libs/phpqrcode/lib/PHPQRCode/QRcode.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRcode.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/QRencode.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRencode.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/QRimage.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRimage.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/QRinput.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRinput.php)0
-rw-r--r--libs/phpqrcode/lib/PHPQRCode/QRinputItem.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRinputItem.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/QRmask.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRmask.php)0
-rw-r--r--libs/phpqrcode/lib/PHPQRCode/QRrawcode.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrawcode.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/QRrs.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrs.php)0
-rw-r--r--libs/phpqrcode/lib/PHPQRCode/QRrsItem.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrsItem.php)0
-rw-r--r--libs/phpqrcode/lib/PHPQRCode/QRrsblock.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrsblock.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/QRspec.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRspec.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/QRsplit.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRsplit.php)0
-rw-r--r--libs/phpqrcode/lib/PHPQRCode/QRstr.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRstr.php)0
-rwxr-xr-xlibs/phpqrcode/lib/PHPQRCode/QRtools.php (renamed from vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRtools.php)0
-rw-r--r--libs/picodb/LICENSE (renamed from vendor/fguillot/picodb/LICENSE)0
-rw-r--r--libs/picodb/README.md672
-rw-r--r--libs/picodb/lib/PicoDb/Builder/BaseBuilder.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Builder/BaseBuilder.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Builder/ConditionBuilder.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Builder/ConditionBuilder.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Builder/InsertBuilder.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Builder/InsertBuilder.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Builder/OrConditionBuilder.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Builder/OrConditionBuilder.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Builder/UpdateBuilder.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Builder/UpdateBuilder.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Database.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Database.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Driver/Base.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Driver/Base.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Driver/Mssql.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Driver/Mssql.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Driver/Mysql.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Driver/Mysql.php)4
-rw-r--r--libs/picodb/lib/PicoDb/Driver/Postgres.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Driver/Postgres.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Driver/Sqlite.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Driver/Sqlite.php)0
-rw-r--r--libs/picodb/lib/PicoDb/DriverFactory.php (renamed from vendor/fguillot/picodb/lib/PicoDb/DriverFactory.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Hashtable.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Hashtable.php)0
-rw-r--r--libs/picodb/lib/PicoDb/LargeObject.php (renamed from vendor/fguillot/picodb/lib/PicoDb/LargeObject.php)0
-rw-r--r--libs/picodb/lib/PicoDb/SQLException.php (renamed from vendor/fguillot/picodb/lib/PicoDb/SQLException.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Schema.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Schema.php)0
-rw-r--r--libs/picodb/lib/PicoDb/StatementHandler.php (renamed from vendor/fguillot/picodb/lib/PicoDb/StatementHandler.php)0
-rw-r--r--libs/picodb/lib/PicoDb/Table.php (renamed from vendor/fguillot/picodb/lib/PicoDb/Table.php)0
-rw-r--r--libs/picodb/lib/PicoDb/UrlParser.php (renamed from vendor/fguillot/picodb/lib/PicoDb/UrlParser.php)0
-rw-r--r--libs/picodb/phpunit.xml30
-rw-r--r--libs/picodb/tests/AlternativeSchemaFixture.php15
-rw-r--r--libs/picodb/tests/MysqlDatabaseTest.php101
-rw-r--r--libs/picodb/tests/MysqlDriverTest.php73
-rw-r--r--libs/picodb/tests/MysqlLobTest.php83
-rw-r--r--libs/picodb/tests/MysqlSchemaTest.php49
-rw-r--r--libs/picodb/tests/MysqlTableTest.php356
-rw-r--r--libs/picodb/tests/PostgresDatabaseTest.php100
-rw-r--r--libs/picodb/tests/PostgresDriverTest.php78
-rw-r--r--libs/picodb/tests/PostgresLobTest.php87
-rw-r--r--libs/picodb/tests/PostgresSchemaTest.php40
-rw-r--r--libs/picodb/tests/PostgresTableTest.php355
-rw-r--r--libs/picodb/tests/SchemaFixture.php21
-rw-r--r--libs/picodb/tests/SqliteDatabaseTest.php120
-rw-r--r--libs/picodb/tests/SqliteDriverTest.php70
-rw-r--r--libs/picodb/tests/SqliteLobtest.php84
-rw-r--r--libs/picodb/tests/SqliteSchemaTest.php36
-rw-r--r--libs/picodb/tests/SqliteTableTest.php444
-rw-r--r--libs/picodb/tests/UrlParserTest.php46
-rw-r--r--vendor/aferrandini/phpqrcode/.gitignore1
-rwxr-xr-xvendor/aferrandini/phpqrcode/VERSION2
-rw-r--r--vendor/aferrandini/phpqrcode/composer.json21
-rwxr-xr-xvendor/aferrandini/phpqrcode/readme.md37
-rw-r--r--vendor/composer/autoload_classmap.php164
-rw-r--r--vendor/composer/autoload_namespaces.php3
-rw-r--r--vendor/composer/autoload_static.php179
-rw-r--r--vendor/composer/installed.json240
-rw-r--r--vendor/fguillot/json-rpc/src/JsonRPC/Validator/HostValidator.php30
-rw-r--r--vendor/symfony/polyfill-mbstring/Mbstring.php42
-rw-r--r--vendor/symfony/polyfill-mbstring/composer.json2
515 files changed, 5370 insertions, 687 deletions
diff --git a/composer.json b/composer.json
index 45367a19..6a774719 100644
--- a/composer.json
+++ b/composer.json
@@ -29,16 +29,13 @@
"christian-riesen/otp" : "1.4.3",
"eluceo/ical": "0.10.1",
"erusev/parsedown" : "1.7.1",
- "fguillot/json-rpc" : "1.2.1",
- "fguillot/picodb" : "v1.0.18",
"paragonie/random_compat": "2.0.11",
"pimple/pimple" : "3.2.2",
"psr/log": "~1.0",
"swiftmailer/swiftmailer" : "5.4.8",
"symfony/console" : "3.4.2",
"symfony/event-dispatcher" : "3.4.2",
- "gregwar/captcha": "1.1.4",
- "aferrandini/phpqrcode": "1.0.1"
+ "gregwar/captcha": "1.1.4"
},
"autoload" : {
"classmap" : ["app/"],
@@ -59,7 +56,9 @@
"phpdocumentor/reflection-docblock": "3.3.2",
"symfony/debug": "3.4.2",
"symfony/yaml": "3.4.2",
+ "symfony/finder": "3.4.8",
"symfony/stopwatch" : "3.4.2",
+ "myclabs/deep-copy": "1.7.0",
"phpunit/phpunit" : "5.7.24",
"phpunit/phpunit-selenium": "3.0.3"
}
diff --git a/composer.lock b/composer.lock
index b6da3a71..e0d09312 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,54 +4,9 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "content-hash": "6bb506d8bbacef8a6eb542c564c5a3ab",
+ "content-hash": "c4e8b7c267db97b532117fc9bc88c917",
"packages": [
{
- "name": "aferrandini/phpqrcode",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/aferrandini/PHPQRCode.git",
- "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/aferrandini/PHPQRCode/zipball/3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46",
- "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "PHPQRCode": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ariel Ferrandini",
- "email": "arielferrandini@gmail.com",
- "homepage": "http://www.ferrandini.com/",
- "role": "Developer"
- }
- ],
- "description": "PHPQRCode porting and changed for PHP 5.3 compatibility",
- "homepage": "https://github.com/aferrandini/PHPQRCode",
- "keywords": [
- "barcode",
- "php",
- "qrcode"
- ],
- "abandoned": "endroid/qr-code",
- "time": "2013-07-08T09:39:08+00:00"
- },
- {
"name": "christian-riesen/base32",
"version": "1.3.1",
"source": {
@@ -256,85 +211,6 @@
"time": "2018-03-08T01:11:30+00:00"
},
{
- "name": "fguillot/json-rpc",
- "version": "v1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/fguillot/JsonRPC.git",
- "reference": "d491bb549bfa11aff4c37abcea2ffb28c9523f69"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/fguillot/JsonRPC/zipball/d491bb549bfa11aff4c37abcea2ffb28c9523f69",
- "reference": "d491bb549bfa11aff4c37abcea2ffb28c9523f69",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.4"
- },
- "require-dev": {
- "phpunit/phpunit": "4.8.*"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "JsonRPC": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Frédéric Guillot"
- }
- ],
- "description": "Simple Json-RPC client/server library that just works",
- "homepage": "https://github.com/fguillot/JsonRPC",
- "time": "2016-06-25T23:11:10+00:00"
- },
- {
- "name": "fguillot/picodb",
- "version": "v1.0.18",
- "source": {
- "type": "git",
- "url": "https://github.com/fguillot/picoDb.git",
- "reference": "4df08a3cc3c4a39e6bb329872f5d020fe135f805"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/fguillot/picoDb/zipball/4df08a3cc3c4a39e6bb329872f5d020fe135f805",
- "reference": "4df08a3cc3c4a39e6bb329872f5d020fe135f805",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "4.8.*"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "PicoDb": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Frédéric Guillot",
- "homepage": "https://github.com/fguillot/"
- }
- ],
- "description": "Minimalist database query builder",
- "homepage": "https://github.com/fguillot/picoDb",
- "time": "2018-03-05T22:39:16+00:00"
- },
- {
"name": "gregwar/captcha",
"version": "v1.1.4",
"source": {
@@ -874,16 +750,16 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.7.0",
+ "version": "v1.8.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b"
+ "reference": "3296adf6a6454a050679cde90f95350ad604b171"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b",
- "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
+ "reference": "3296adf6a6454a050679cde90f95350ad604b171",
"shasum": ""
},
"require": {
@@ -895,7 +771,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.7-dev"
+ "dev-master": "1.8-dev"
}
},
"autoload": {
@@ -929,7 +805,7 @@
"portable",
"shim"
],
- "time": "2018-01-30T19:27:44+00:00"
+ "time": "2018-04-26T10:06:28+00:00"
}
],
"packages-dev": [
diff --git a/vendor/fguillot/json-rpc/LICENSE b/libs/jsonrpc/LICENSE
index 6a362bc1..6a362bc1 100644
--- a/vendor/fguillot/json-rpc/LICENSE
+++ b/libs/jsonrpc/LICENSE
diff --git a/libs/jsonrpc/README.markdown b/libs/jsonrpc/README.markdown
new file mode 100644
index 00000000..91891a21
--- /dev/null
+++ b/libs/jsonrpc/README.markdown
@@ -0,0 +1,412 @@
+JsonRPC PHP Client and Server
+=============================
+
+A simple Json-RPC client/server that just works.
+
+Features
+--------
+
+- JSON-RPC 2.0 only
+- The server support batch requests and notifications
+- Authentication and IP based client restrictions
+- Custom Middleware
+- Fully unit tested
+- Requirements: PHP >= 5.3.4
+- License: MIT
+
+Author
+------
+
+Frédéric Guillot
+
+Installation with Composer
+--------------------------
+
+```bash
+composer require fguillot/json-rpc @stable
+```
+
+Examples
+--------
+
+### Server
+
+Callback binding:
+
+```php
+<?php
+
+use JsonRPC\Server;
+
+$server = new Server();
+$server->getProcedureHandler()
+ ->withCallback('addition', function ($a, $b) {
+ return $a + $b;
+ })
+ ->withCallback('random', function ($start, $end) {
+ return mt_rand($start, $end);
+ })
+;
+
+echo $server->execute();
+```
+
+Callback binding from array:
+
+```php
+<?php
+
+use JsonRPC\Server;
+
+$callbacks = array(
+ 'getA' => function() { return 'A'; },
+ 'getB' => function() { return 'B'; },
+ 'getC' => function() { return 'C'; }
+);
+
+$server = new Server();
+$server->getProcedureHandler()->withCallbackArray($callbacks);
+
+echo $server->execute();
+```
+
+Class/Method binding:
+
+```php
+<?php
+
+use JsonRPC\Server;
+
+class Api
+{
+ public function doSomething($arg1, $arg2 = 3)
+ {
+ return $arg1 + $arg2;
+ }
+}
+
+$server = new Server();
+$procedureHandler = $server->getProcedureHandler();
+
+// Bind the method Api::doSomething() to the procedure myProcedure
+$procedureHandler->withClassAndMethod('myProcedure', 'Api', 'doSomething');
+
+// Use a class instance instead of the class name
+$procedureHandler->withClassAndMethod('mySecondProcedure', new Api, 'doSomething');
+
+// The procedure and the method are the same
+$procedureHandler->withClassAndMethod('doSomething', 'Api');
+
+// Attach the class, the client will be able to call directly Api::doSomething()
+$procedureHandler->withObject(new Api());
+
+echo $server->execute();
+```
+
+Class/Method binding from array:
+
+```php
+<?php
+
+use JsonRPC\Server;
+
+class MathApi
+{
+ public function addition($arg1, $arg2)
+ {
+ return $arg1 + $arg2;
+ }
+
+ public function subtraction($arg1, $arg2)
+ {
+ return $arg1 - $arg2;
+ }
+
+ public function multiplication($arg1, $arg2)
+ {
+ return $arg1 * $arg2;
+ }
+
+ public function division($arg1, $arg2)
+ {
+ return $arg1 / $arg2;
+ }
+}
+
+$callbacks = array(
+ 'addition' => array( 'MathApi', addition ),
+ 'subtraction' => array( 'MathApi', subtraction ),
+ 'multiplication' => array( 'MathApi', multiplication ),
+ 'division' => array( 'MathApi', division )
+);
+
+$server = new Server();
+$server->getProcedureHandler()->withClassAndMethodArray($callbacks);
+
+echo $server->execute();
+```
+
+Server Middleware:
+
+Middleware might be used to authenticate and authorize the client.
+They are executed before each procedure.
+
+```php
+<?php
+
+use JsonRPC\Server;
+use JsonRPC\MiddlewareInterface;
+use JsonRPC\Exception\AuthenticationFailureException;
+
+class Api
+{
+ public function doSomething($arg1, $arg2 = 3)
+ {
+ return $arg1 + $arg2;
+ }
+}
+
+class MyMiddleware implements MiddlewareInterface
+{
+ public function execute($username, $password, $procedureName)
+ {
+ if ($username !== 'foobar') {
+ throw new AuthenticationFailureException('Wrong credentials!');
+ }
+ }
+}
+
+$server = new Server();
+$server->getMiddlewareHandler()->withMiddleware(new MyMiddleware());
+$server->getProcedureHandler()->withObject(new Api());
+echo $server->execute();
+```
+
+You can raise a `AuthenticationFailureException` when the API credentials are wrong or a `AccessDeniedException` when the user is not allowed to access to the procedure.
+
+### Client
+
+Example with positional parameters:
+
+```php
+<?php
+
+use JsonRPC\Client;
+
+$client = new Client('http://localhost/server.php');
+$result = $client->execute('addition', [3, 5]);
+```
+
+Example with named arguments:
+
+```php
+<?php
+
+use JsonRPC\Client;
+
+$client = new Client('http://localhost/server.php');
+$result = $client->execute('random', ['end' => 10, 'start' => 1]);
+```
+
+Arguments are called in the right order.
+
+Examples with the magic method `__call()`:
+
+```php
+<?php
+
+use JsonRPC\Client;
+
+$client = new Client('http://localhost/server.php');
+$result = $client->random(50, 100);
+```
+
+The example above use positional arguments for the request and this one use named arguments:
+
+```php
+$result = $client->random(['end' => 10, 'start' => 1]);
+```
+
+### Client batch requests
+
+Call several procedures in a single HTTP request:
+
+```php
+<?php
+
+use JsonRPC\Client;
+
+$client = new Client('http://localhost/server.php');
+
+$results = $client->batch()
+ ->foo(['arg1' => 'bar'])
+ ->random(1, 100)
+ ->add(4, 3)
+ ->execute('add', [2, 5])
+ ->send();
+
+print_r($results);
+```
+
+All results are stored at the same position of the call.
+
+### Client exceptions
+
+Client exceptions are normally thrown when an error is returned by the server. You can change this behaviour by
+using the `$returnException` argument which causes exceptions to be returned. This can be extremely useful when
+executing the batch request.
+
+- `BadFunctionCallException`: Procedure not found on the server
+- `InvalidArgumentException`: Wrong procedure arguments
+- `JsonRPC\Exception\AccessDeniedException`: Access denied
+- `JsonRPC\Exception\ConnectionFailureException`: Connection failure
+- `JsonRPC\Exception\ServerErrorException`: Internal server error
+
+### Enable client debugging
+
+You can enable the debug mode to see the JSON request and response:
+
+```php
+<?php
+
+use JsonRPC\Client;
+
+$client = new Client('http://localhost/server.php');
+$client->getHttpClient()->withDebug();
+```
+
+The debug output is sent to the PHP system logger.
+You can configure the log destination in your `php.ini`.
+
+Output example:
+
+```json
+==> Request:
+{
+ "jsonrpc": "2.0",
+ "method": "removeCategory",
+ "id": 486782327,
+ "params": [
+ 1
+ ]
+}
+==> Response:
+{
+ "jsonrpc": "2.0",
+ "id": 486782327,
+ "result": true
+}
+```
+
+### IP based client restrictions
+
+The server can allow only some IP addresses:
+
+```php
+<?php
+
+use JsonRPC\Server;
+
+$server = new Server;
+
+// IP client restrictions
+$server->allowHosts(['192.168.0.1', '127.0.0.1']);
+
+[...]
+
+// Return the response to the client
+echo $server->execute();
+```
+
+If the client is blocked, you got a 403 Forbidden HTTP response.
+
+### HTTP Basic Authentication
+
+If you use HTTPS, you can allow client by using a username/password.
+
+```php
+<?php
+
+use JsonRPC\Server;
+
+$server = new Server;
+
+// List of users to allow
+$server->authentication(['user1' => 'password1', 'user2' => 'password2']);
+
+[...]
+
+// Return the response to the client
+echo $server->execute();
+```
+
+On the client, set credentials like that:
+
+```php
+<?php
+
+use JsonRPC\Client;
+
+$client = new Client('http://localhost/server.php');
+$client->getHttpClient()
+ ->withUsername('Foo')
+ ->withPassword('Bar');
+```
+
+If the authentication failed, the client throw a RuntimeException.
+
+Using an alternative authentication header:
+
+```php
+
+use JsonRPC\Server;
+
+$server = new Server();
+$server->setAuthenticationHeader('X-Authentication');
+$server->authentication(['myusername' => 'mypassword']);
+```
+
+The example above will use the HTTP header `X-Authentication` instead of the standard `Authorization: Basic [BASE64_CREDENTIALS]`.
+The username/password values need be encoded in base64: `base64_encode('username:password')`.
+
+### Local Exceptions
+
+By default, the server will relay all exceptions to the client.
+If you would like to relay only some of them, use the method `Server::withLocalException($exception)`:
+
+```php
+<?php
+
+use JsonRPC\Server;
+class MyException1 extends Exception {};
+class MyException2 extends Exception {};
+
+$server = new Server();
+
+// Exceptions that should NOT be relayed to the client, if they occurs
+$server
+ ->withLocalException('MyException1')
+ ->withLocalException('MyException2')
+;
+
+[...]
+
+echo $server->execute();
+```
+
+### Callback before client request
+
+You can use a callback to change the HTTP headers or the URL before to make the request to the server.
+
+Example:
+
+```php
+<?php
+
+$client = new Client();
+$client->getHttpClient()->withBeforeRequestCallback(function(HttpClient $client, $payload) {
+ $client->withHeaders(array('Content-Length: '.strlen($payload)));
+});
+
+$client->myProcedure(123);
+```
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Client.php b/libs/jsonrpc/src/JsonRPC/Client.php
index fed1ce30..73ab1342 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Client.php
+++ b/libs/jsonrpc/src/JsonRPC/Client.php
@@ -155,17 +155,20 @@ class Client
* Execute a procedure
*
* @access public
- * @param string $procedure Procedure name
- * @param array $params Procedure arguments
- * @param array $reqattrs
+ * @param string $procedure Procedure name
+ * @param array $params Procedure arguments
+ * @param array $reqattrs
+ * @param string|null $requestId Request Id
+ * @param string[] $headers Headers for this request
* @return mixed
*/
- public function execute($procedure, array $params = array(), array $reqattrs = array())
+ public function execute($procedure, array $params = array(), array $reqattrs = array(), $requestId = null, array $headers = array())
{
$payload = RequestBuilder::create()
->withProcedure($procedure)
->withParams($params)
->withRequestAttributes($reqattrs)
+ ->withId($requestId)
->build();
if ($this->isBatch) {
@@ -173,7 +176,7 @@ class Client
return $this;
}
- return $this->sendPayload($payload);
+ return $this->sendPayload($payload, $headers);
}
/**
@@ -181,14 +184,15 @@ class Client
*
* @access private
* @throws Exception
- * @param string $payload
+ * @param string $payload
+ * @param string[] $headers
* @return Exception|Client
*/
- private function sendPayload($payload)
+ private function sendPayload($payload, array $headers = array())
{
return ResponseParser::create()
->withReturnException($this->returnException)
- ->withPayload($this->httpClient->execute($payload))
+ ->withPayload($this->httpClient->execute($payload, $headers))
->parse();
}
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/AccessDeniedException.php b/libs/jsonrpc/src/JsonRPC/Exception/AccessDeniedException.php
index 8cb9bc2b..d1aabfbe 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/AccessDeniedException.php
+++ b/libs/jsonrpc/src/JsonRPC/Exception/AccessDeniedException.php
@@ -2,14 +2,12 @@
namespace JsonRPC\Exception;
-use Exception;
-
/**
* Class AccessDeniedException
*
* @package JsonRPC\Exception
* @author Frederic Guillot
*/
-class AccessDeniedException extends Exception
+class AccessDeniedException extends RpcCallFailedException
{
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/AuthenticationFailureException.php b/libs/jsonrpc/src/JsonRPC/Exception/AuthenticationFailureException.php
index 6237256a..770edeeb 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/AuthenticationFailureException.php
+++ b/libs/jsonrpc/src/JsonRPC/Exception/AuthenticationFailureException.php
@@ -2,14 +2,12 @@
namespace JsonRPC\Exception;
-use Exception;
-
/**
* Class AuthenticationFailureException
*
* @package JsonRPC\Exception
* @author Frederic Guillot
*/
-class AuthenticationFailureException extends Exception
+class AuthenticationFailureException extends RpcCallFailedException
{
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/ConnectionFailureException.php b/libs/jsonrpc/src/JsonRPC/Exception/ConnectionFailureException.php
index 6f4985bc..195f8910 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/ConnectionFailureException.php
+++ b/libs/jsonrpc/src/JsonRPC/Exception/ConnectionFailureException.php
@@ -2,14 +2,12 @@
namespace JsonRPC\Exception;
-use Exception;
-
/**
* Class ConnectionFailureException
*
* @package JsonRPC\Exception
* @author Frederic Guillot
*/
-class ConnectionFailureException extends Exception
+class ConnectionFailureException extends RpcCallFailedException
{
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonFormatException.php b/libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonFormatException.php
index e5bb31cd..294bc74c 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonFormatException.php
+++ b/libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonFormatException.php
@@ -2,14 +2,12 @@
namespace JsonRPC\Exception;
-use Exception;
-
/**
* Class InvalidJsonFormatException
*
* @package JsonRPC\Exception
* @author Frederic Guillot
*/
-class InvalidJsonFormatException extends Exception
+class InvalidJsonFormatException extends RpcCallFailedException
{
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php b/libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php
index e2277379..2e3ff05b 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php
+++ b/libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php
@@ -2,14 +2,12 @@
namespace JsonRPC\Exception;
-use Exception;
-
/**
* Class InvalidJsonRpcFormatException
*
* @package JsonRPC\Exception
* @author Frederic Guillot
*/
-class InvalidJsonRpcFormatException extends Exception
+class InvalidJsonRpcFormatException extends RpcCallFailedException
{
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php b/libs/jsonrpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php
index 0a40d806..16f75910 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php
+++ b/libs/jsonrpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php
@@ -2,14 +2,12 @@
namespace JsonRPC\Exception;
-use Exception;
-
/**
* Class ResponseEncodingFailureException
*
* @package JsonRPC\Exception
* @author Frederic Guillot
*/
-class ResponseEncodingFailureException extends Exception
+class ResponseEncodingFailureException extends RpcCallFailedException
{
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/ResponseException.php b/libs/jsonrpc/src/JsonRPC/Exception/ResponseException.php
index 98fb5c67..e97b4e6b 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/ResponseException.php
+++ b/libs/jsonrpc/src/JsonRPC/Exception/ResponseException.php
@@ -10,7 +10,7 @@ use Exception;
* @package JsonRPC\Exception
* @author Frederic Guillot
*/
-class ResponseException extends Exception
+class ResponseException extends RpcCallFailedException
{
/**
* A value that contains additional information about the error.
diff --git a/libs/jsonrpc/src/JsonRPC/Exception/RpcCallFailedException.php b/libs/jsonrpc/src/JsonRPC/Exception/RpcCallFailedException.php
new file mode 100644
index 00000000..b3fcd84e
--- /dev/null
+++ b/libs/jsonrpc/src/JsonRPC/Exception/RpcCallFailedException.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace JsonRPC\Exception;
+
+use Exception;
+
+/**
+ * Class RpcCallFailedException
+ *
+ * @package JsonRPC\Exception
+ * @author Frederic Guillot
+ */
+class RpcCallFailedException extends Exception
+{
+}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/ServerErrorException.php b/libs/jsonrpc/src/JsonRPC/Exception/ServerErrorException.php
index ab3ea584..29031604 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Exception/ServerErrorException.php
+++ b/libs/jsonrpc/src/JsonRPC/Exception/ServerErrorException.php
@@ -2,14 +2,12 @@
namespace JsonRPC\Exception;
-use Exception;
-
/**
* Class ServerErrorException
*
* @package JsonRPC\Exception
* @author Frederic Guillot
*/
-class ServerErrorException extends Exception
+class ServerErrorException extends RpcCallFailedException
{
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/HttpClient.php b/libs/jsonrpc/src/JsonRPC/HttpClient.php
index 90ce705a..01d50445 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/HttpClient.php
+++ b/libs/jsonrpc/src/JsonRPC/HttpClient.php
@@ -18,26 +18,26 @@ class HttpClient
/**
* URL of the server
*
- * @access private
+ * @access protected
* @var string
*/
- private $url;
+ protected $url;
/**
* HTTP client timeout
*
- * @access private
+ * @access protected
* @var integer
*/
- private $timeout = 5;
+ protected $timeout = 5;
/**
* Default HTTP headers to send to the server
*
- * @access private
+ * @access protected
* @var array
*/
- private $headers = array(
+ protected $headers = array(
'User-Agent: JSON-RPC PHP Client <https://github.com/fguillot/JsonRPC>',
'Content-Type: application/json',
'Accept: application/json',
@@ -47,50 +47,58 @@ class HttpClient
/**
* Username for authentication
*
- * @access private
+ * @access protected
* @var string
*/
- private $username;
+ protected $username;
/**
* Password for authentication
*
- * @access private
+ * @access protected
* @var string
*/
- private $password;
+ protected $password;
/**
* Enable debug output to the php error log
*
- * @access private
+ * @access protected
* @var boolean
*/
- private $debug = false;
+ protected $debug = false;
/**
* Cookies
*
- * @access private
+ * @access protected
* @var array
*/
- private $cookies = array();
+ protected $cookies = array();
/**
* SSL certificates verification
*
- * @access private
+ * @access protected
* @var boolean
*/
- private $verifySslCertificate = true;
+ protected $verifySslCertificate = true;
+
+ /**
+ * SSL client certificate
+ *
+ * @access protected
+ * @var string
+ */
+ protected $sslLocalCert;
/**
* Callback called before the doing the request
*
- * @access private
+ * @access protected
* @var Closure
*/
- private $beforeRequest;
+ protected $beforeRequest;
/**
* HttpClient constructor
@@ -156,7 +164,7 @@ class HttpClient
}
/**
- * Set timeout
+ * Set headers
*
* @access public
* @param array $headers
@@ -209,6 +217,18 @@ class HttpClient
}
/**
+ * Assign a certificate to use TLS
+ *
+ * @access public
+ * @return $this
+ */
+ public function withSslLocalCert($path)
+ {
+ $this->sslLocalCert = $path;
+ return $this;
+ }
+
+ /**
* Assign a callback before the request
*
* @access public
@@ -237,24 +257,57 @@ class HttpClient
*
* @access public
* @throws ConnectionFailureException
- * @param string $payload
+ * @param string $payload
+ * @param string[] $headers Headers for this request
* @return array
*/
- public function execute($payload)
+ public function execute($payload, array $headers = array())
{
if (is_callable($this->beforeRequest)) {
- call_user_func_array($this->beforeRequest, array($this, $payload));
+ call_user_func_array($this->beforeRequest, array($this, $payload, $headers));
}
- $stream = fopen(trim($this->url), 'r', false, $this->buildContext($payload));
+ if ($this->isCurlLoaded()) {
+ $ch = curl_init();
+ $requestHeaders = $this->buildHeaders($headers);
+ $headers = array();
+ curl_setopt_array($ch, array(
+ CURLOPT_URL => trim($this->url),
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_CONNECTTIMEOUT => $this->timeout,
+ CURLOPT_MAXREDIRS => 2,
+ CURLOPT_SSL_VERIFYPEER => $this->verifySslCertificate,
+ CURLOPT_POST => true,
+ CURLOPT_POSTFIELDS => $payload,
+ CURLOPT_HTTPHEADER => $requestHeaders,
+ CURLOPT_HEADERFUNCTION => function ($curl, $header) use (&$headers) {
+ $headers[] = $header;
+ return strlen($header);
+ }
+ ));
+ if ($this->sslLocalCert !== null) {
+ curl_setopt($ch, CURLOPT_CAINFO, $this->sslLocalCert);
+ }
+ $response = curl_exec($ch);
+ curl_close($ch);
+ if ($response !== false) {
+ $response = json_decode($response, true);
+ } else {
+ throw new ConnectionFailureException('Unable to establish a connection');
+ }
+ } else {
+ $stream = fopen(trim($this->url), 'r', false, $this->buildContext($payload, $headers));
- if (! is_resource($stream)) {
- throw new ConnectionFailureException('Unable to establish a connection');
- }
+ if (! is_resource($stream)) {
+ throw new ConnectionFailureException('Unable to establish a connection');
+ }
- $metadata = stream_get_meta_data($stream);
- $headers = $metadata['wrapper_data'];
- $response = json_decode(stream_get_contents($stream), true);
+ $metadata = stream_get_meta_data($stream);
+ $headers = $metadata['wrapper_data'];
+ $response = json_decode(stream_get_contents($stream), true);
+
+ fclose($stream);
+ }
if ($this->debug) {
error_log('==> Request: '.PHP_EOL.(is_string($payload) ? $payload : json_encode($payload, JSON_PRETTY_PRINT)));
@@ -271,29 +324,16 @@ class HttpClient
/**
* Prepare stream context
*
- * @access private
+ * @access protected
* @param string $payload
+ * @param string[] $headers
* @return resource
*/
- private function buildContext($payload)
+ protected function buildContext($payload, array $headers = array())
{
- $headers = $this->headers;
-
- if (! empty($this->username) && ! empty($this->password)) {
- $headers[] = 'Authorization: Basic '.base64_encode($this->username.':'.$this->password);
- }
+ $headers = $this->buildHeaders($headers);
- if (! empty($this->cookies)){
- $cookies = array();
-
- foreach ($this->cookies as $key => $value) {
- $cookies[] = $key.'='.$value;
- }
-
- $headers[] = 'Cookie: '.implode('; ', $cookies);
- }
-
- return stream_context_create(array(
+ $options = array(
'http' => array(
'method' => 'POST',
'protocol_version' => 1.1,
@@ -307,16 +347,22 @@ class HttpClient
'verify_peer' => $this->verifySslCertificate,
'verify_peer_name' => $this->verifySslCertificate,
)
- ));
+ );
+
+ if ($this->sslLocalCert !== null) {
+ $options['ssl']['local_cert'] = $this->sslLocalCert;
+ }
+
+ return stream_context_create($options);
}
/**
* Parse cookies from response
*
- * @access private
+ * @access protected
* @param array $headers
*/
- private function parseCookies(array $headers)
+ protected function parseCookies(array $headers)
{
foreach ($headers as $header) {
$pos = stripos($header, 'Set-Cookie:');
@@ -362,4 +408,42 @@ class HttpClient
}
}
}
+
+ /**
+ * Tests if the curl extension is loaded
+ *
+ * @access protected
+ * @return bool
+ */
+ protected function isCurlLoaded()
+ {
+ return extension_loaded('curl');
+ }
+
+ /**
+ * Prepare Headers
+ *
+ * @access protected
+ * @param array $headers
+ * @return array
+ */
+ protected function buildHeaders(array $headers)
+ {
+ $headers = array_merge($this->headers, $headers);
+
+ if (!empty($this->username) && !empty($this->password)) {
+ $headers[] = 'Authorization: Basic ' . base64_encode($this->username . ':' . $this->password);
+ }
+
+ if (!empty($this->cookies)) {
+ $cookies = array();
+
+ foreach ($this->cookies as $key => $value) {
+ $cookies[] = $key . '=' . $value;
+ }
+
+ $headers[] = 'Cookie: ' . implode('; ', $cookies);
+ }
+ return $headers;
+ }
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/MiddlewareHandler.php b/libs/jsonrpc/src/JsonRPC/MiddlewareHandler.php
index 61d5a2d2..61d5a2d2 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/MiddlewareHandler.php
+++ b/libs/jsonrpc/src/JsonRPC/MiddlewareHandler.php
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/MiddlewareInterface.php b/libs/jsonrpc/src/JsonRPC/MiddlewareInterface.php
index ab55261d..ab55261d 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/MiddlewareInterface.php
+++ b/libs/jsonrpc/src/JsonRPC/MiddlewareInterface.php
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/ProcedureHandler.php b/libs/jsonrpc/src/JsonRPC/ProcedureHandler.php
index 1e4fd518..fe33f6b1 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/ProcedureHandler.php
+++ b/libs/jsonrpc/src/JsonRPC/ProcedureHandler.php
@@ -108,6 +108,38 @@ class ProcedureHandler
}
/**
+ * Register multiple procedures from array
+ *
+ * @access public
+ * @param array $callbacks Array with procedure names (array keys) and callbacks (array values)
+ * @return $this
+ */
+ public function withCallbackArray($callbacks)
+ {
+ foreach ($callbacks as $procedure => $callback) {
+ $this->withCallback($procedure, $callback);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Bind multiple procedures to classes from array
+ *
+ * @access public
+ * @param array $callbacks Array with procedure names (array keys) and class and method names (array values)
+ * @return $this
+ */
+ public function withClassAndMethodArray($callbacks)
+ {
+ foreach ($callbacks as $procedure => $callback) {
+ $this->withClassAndMethod($procedure, $callback[0], $callback[1]);
+ }
+
+ return $this;
+ }
+
+ /**
* Execute the procedure
*
* @access public
@@ -250,7 +282,7 @@ class ProcedureHandler
foreach ($methodParams as $p) {
$name = $p->getName();
- if (isset($requestParams[$name])) {
+ if (array_key_exists($name, $requestParams)) {
$params[$name] = $requestParams[$name];
} elseif ($p->isDefaultValueAvailable()) {
$params[$name] = $p->getDefaultValue();
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Request/BatchRequestParser.php b/libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php
index c0fc776e..c0fc776e 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Request/BatchRequestParser.php
+++ b/libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Request/RequestBuilder.php b/libs/jsonrpc/src/JsonRPC/Request/RequestBuilder.php
index 145d21c1..145d21c1 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Request/RequestBuilder.php
+++ b/libs/jsonrpc/src/JsonRPC/Request/RequestBuilder.php
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Request/RequestParser.php b/libs/jsonrpc/src/JsonRPC/Request/RequestParser.php
index ea1b7d43..ea1b7d43 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Request/RequestParser.php
+++ b/libs/jsonrpc/src/JsonRPC/Request/RequestParser.php
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Response/ResponseBuilder.php b/libs/jsonrpc/src/JsonRPC/Response/ResponseBuilder.php
index c1caff92..a0348ce3 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Response/ResponseBuilder.php
+++ b/libs/jsonrpc/src/JsonRPC/Response/ResponseBuilder.php
@@ -24,26 +24,26 @@ class ResponseBuilder
/**
* Payload ID
*
- * @access private
+ * @access protected
* @var mixed
*/
- private $id;
+ protected $id;
/**
* Payload ID
*
- * @access private
+ * @access protected
* @var mixed
*/
- private $result;
+ protected $result;
/**
* Payload error code
*
- * @access private
+ * @access protected
* @var integer
*/
- private $errorCode;
+ protected $errorCode;
/**
* Payload error message
@@ -51,41 +51,41 @@ class ResponseBuilder
* @access private
* @var string
*/
- private $errorMessage;
+ protected $errorMessage;
/**
* Payload error data
*
- * @access private
+ * @access protected
* @var mixed
*/
- private $errorData;
+ protected $errorData;
/**
* HTTP Headers
*
- * @access private
+ * @access protected
* @var array
*/
- private $headers = array(
+ protected $headers = array(
'Content-Type' => 'application/json',
);
/**
* HTTP status
*
- * @access private
+ * @access protected
* @var string
*/
- private $status;
+ protected $status;
/**
* Exception
*
- * @access private
+ * @access protected
* @var ResponseException
*/
- private $exception;
+ protected $exception;
/**
* Get new object instance
@@ -212,7 +212,14 @@ class ResponseBuilder
*/
public function build()
{
- $encodedResponse = json_encode($this->buildResponse());
+ $options = 0;
+ if (defined('JSON_UNESCAPED_SLASHES')) {
+ $options |= JSON_UNESCAPED_SLASHES;
+ }
+ if (defined('JSON_UNESCAPED_UNICODE')) {
+ $options |= JSON_UNESCAPED_UNICODE;
+ }
+ $encodedResponse = json_encode($this->buildResponse(), $options);
JsonEncodingValidator::validate();
return $encodedResponse;
@@ -240,10 +247,10 @@ class ResponseBuilder
/**
* Build response payload
*
- * @access private
+ * @access protected
* @return array
*/
- private function buildResponse()
+ protected function buildResponse()
{
$response = array('jsonrpc' => '2.0');
$this->handleExceptions();
@@ -261,10 +268,10 @@ class ResponseBuilder
/**
* Build response error payload
*
- * @access private
+ * @access protected
* @return array
*/
- private function buildErrorResponse()
+ protected function buildErrorResponse()
{
$response = array(
'code' => $this->errorCode,
@@ -281,42 +288,47 @@ class ResponseBuilder
/**
* Transform exceptions to JSON-RPC errors
*
- * @access private
+ * @access protected
*/
- private function handleExceptions()
+ protected function handleExceptions()
{
- if ($this->exception instanceof InvalidJsonFormatException) {
+ try {
+ if ($this->exception instanceof Exception) {
+ throw $this->exception;
+ }
+ } catch (InvalidJsonFormatException $e) {
$this->errorCode = -32700;
$this->errorMessage = 'Parse error';
$this->id = null;
- } elseif ($this->exception instanceof InvalidJsonRpcFormatException) {
+ } catch (InvalidJsonRpcFormatException $e) {
$this->errorCode = -32600;
$this->errorMessage = 'Invalid Request';
$this->id = null;
- } elseif ($this->exception instanceof BadFunctionCallException) {
+ } catch (BadFunctionCallException $e) {
$this->errorCode = -32601;
$this->errorMessage = 'Method not found';
- } elseif ($this->exception instanceof InvalidArgumentException) {
+ } catch (InvalidArgumentException $e) {
$this->errorCode = -32602;
$this->errorMessage = 'Invalid params';
- } elseif ($this->exception instanceof ResponseEncodingFailureException) {
+ $this->errorData = $this->exception->getMessage();
+ } catch (ResponseEncodingFailureException $e) {
$this->errorCode = -32603;
$this->errorMessage = 'Internal error';
$this->errorData = $this->exception->getMessage();
- } elseif ($this->exception instanceof AuthenticationFailureException) {
+ } catch (AuthenticationFailureException $e) {
$this->errorCode = 401;
$this->errorMessage = 'Unauthorized';
$this->status = 'HTTP/1.0 401 Unauthorized';
$this->withHeader('WWW-Authenticate', 'Basic realm="JsonRPC"');
- } elseif ($this->exception instanceof AccessDeniedException) {
+ } catch (AccessDeniedException $e) {
$this->errorCode = 403;
$this->errorMessage = 'Forbidden';
$this->status = 'HTTP/1.0 403 Forbidden';
- } elseif ($this->exception instanceof ResponseException) {
+ } catch (ResponseException $e) {
$this->errorCode = $this->exception->getCode();
$this->errorMessage = $this->exception->getMessage();
$this->errorData = $this->exception->getData();
- } elseif ($this->exception instanceof Exception) {
+ } catch (Exception $e) {
$this->errorCode = $this->exception->getCode();
$this->errorMessage = $this->exception->getMessage();
}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Response/ResponseParser.php b/libs/jsonrpc/src/JsonRPC/Response/ResponseParser.php
index 02d449ba..02d449ba 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Response/ResponseParser.php
+++ b/libs/jsonrpc/src/JsonRPC/Response/ResponseParser.php
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Server.php b/libs/jsonrpc/src/JsonRPC/Server.php
index 1ed075a4..1ed075a4 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Server.php
+++ b/libs/jsonrpc/src/JsonRPC/Server.php
diff --git a/libs/jsonrpc/src/JsonRPC/Validator/HostValidator.php b/libs/jsonrpc/src/JsonRPC/Validator/HostValidator.php
new file mode 100644
index 00000000..3f9d6989
--- /dev/null
+++ b/libs/jsonrpc/src/JsonRPC/Validator/HostValidator.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace JsonRPC\Validator;
+
+use JsonRPC\Exception\AccessDeniedException;
+
+/**
+ * Class HostValidator
+ *
+ * @package JsonRPC\Validator
+ * @author Frederic Guillot
+ */
+class HostValidator
+{
+ /**
+ * Validate
+ *
+ * @static
+ * @access public
+ * @param array $hosts
+ * @param string $remoteAddress
+ * @throws AccessDeniedException
+ */
+ public static function validate(array $hosts, $remoteAddress)
+ {
+ if (!empty($hosts)) {
+ foreach ($hosts as $host) {
+ if (self::ipMatch($remoteAddress, $host)) {
+ return;
+ }
+ }
+ throw new AccessDeniedException('Access Forbidden');
+ }
+ }
+
+ /**
+ * Validate remoteAddress match host
+ * @param $remoteAddress
+ * @param $host
+ * @return bool
+ */
+ public static function ipMatch($remoteAddress, $host)
+ {
+ $host = trim($host);
+ if (strpos($host, '/') !== false) {
+ list($network, $mask) = explode('/', $host);
+ if (self::netMatch($remoteAddress, $network, $mask)) {
+ return true;
+ }
+ }
+
+ if ($host === $remoteAddress) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * validate the ipAddress in network
+ * 192.168.1.1/24
+ * @param $clientIp
+ * @param $networkIp
+ * @param $mask
+ *
+ * @return bool
+ */
+ public static function netMatch($clientIp, $networkIp, $mask)
+ {
+ $mask1 = 32 - $mask;
+ return ((ip2long($clientIp) >> $mask1) == (ip2long($networkIp) >> $mask1));
+ }
+}
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/JsonEncodingValidator.php b/libs/jsonrpc/src/JsonRPC/Validator/JsonEncodingValidator.php
index 0bbc4abd..0bbc4abd 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/JsonEncodingValidator.php
+++ b/libs/jsonrpc/src/JsonRPC/Validator/JsonEncodingValidator.php
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/JsonFormatValidator.php b/libs/jsonrpc/src/JsonRPC/Validator/JsonFormatValidator.php
index ca8e7a69..ca8e7a69 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/JsonFormatValidator.php
+++ b/libs/jsonrpc/src/JsonRPC/Validator/JsonFormatValidator.php
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/RpcFormatValidator.php b/libs/jsonrpc/src/JsonRPC/Validator/RpcFormatValidator.php
index f253a5a1..f253a5a1 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/RpcFormatValidator.php
+++ b/libs/jsonrpc/src/JsonRPC/Validator/RpcFormatValidator.php
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/UserValidator.php b/libs/jsonrpc/src/JsonRPC/Validator/UserValidator.php
index 4f889719..4f889719 100644
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/UserValidator.php
+++ b/libs/jsonrpc/src/JsonRPC/Validator/UserValidator.php
diff --git a/libs/jsonrpc/tests/ClientTest.php b/libs/jsonrpc/tests/ClientTest.php
new file mode 100644
index 00000000..d1f83877
--- /dev/null
+++ b/libs/jsonrpc/tests/ClientTest.php
@@ -0,0 +1,103 @@
+<?php
+
+use JsonRPC\Client;
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+class ClientTest extends PHPUnit_Framework_TestCase
+{
+ private $httpClient;
+
+ public function setUp()
+ {
+ $this->httpClient = $this
+ ->getMockBuilder('\JsonRPC\HttpClient')
+ ->setMethods(array('execute'))
+ ->getMock();
+ }
+
+ public function testSendBatch()
+ {
+ $client = new Client('', false, $this->httpClient);
+ $response = array(
+ array(
+ 'jsonrpc' => '2.0',
+ 'result' => 'c',
+ 'id' => 1,
+ ),
+ array(
+ 'jsonrpc' => '2.0',
+ 'result' => 'd',
+ 'id' => 2,
+ )
+ );
+
+ $this->httpClient
+ ->expects($this->once())
+ ->method('execute')
+ ->with($this->stringContains('[{"jsonrpc":"2.0","method":"methodA","id":'))
+ ->will($this->returnValue($response));
+
+
+ $result = $client->batch()
+ ->execute('methodA', array('a' => 'b'))
+ ->execute('methodB', array('a' => 'b'))
+ ->send();
+
+ $this->assertEquals(array('c', 'd'), $result);
+ }
+
+ public function testSendRequest()
+ {
+ $client = new Client('', false, $this->httpClient);
+
+ $this->httpClient
+ ->expects($this->once())
+ ->method('execute')
+ ->with($this->stringContains('{"jsonrpc":"2.0","method":"methodA","id":'))
+ ->will($this->returnValue(array('jsonrpc' => '2.0', 'result' => 'foobar', 'id' => 1)));
+
+ $result = $client->execute('methodA', array('a' => 'b'));
+ $this->assertEquals($result, 'foobar');
+ }
+
+ public function testSendRequestWithError()
+ {
+ $client = new Client('', false, $this->httpClient);
+
+ $this->httpClient
+ ->expects($this->once())
+ ->method('execute')
+ ->with($this->stringContains('{"jsonrpc":"2.0","method":"methodA","id":'))
+ ->will($this->returnValue(array(
+ 'jsonrpc' => '2.0',
+ 'error' => array(
+ 'code' => -32601,
+ 'message' => 'Method not found',
+ ),
+ )));
+
+ $this->setExpectedException('BadFunctionCallException');
+ $client->execute('methodA', array('a' => 'b'));
+ }
+
+ public function testSendRequestWithErrorAndReturnExceptionEnabled()
+ {
+ $client = new Client('', true, $this->httpClient);
+
+ $this->httpClient
+ ->expects($this->once())
+ ->method('execute')
+ ->with($this->stringContains('{"jsonrpc":"2.0","method":"methodA","id":'))
+ ->will($this->returnValue(array(
+ 'jsonrpc' => '2.0',
+ 'error' => array(
+ 'code' => -32601,
+ 'message' => 'Method not found',
+ ),
+ )));
+
+ $result = $client->execute('methodA', array('a' => 'b'));
+ $this->assertInstanceOf('BadFunctionCallException', $result);
+ }
+}
diff --git a/libs/jsonrpc/tests/HttpClientTest.php b/libs/jsonrpc/tests/HttpClientTest.php
new file mode 100644
index 00000000..71e6c8d0
--- /dev/null
+++ b/libs/jsonrpc/tests/HttpClientTest.php
@@ -0,0 +1,220 @@
+<?php
+
+namespace JsonRPC;
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+defined('CURLOPT_URL') or define('CURLOPT_URL', 10002);
+defined('CURLOPT_RETURNTRANSFER') or define('CURLOPT_RETURNTRANSFER', 19913);
+defined('CURLOPT_CONNECTTIMEOUT') or define('CURLOPT_CONNECTTIMEOUT', 78);
+defined('CURLOPT_MAXREDIRS') or define('CURLOPT_MAXREDIRS', 68);
+defined('CURLOPT_SSL_VERIFYPEER') or define('CURLOPT_SSL_VERIFYPEER', 64);
+defined('CURLOPT_POST') or define('CURLOPT_POST', 47);
+defined('CURLOPT_POSTFIELDS') or define('CURLOPT_POSTFIELDS', 10015);
+defined('CURLOPT_HTTPHEADER') or define('CURLOPT_HTTPHEADER', 10023);
+defined('CURLOPT_HEADERFUNCTION') or define('CURLOPT_HEADERFUNCTION', 20079);
+defined('CURLOPT_CAINFO') or define('CURLOPT_CAINFO', 10065);
+
+function extension_loaded($extension) {
+ return HttpClientTest::$functions->extension_loaded($extension);
+}
+
+function fopen($url, $mode, $use_include_path, $context)
+{
+ return HttpClientTest::$functions->fopen($url, $mode, $use_include_path, $context);
+}
+
+function stream_context_create(array $params)
+{
+ return HttpClientTest::$functions->stream_context_create($params);
+}
+
+function curl_init() {
+ return HttpClientTest::$functions->curl_init();
+}
+
+function curl_setopt_array($ch, array $params) {
+ HttpClientTest::$functions->curl_setopt_array($ch, $params);
+}
+
+function curl_setopt($ch, $option, $value) {
+ HttpClientTest::$functions->curl_setopt($ch, $option, $value);
+}
+
+function curl_exec($ch) {
+ return HttpClientTest::$functions->curl_exec($ch);
+}
+
+function curl_close($ch) {
+ HttpClientTest::$functions->curl_close($ch);
+}
+
+class HttpClientTest extends \PHPUnit_Framework_TestCase
+{
+ public static $functions;
+
+ public function setUp()
+ {
+ self::$functions = $this
+ ->getMockBuilder('stdClass')
+ ->setMethods(array('extension_loaded', 'fopen', 'stream_context_create',
+ 'curl_init', 'curl_setopt_array', 'curl_setopt', 'curl_exec', 'curl_close'))
+ ->getMock();
+ }
+
+ public function testWithServerError()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\ServerErrorException');
+
+ $httpClient = new HttpClient();
+ $httpClient->handleExceptions(array(
+ 'HTTP/1.0 301 Moved Permanently',
+ 'Connection: close',
+ 'HTTP/1.1 500 Internal Server Error',
+ ));
+ }
+
+ public function testWithConnectionFailure()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\ConnectionFailureException');
+
+ $httpClient = new HttpClient();
+ $httpClient->handleExceptions(array(
+ 'HTTP/1.1 404 Not Found',
+ ));
+ }
+
+ public function testWithAccessForbidden()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\AccessDeniedException');
+
+ $httpClient = new HttpClient();
+ $httpClient->handleExceptions(array(
+ 'HTTP/1.1 403 Forbidden',
+ ));
+ }
+
+ public function testWithAccessNotAllowed()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\AccessDeniedException');
+
+ $httpClient = new HttpClient();
+ $httpClient->handleExceptions(array(
+ 'HTTP/1.0 401 Unauthorized',
+ ));
+ }
+
+ public function testWithCallback()
+ {
+ self::$functions
+ ->expects($this->at(0))
+ ->method('extension_loaded')
+ ->with('curl')
+ ->will($this->returnValue(false));
+
+ self::$functions
+ ->expects($this->at(1))
+ ->method('stream_context_create')
+ ->with(array(
+ 'http' => array(
+ 'method' => 'POST',
+ 'protocol_version' => 1.1,
+ 'timeout' => 5,
+ 'max_redirects' => 2,
+ 'header' => implode("\r\n", array(
+ 'User-Agent: JSON-RPC PHP Client <https://github.com/fguillot/JsonRPC>',
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Connection: close',
+ 'Content-Length: 4',
+ )),
+ 'content' => 'test',
+ 'ignore_errors' => true,
+ ),
+ 'ssl' => array(
+ 'verify_peer' => true,
+ 'verify_peer_name' => true,
+ )
+ ))
+ ->will($this->returnValue('context'));
+
+ self::$functions
+ ->expects($this->at(2))
+ ->method('fopen')
+ ->with('url', 'r', false, 'context')
+ ->will($this->returnValue(false));
+
+ $httpClient = new HttpClient('url');
+ $httpClient->withBeforeRequestCallback(function(HttpClient $client, $payload) {
+ $client->withHeaders(array('Content-Length: '.strlen($payload)));
+ });
+
+ $this->setExpectedException('\JsonRPC\Exception\ConnectionFailureException');
+ $httpClient->execute('test');
+ }
+
+ public function testWithCurl()
+ {
+ self::$functions
+ ->expects($this->at(0))
+ ->method('extension_loaded')
+ ->with('curl')
+ ->will($this->returnValue(true));
+
+ self::$functions
+ ->expects($this->at(1))
+ ->method('curl_init')
+ ->will($this->returnValue('curl'));
+
+ self::$functions
+ ->expects($this->at(2))
+ ->method('curl_setopt_array')
+ ->with('curl', array(
+ CURLOPT_URL => 'url',
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_CONNECTTIMEOUT => 5,
+ CURLOPT_MAXREDIRS => 2,
+ CURLOPT_SSL_VERIFYPEER => true,
+ CURLOPT_POST => true,
+ CURLOPT_POSTFIELDS => 'test',
+ CURLOPT_HTTPHEADER => array(
+ 'User-Agent: JSON-RPC PHP Client <https://github.com/fguillot/JsonRPC>',
+ 'Content-Type: application/json',
+ 'Accept: application/json',
+ 'Connection: close',
+ 'Content-Length: 4',
+ ),
+ CURLOPT_HEADERFUNCTION => function ($curl, $header) use (&$headers) {
+ $headers[] = $header;
+ return strlen($header);
+ }
+ ));
+
+ self::$functions
+ ->expects($this->at(3))
+ ->method('curl_setopt')
+ ->with('curl', CURLOPT_CAINFO, 'test.crt');
+
+ self::$functions
+ ->expects($this->at(4))
+ ->method('curl_exec')
+ ->with('curl')
+ ->will($this->returnValue(false));
+
+ self::$functions
+ ->expects($this->at(5))
+ ->method('curl_close')
+ ->with('curl');
+
+ $httpClient = new HttpClient('url');
+ $httpClient
+ ->withSslLocalCert('test.crt')
+ ->withBeforeRequestCallback(function(HttpClient $client, $payload) {
+ $client->withHeaders(array('Content-Length: '.strlen($payload)));
+ });
+
+
+ $this->setExpectedException('\JsonRPC\Exception\ConnectionFailureException');
+ $httpClient->execute('test');
+ }
+}
diff --git a/libs/jsonrpc/tests/MiddlewareHandlerTest.php b/libs/jsonrpc/tests/MiddlewareHandlerTest.php
new file mode 100644
index 00000000..be70cbf7
--- /dev/null
+++ b/libs/jsonrpc/tests/MiddlewareHandlerTest.php
@@ -0,0 +1,40 @@
+<?php
+
+use JsonRPC\Exception\AuthenticationFailureException;
+use JsonRPC\MiddlewareHandler;
+use JsonRPC\MiddlewareInterface;
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+class FirstMiddleware implements MiddlewareInterface
+{
+ public function execute($username, $password, $procedureName)
+ {
+ }
+}
+
+class SecondMiddleware implements MiddlewareInterface
+{
+ public function execute($username, $password, $procedureName)
+ {
+ if ($username === 'myUsername' && $password === 'myPassword' && $procedureName === 'myProcedure') {
+ throw new AuthenticationFailureException('Bad user');
+ }
+ }
+}
+
+class MiddlewareHandlerTest extends PHPUnit_Framework_TestCase
+{
+ public function testMiddlewareCanRaiseException()
+ {
+ $this->setExpectedException('JsonRpc\Exception\AuthenticationFailureException');
+
+ $middlewareHandler = new MiddlewareHandler();
+ $middlewareHandler->withUsername('myUsername');
+ $middlewareHandler->withPassword('myPassword');
+ $middlewareHandler->withProcedure('myProcedure');
+ $middlewareHandler->withMiddleware(new FirstMiddleware());
+ $middlewareHandler->withMiddleware(new SecondMiddleware());
+ $middlewareHandler->execute();
+ }
+}
diff --git a/libs/jsonrpc/tests/ProcedureHandlerTest.php b/libs/jsonrpc/tests/ProcedureHandlerTest.php
new file mode 100644
index 00000000..983016c5
--- /dev/null
+++ b/libs/jsonrpc/tests/ProcedureHandlerTest.php
@@ -0,0 +1,153 @@
+<?php
+
+use JsonRPC\ProcedureHandler;
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+class A
+{
+ public function getAll($p1, $p2, $p3 = 4)
+ {
+ return $p1 + $p2 + $p3;
+ }
+}
+
+class B
+{
+ public function getAll($p1)
+ {
+ return $p1 + 2;
+ }
+}
+
+class ClassWithBeforeMethod
+{
+ private $foobar = '';
+
+ public function before($procedure)
+ {
+ $this->foobar = $procedure;
+ }
+
+ public function myProcedure()
+ {
+ return $this->foobar;
+ }
+}
+
+class ProcedureHandlerTest extends PHPUnit_Framework_TestCase
+{
+ public function testProcedureNotFound()
+ {
+ $this->setExpectedException('BadFunctionCallException');
+ $handler = new ProcedureHandler;
+ $handler->executeProcedure('a');
+ }
+
+ public function testCallbackNotFound()
+ {
+ $this->setExpectedException('BadFunctionCallException');
+ $handler = new ProcedureHandler;
+ $handler->withCallback('b', function() {});
+ $handler->executeProcedure('a');
+ }
+
+ public function testClassNotFound()
+ {
+ $this->setExpectedException('BadFunctionCallException');
+ $handler = new ProcedureHandler;
+ $handler->withClassAndMethod('getAllTasks', 'c', 'getAll');
+ $handler->executeProcedure('getAllTasks');
+ }
+
+ public function testMethodNotFound()
+ {
+ $this->setExpectedException('BadFunctionCallException');
+ $handler = new ProcedureHandler;
+ $handler->withClassAndMethod('getAllTasks', 'A', 'getNothing');
+ $handler->executeProcedure('getAllTasks');
+ }
+
+ public function testIsPositionalArguments()
+ {
+ $handler = new ProcedureHandler;
+ $this->assertFalse($handler->isPositionalArguments(
+ array('a' => 'b', 'c' => 'd')
+ ));
+
+ $handler = new ProcedureHandler;
+ $this->assertTrue($handler->isPositionalArguments(
+ array('a', 'b', 'c')
+ ));
+ }
+
+ public function testBindNamedArguments()
+ {
+ $handler = new ProcedureHandler;
+ $handler->withClassAndMethod('getAllA', 'A', 'getAll');
+ $handler->withClassAndMethod('getAllB', 'B', 'getAll');
+ $handler->withClassAndMethod('getAllC', new B, 'getAll');
+ $this->assertEquals(6, $handler->executeProcedure('getAllA', array('p2' => 4, 'p1' => -2)));
+ $this->assertEquals(10, $handler->executeProcedure('getAllA', array('p2' => 4, 'p3' => 8, 'p1' => -2)));
+ $this->assertEquals(6, $handler->executeProcedure('getAllB', array('p1' => 4)));
+ $this->assertEquals(5, $handler->executeProcedure('getAllC', array('p1' => 3)));
+ }
+
+ public function testBindPositionalArguments()
+ {
+ $handler = new ProcedureHandler;
+ $handler->withClassAndMethod('getAllA', 'A', 'getAll');
+ $handler->withClassAndMethod('getAllB', 'B', 'getAll');
+ $this->assertEquals(6, $handler->executeProcedure('getAllA', array(4, -2)));
+ $this->assertEquals(2, $handler->executeProcedure('getAllA', array(4, 0, -2)));
+ $this->assertEquals(4, $handler->executeProcedure('getAllB', array(2)));
+ }
+
+ public function testRegisterNamedArguments()
+ {
+ $handler = new ProcedureHandler;
+ $handler->withCallback('getAllA', function($p1, $p2, $p3 = 4) {
+ return $p1 + $p2 + $p3;
+ });
+
+ $this->assertEquals(6, $handler->executeProcedure('getAllA', array('p2' => 4, 'p1' => -2)));
+ $this->assertEquals(10, $handler->executeProcedure('getAllA', array('p2' => 4, 'p3' => 8, 'p1' => -2)));
+ }
+
+ public function testRegisterPositionalArguments()
+ {
+ $handler = new ProcedureHandler;
+ $handler->withCallback('getAllA', function($p1, $p2, $p3 = 4) {
+ return $p1 + $p2 + $p3;
+ });
+
+ $this->assertEquals(6, $handler->executeProcedure('getAllA', array(4, -2)));
+ $this->assertEquals(2, $handler->executeProcedure('getAllA', array(4, 0, -2)));
+ }
+
+ public function testTooManyArguments()
+ {
+ $this->setExpectedException('InvalidArgumentException');
+
+ $handler = new ProcedureHandler;
+ $handler->withClassAndMethod('getAllC', new B, 'getAll');
+ $handler->executeProcedure('getAllC', array('p1' => 3, 'p2' => 5));
+ }
+
+ public function testNotEnoughArguments()
+ {
+ $this->setExpectedException('InvalidArgumentException');
+
+ $handler = new ProcedureHandler;
+ $handler->withClassAndMethod('getAllC', new B, 'getAll');
+ $handler->executeProcedure('getAllC');
+ }
+
+ public function testBeforeMethod()
+ {
+ $handler = new ProcedureHandler;
+ $handler->withObject(new ClassWithBeforeMethod);
+ $handler->withBeforeMethod('before');
+ $this->assertEquals('myProcedure', $handler->executeProcedure('myProcedure'));
+ }
+}
diff --git a/libs/jsonrpc/tests/Request/RequestBuilderTest.php b/libs/jsonrpc/tests/Request/RequestBuilderTest.php
new file mode 100644
index 00000000..ce9cf674
--- /dev/null
+++ b/libs/jsonrpc/tests/Request/RequestBuilderTest.php
@@ -0,0 +1,53 @@
+<?php
+
+use JsonRPC\Request\RequestBuilder;
+
+require_once __DIR__.'/../../../../vendor/autoload.php';
+
+class RequestBuilderTest extends PHPUnit_Framework_TestCase
+{
+ public function testBuilder()
+ {
+ $payload = RequestBuilder::create()
+ ->withId(123)
+ ->withProcedure('foobar')
+ ->withParams(array(1, 2, 3))
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","method":"foobar","id":123,"params":[1,2,3]}', $payload);
+ }
+
+ public function testBuilderWithoutParams()
+ {
+ $payload = RequestBuilder::create()
+ ->withId(123)
+ ->withProcedure('foobar')
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","method":"foobar","id":123}', $payload);
+ }
+
+ public function testBuilderWithoutId()
+ {
+ $payload = RequestBuilder::create()
+ ->withProcedure('foobar')
+ ->withParams(array(1, 2, 3))
+ ->build();
+
+ $result = json_decode($payload, true);
+ $this->assertNotNull($result['id']);
+ }
+
+ public function testBuilderWithAdditionalRequestAttributes()
+ {
+ $payload = RequestBuilder::create()
+ ->withProcedure('foobar')
+ ->withParams(array(1, 2, 3))
+ ->withRequestAttributes(array("some-attr" => 42))
+ ->build();
+
+ $result = json_decode($payload, true);
+ $this->assertNotNull($result['some-attr']);
+ }
+
+}
diff --git a/libs/jsonrpc/tests/Response/HeaderMockTest.php b/libs/jsonrpc/tests/Response/HeaderMockTest.php
new file mode 100644
index 00000000..cbeb7388
--- /dev/null
+++ b/libs/jsonrpc/tests/Response/HeaderMockTest.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace JsonRPC\Response;
+
+use PHPUnit_Framework_TestCase;
+
+require_once __DIR__.'/../../../../vendor/autoload.php';
+
+function header($value)
+{
+ HeaderMockTest::$functions->header($value);
+}
+
+abstract class HeaderMockTest extends PHPUnit_Framework_TestCase
+{
+ public static $functions;
+
+ public function setUp()
+ {
+ self::$functions = $this
+ ->getMockBuilder('stdClass')
+ ->setMethods(array('header'))
+ ->getMock();
+ }
+}
diff --git a/libs/jsonrpc/tests/Response/ResponseBuilderTest.php b/libs/jsonrpc/tests/Response/ResponseBuilderTest.php
new file mode 100644
index 00000000..e2dcb2a0
--- /dev/null
+++ b/libs/jsonrpc/tests/Response/ResponseBuilderTest.php
@@ -0,0 +1,151 @@
+<?php
+
+use JsonRPC\Exception\AccessDeniedException;
+use JsonRPC\Exception\AuthenticationFailureException;
+use JsonRPC\Exception\InvalidJsonFormatException;
+use JsonRPC\Exception\InvalidJsonRpcFormatException;
+use JsonRPC\Exception\ResponseEncodingFailureException;
+use JsonRPC\Exception\ResponseException;
+use JsonRPC\Response\ResponseBuilder;
+
+require_once __DIR__.'/../../../../vendor/autoload.php';
+
+class ResponseBuilderTest extends PHPUnit_Framework_TestCase
+{
+ public function testBuildResponse()
+ {
+ $response = ResponseBuilder::create()
+ ->withId(123)
+ ->withResult('test')
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","result":"test","id":123}', $response);
+ }
+
+ public function testBuildResponseWithError()
+ {
+ $response = ResponseBuilder::create()
+ ->withId(123)
+ ->withResult('test')
+ ->withError(42, 'Test', 'More info')
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":42,"message":"Test","data":"More info"},"id":123}', $response);
+ }
+
+ public function testBuildResponseWithException()
+ {
+ $response = ResponseBuilder::create()
+ ->withId(123)
+ ->withResult('test')
+ ->withException(new Exception('Test'))
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":0,"message":"Test"},"id":123}', $response);
+ }
+
+ public function testBuildResponseWithResponseException()
+ {
+ $exception = new ResponseException('Error', 42);
+ $exception->setData('Data');
+
+ $response = ResponseBuilder::create()
+ ->withId(123)
+ ->withResult('test')
+ ->withException($exception)
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":42,"message":"Error","data":"Data"},"id":123}', $response);
+ }
+
+ public function testBuildResponseWithAccessDeniedException()
+ {
+ $responseBuilder = ResponseBuilder::create();
+ $response = $responseBuilder
+ ->withId(123)
+ ->withResult('test')
+ ->withException(new AccessDeniedException('Test'))
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":403,"message":"Forbidden"},"id":123}', $response);
+ $this->assertEquals('HTTP/1.0 403 Forbidden', $responseBuilder->getStatus());
+
+ $this->assertEquals(
+ array('Content-Type' => 'application/json'),
+ $responseBuilder->getHeaders()
+ );
+ }
+
+ public function testBuildResponseWithAuthenticationFailureException()
+ {
+ $responseBuilder = ResponseBuilder::create();
+ $response = $responseBuilder
+ ->withId(123)
+ ->withResult('test')
+ ->withException(new AuthenticationFailureException('Test'))
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":401,"message":"Unauthorized"},"id":123}', $response);
+ $this->assertEquals('HTTP/1.0 401 Unauthorized', $responseBuilder->getStatus());
+
+ $this->assertEquals(
+ array('Content-Type' => 'application/json', 'WWW-Authenticate' => 'Basic realm="JsonRPC"'),
+ $responseBuilder->getHeaders()
+ );
+ }
+
+ public function testBuildResponseWithResponseEncodingFailureException()
+ {
+ $response = ResponseBuilder::create()
+ ->withId(123)
+ ->withResult('test')
+ ->withException(new ResponseEncodingFailureException('Test'))
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32603,"message":"Internal error","data":"Test"},"id":123}', $response);
+ }
+
+ public function testBuildResponseWithInvalidArgumentException()
+ {
+ $response = ResponseBuilder::create()
+ ->withId(123)
+ ->withResult('test')
+ ->withException(new InvalidArgumentException('Test'))
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params","data":"Test"},"id":123}', $response);
+ }
+
+ public function testBuildResponseWithBadFunctionCallException()
+ {
+ $response = ResponseBuilder::create()
+ ->withId(123)
+ ->withResult('test')
+ ->withException(new BadFunctionCallException('Test'))
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32601,"message":"Method not found"},"id":123}', $response);
+ }
+
+ public function testBuildResponseWithInvalidJsonRpcFormatException()
+ {
+ $response = ResponseBuilder::create()
+ ->withId(123)
+ ->withResult('test')
+ ->withException(new InvalidJsonRpcFormatException('Test'))
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32600,"message":"Invalid Request"},"id":null}', $response);
+ }
+
+ public function testBuildResponseWithInvalidJsonFormatException()
+ {
+ $response = ResponseBuilder::create()
+ ->withId(123)
+ ->withResult('test')
+ ->withException(new InvalidJsonFormatException('Test'))
+ ->build();
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32700,"message":"Parse error"},"id":null}', $response);
+ }
+}
diff --git a/libs/jsonrpc/tests/Response/ResponseParserTest.php b/libs/jsonrpc/tests/Response/ResponseParserTest.php
new file mode 100644
index 00000000..f195014f
--- /dev/null
+++ b/libs/jsonrpc/tests/Response/ResponseParserTest.php
@@ -0,0 +1,100 @@
+<?php
+
+use JsonRPC\Response\ResponseParser;
+
+require_once __DIR__.'/../../../../vendor/autoload.php';
+
+class ResponseParserTest extends PHPUnit_Framework_TestCase
+{
+ public function testSingleRequest()
+ {
+ $result = ResponseParser::create()
+ ->withPayload(json_decode('{"jsonrpc": "2.0", "result": "foobar", "id": "1"}', true))
+ ->parse();
+
+ $this->assertEquals('foobar', $result);
+ }
+
+ public function testWithBadJsonFormat()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\InvalidJsonFormatException');
+
+ ResponseParser::create()
+ ->withPayload('foobar')
+ ->parse();
+ }
+
+ public function testWithBadProcedure()
+ {
+ $this->setExpectedException('BadFunctionCallException');
+
+ ResponseParser::create()
+ ->withPayload(json_decode('{"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "1"}', true))
+ ->parse();
+ }
+
+ public function testWithInvalidArgs()
+ {
+ $this->setExpectedException('InvalidArgumentException');
+
+ ResponseParser::create()
+ ->withPayload(json_decode('{"jsonrpc": "2.0", "error": {"code": -32602, "message": "Invalid params"}, "id": "1"}', true))
+ ->parse();
+ }
+
+ public function testWithInvalidRequest()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\InvalidJsonRpcFormatException');
+
+ ResponseParser::create()
+ ->withPayload(json_decode('{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', true))
+ ->parse();
+ }
+
+ public function testWithParseError()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\InvalidJsonFormatException');
+
+ ResponseParser::create()
+ ->withPayload(json_decode('{"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}', true))
+ ->parse();
+ }
+
+ public function testWithOtherError()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\ResponseException');
+
+ ResponseParser::create()
+ ->withPayload(json_decode('{"jsonrpc": "2.0", "error": {"code": 42, "message": "Something", "data": "foobar"}, "id": null}', true))
+ ->parse();
+ }
+
+ public function testBatch()
+ {
+ $payload = '[
+ {"jsonrpc": "2.0", "result": 7, "id": "1"},
+ {"jsonrpc": "2.0", "result": 19, "id": "2"}
+ ]';
+
+ $result = ResponseParser::create()
+ ->withPayload(json_decode($payload, true))
+ ->parse();
+
+ $this->assertEquals(array(7, 19), $result);
+ }
+
+ public function testBatchWithError()
+ {
+ $payload = '[
+ {"jsonrpc": "2.0", "result": 7, "id": "1"},
+ {"jsonrpc": "2.0", "result": 19, "id": "2"},
+ {"jsonrpc": "2.0", "error": {"code": -32602, "message": "Invalid params"}, "id": "1"}
+ ]';
+
+ $this->setExpectedException('InvalidArgumentException');
+
+ ResponseParser::create()
+ ->withPayload(json_decode($payload, true))
+ ->parse();
+ }
+}
diff --git a/libs/jsonrpc/tests/ServerProtocolTest.php b/libs/jsonrpc/tests/ServerProtocolTest.php
new file mode 100644
index 00000000..a488015b
--- /dev/null
+++ b/libs/jsonrpc/tests/ServerProtocolTest.php
@@ -0,0 +1,237 @@
+<?php
+
+use JsonRPC\Server;
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+require_once __DIR__.'/Response/HeaderMockTest.php';
+
+class C
+{
+ public function doSomething()
+ {
+ return 'something';
+ }
+}
+
+class ServerProtocolTest extends \JsonRPC\Response\HeaderMockTest
+{
+ public function testPositionalParameters()
+ {
+ $subtract = function ($minuend, $subtrahend) {
+ return $minuend - $subtrahend;
+ };
+
+ $server = new Server('{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}');
+ $server->register('subtract', $subtract);
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0", "result": 19, "id": 1}', true),
+ json_decode($server->execute(), true)
+ );
+
+ $server = new Server('{"jsonrpc": "2.0", "method": "subtract", "params": [23, 42], "id": 1}');
+ $server->register('subtract', $subtract);
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0", "result": -19, "id": 1}', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testNamedParameters()
+ {
+ $subtract = function ($minuend, $subtrahend) {
+ return $minuend - $subtrahend;
+ };
+
+ $server = new Server('{"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42}, "id": 3}');
+ $server->register('subtract', $subtract);
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0", "result": 19, "id": 3}', true),
+ json_decode($server->execute(), true)
+ );
+
+ $server = new Server('{"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 4}');
+ $server->register('subtract', $subtract);
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0", "result": 19, "id": 4}', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testNotification()
+ {
+ $update = function($p1, $p2, $p3, $p4, $p5) {};
+ $foobar = function() {};
+
+ $server = new Server('{"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]}');
+ $server->register('update', $update);
+ $server->register('foobar', $foobar);
+
+ $this->assertEquals('', $server->execute());
+
+ $server = new Server('{"jsonrpc": "2.0", "method": "foobar"}');
+ $server->register('update', $update);
+ $server->register('foobar', $foobar);
+
+ $this->assertEquals('', $server->execute());
+ }
+
+ public function testNoMethod()
+ {
+ $server = new Server('{"jsonrpc": "2.0", "method": "foobar", "id": "1"}');
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "1"}', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testInvalidJson()
+ {
+ $server = new Server('{"jsonrpc": "2.0", "method": "foobar, "params": "bar", "baz]');
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testInvalidRequest()
+ {
+ $server = new Server('{"jsonrpc": "2.0", "method": 1, "params": "bar", "id": 1}');
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testInvalidResponse_MalformedCharacters()
+ {
+ $server = new Server('{"jsonrpc": "2.0", "method": "invalidresponse","id": 1}');
+
+ $invalidresponse = function() {
+ return pack("H*" ,'c32e');
+ };
+
+ $server->register('invalidresponse', $invalidresponse);
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0","id": 1, "error": {"code": -32603, "message": "Internal error","data": "Malformed UTF-8 characters, possibly incorrectly encoded"}}', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testBatchInvalidJson()
+ {
+ $server = new Server('[
+ {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"},
+ {"jsonrpc": "2.0", "method"
+ ]');
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testBatchEmptyArray()
+ {
+ $server = new Server('[]');
+
+ $this->assertEquals(
+ json_decode('{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testBatchNotEmptyButInvalid()
+ {
+ $server = new Server('[1]');
+
+ $this->assertEquals(
+ json_decode('[{"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}]', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testBatchInvalid()
+ {
+ $server = new Server('[1,2,3]');
+
+ $this->assertEquals(
+ json_decode('[
+ {"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null},
+ {"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null},
+ {"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}
+ ]', true),
+ json_decode($server->execute(), true)
+ );
+ }
+
+ public function testBatchOk()
+ {
+ $server = new Server('[
+ {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"},
+ {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]},
+ {"jsonrpc": "2.0", "method": "subtract", "params": [42,23], "id": "2"},
+ {"foo": "boo"},
+ {"jsonrpc": "2.0", "method": "foo.get", "params": {"name": "myself"}, "id": "5"},
+ {"jsonrpc": "2.0", "method": "get_data", "id": "9"},
+ {"jsonrpc": "2.0", "method": "doSomething", "id": 10},
+ {"jsonrpc": "2.0", "method": "doStuff", "id": 15}
+ ]');
+
+ $server->register('sum', function($a, $b, $c) {
+ return $a + $b + $c;
+ });
+
+ $server->register('subtract', function($minuend, $subtrahend) {
+ return $minuend - $subtrahend;
+ });
+
+ $server->register('get_data', function() {
+ return array('hello', 5);
+ });
+
+ $server->attach(new C);
+
+ $server->bind('doStuff', 'C', 'doSomething');
+
+ $response = $server->execute();
+
+ $this->assertEquals(
+ json_decode('[
+ {"jsonrpc": "2.0", "result": 7, "id": "1"},
+ {"jsonrpc": "2.0", "result": 19, "id": "2"},
+ {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},
+ {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "5"},
+ {"jsonrpc": "2.0", "result": ["hello", 5], "id": "9"},
+ {"jsonrpc": "2.0", "result": "something", "id": "10"},
+ {"jsonrpc": "2.0", "result": "something", "id": "15"}
+ ]', true),
+ json_decode($response, true)
+ );
+ }
+
+ public function testBatchNotifications()
+ {
+ $server = new Server('[
+ {"jsonrpc": "2.0", "method": "notify_sum", "params": [1,2,4]},
+ {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]}
+ ]');
+
+ $server->register('notify_sum', function($a, $b, $c) {
+
+ });
+
+ $server->register('notify_hello', function($id) {
+
+ });
+
+ $this->assertEquals('', $server->execute());
+ }
+}
diff --git a/libs/jsonrpc/tests/ServerTest.php b/libs/jsonrpc/tests/ServerTest.php
new file mode 100644
index 00000000..87f37c2d
--- /dev/null
+++ b/libs/jsonrpc/tests/ServerTest.php
@@ -0,0 +1,258 @@
+<?php
+
+use JsonRPC\Exception\AccessDeniedException;
+use JsonRPC\Exception\AuthenticationFailureException;
+use JsonRPC\Exception\ResponseException;
+use JsonRPC\MiddlewareInterface;
+use JsonRPC\Response\HeaderMockTest;
+use JsonRPC\Server;
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+require_once __DIR__.'/Response/HeaderMockTest.php';
+
+class MyException extends Exception
+{
+
+}
+
+class DummyMiddleware implements MiddlewareInterface
+{
+ public function execute($username, $password, $procedureName)
+ {
+ throw new AuthenticationFailureException('Bad user');
+ }
+}
+
+class ServerTest extends HeaderMockTest
+{
+ private $payload = '{"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"}';
+
+ public function testCustomAuthenticationHeader()
+ {
+ $env = array(
+ 'HTTP_X_AUTH' => base64_encode('myuser:mypassword'),
+ );
+
+ $server = new Server($this->payload, $env);
+ $server->setAuthenticationHeader('X-Auth');
+ $this->assertEquals('myuser', $server->getUsername());
+ $this->assertEquals('mypassword', $server->getPassword());
+ }
+
+ public function testCustomAuthenticationHeaderWithEmptyValue()
+ {
+ $server = new Server($this->payload);
+ $server->setAuthenticationHeader('X-Auth');
+ $this->assertNull($server->getUsername());
+ $this->assertNull($server->getPassword());
+ }
+
+ public function testGetUsername()
+ {
+ $server = new Server($this->payload);
+ $this->assertNull($server->getUsername());
+
+ $server = new Server($this->payload, array('PHP_AUTH_USER' => 'username'));
+ $this->assertEquals('username', $server->getUsername());
+ }
+
+ public function testGetPassword()
+ {
+ $server = new Server($this->payload);
+ $this->assertNull($server->getPassword());
+
+ $server = new Server($this->payload, array('PHP_AUTH_PW' => 'password'));
+ $this->assertEquals('password', $server->getPassword());
+ }
+
+ public function testExecute()
+ {
+ $server = new Server($this->payload);
+ $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) {
+ return $a + $b + $c;
+ });
+
+ self::$functions
+ ->expects($this->once())
+ ->method('header')
+ ->with('Content-Type: application/json');
+
+ $this->assertEquals('{"jsonrpc":"2.0","result":7,"id":"1"}', $server->execute());
+ }
+
+ public function testExecuteRequestParserOverride()
+ {
+ $requestParser = $this->getMockBuilder('JsonRPC\Request\RequestParser')
+ ->getMock();
+
+ $requestParser->method('withPayload')->willReturn($requestParser);
+ $requestParser->method('withProcedureHandler')->willReturn($requestParser);
+ $requestParser->method('withMiddlewareHandler')->willReturn($requestParser);
+ $requestParser->method('withLocalException')->willReturn($requestParser);
+
+ $server = new Server($this->payload, array(), null, $requestParser);
+
+ $requestParser->expects($this->once())
+ ->method('parse');
+
+ $server->execute();
+ }
+
+ public function testExecuteBatchRequestParserOverride()
+ {
+ $batchRequestParser = $this->getMockBuilder('JsonRPC\Request\BatchRequestParser')
+ ->getMock();
+
+ $batchRequestParser->method('withPayload')->willReturn($batchRequestParser);
+ $batchRequestParser->method('withProcedureHandler')->willReturn($batchRequestParser);
+ $batchRequestParser->method('withMiddlewareHandler')->willReturn($batchRequestParser);
+ $batchRequestParser->method('withLocalException')->willReturn($batchRequestParser);
+
+ $server = new Server('["...", "..."]', array(), null, null, $batchRequestParser);
+
+ $batchRequestParser->expects($this->once())
+ ->method('parse');
+
+ $server->execute();
+ }
+
+ public function testExecuteResponseBuilderOverride()
+ {
+ $responseBuilder = $this->getMockBuilder('JsonRPC\Response\ResponseBuilder')
+ ->getMock();
+
+ $responseBuilder->expects($this->once())
+ ->method('sendHeaders');
+
+ $server = new Server($this->payload, array(), $responseBuilder);
+ $server->execute();
+ }
+
+ public function testExecuteProcedureHandlerOverride()
+ {
+ $batchRequestParser = $this->getMockBuilder('JsonRPC\Request\BatchRequestParser')
+ ->getMock();
+
+ $procedureHandler = $this->getMockBuilder('JsonRPC\ProcedureHandler')
+ ->getMock();
+
+ $batchRequestParser->method('withPayload')->willReturn($batchRequestParser);
+ $batchRequestParser->method('withProcedureHandler')->willReturn($batchRequestParser);
+ $batchRequestParser->method('withMiddlewareHandler')->willReturn($batchRequestParser);
+ $batchRequestParser->method('withLocalException')->willReturn($batchRequestParser);
+
+ $server = new Server('["...", "..."]', array(), null, null, $batchRequestParser, $procedureHandler);
+
+ $batchRequestParser->expects($this->once())
+ ->method('parse');
+
+ $batchRequestParser->expects($this->once())
+ ->method('withProcedureHandler')
+ ->with($this->identicalTo($procedureHandler));
+
+ $server->execute();
+ }
+
+ public function testWhenCallbackRaiseForbiddenException()
+ {
+ $server = new Server($this->payload);
+ $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) {
+ throw new AccessDeniedException();
+ });
+
+ self::$functions
+ ->expects($this->at(0))
+ ->method('header')
+ ->with('HTTP/1.0 403 Forbidden');
+
+ self::$functions
+ ->expects($this->at(1))
+ ->method('header')
+ ->with('Content-Type: application/json');
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":403,"message":"Forbidden"},"id":null}', $server->execute());
+ }
+
+ public function testWhenCallbackRaiseUnauthorizedException()
+ {
+ $server = new Server($this->payload);
+ $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) {
+ throw new AuthenticationFailureException();
+ });
+
+ self::$functions
+ ->expects($this->at(0))
+ ->method('header')
+ ->with('HTTP/1.0 401 Unauthorized');
+
+ self::$functions
+ ->expects($this->at(1))
+ ->method('header')
+ ->with('Content-Type: application/json');
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":401,"message":"Unauthorized"},"id":null}', $server->execute());
+ }
+
+ public function testWhenMiddlewareRaiseUnauthorizedException()
+ {
+ $server = new Server($this->payload);
+ $server->getMiddlewareHandler()->withMiddleware(new DummyMiddleware());
+ $server->getProcedureHandler()->withCallback('sum', function($a, $b) {
+ return $a + $b;
+ });
+
+ self::$functions
+ ->expects($this->at(0))
+ ->method('header')
+ ->with('HTTP/1.0 401 Unauthorized');
+
+ self::$functions
+ ->expects($this->at(1))
+ ->method('header')
+ ->with('Content-Type: application/json');
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":401,"message":"Unauthorized"},"id":null}', $server->execute());
+ }
+
+ public function testFilterRelayExceptions()
+ {
+ $server = new Server($this->payload);
+ $server->withLocalException('MyException');
+ $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) {
+ throw new MyException('test');
+ });
+
+ $this->setExpectedException('MyException');
+ $server->execute();
+ }
+
+ public function testCustomExceptionAreRelayedToClient()
+ {
+ $server = new Server($this->payload);
+ $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) {
+ throw new MyException('test');
+ });
+
+ self::$functions
+ ->expects($this->once())
+ ->method('header')
+ ->with('Content-Type: application/json');
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":0,"message":"test"},"id":"1"}', $server->execute());
+ }
+
+ public function testCustomResponseException()
+ {
+ $server = new Server($this->payload);
+ $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) {
+ throw new ResponseException('test', 123, null, 'more info');
+ });
+
+ self::$functions
+ ->expects($this->once())
+ ->method('header')
+ ->with('Content-Type: application/json');
+
+ $this->assertEquals('{"jsonrpc":"2.0","error":{"code":123,"message":"test","data":"more info"},"id":"1"}', $server->execute());
+ }
+}
diff --git a/libs/jsonrpc/tests/Validator/HostValidatorTest.php b/libs/jsonrpc/tests/Validator/HostValidatorTest.php
new file mode 100644
index 00000000..a5fed7e0
--- /dev/null
+++ b/libs/jsonrpc/tests/Validator/HostValidatorTest.php
@@ -0,0 +1,32 @@
+<?php
+
+use JsonRPC\Validator\HostValidator;
+
+require_once __DIR__.'/../../../../vendor/autoload.php';
+
+class HostValidatorTest extends PHPUnit_Framework_TestCase
+{
+ public function testWithEmptyHosts()
+ {
+ $this->assertNull(HostValidator::validate(array(), '127.0.0.1', '127.0.0.1'));
+ }
+
+ public function testWithValidHosts()
+ {
+ $this->assertNull(HostValidator::validate(array('127.0.0.1'), '127.0.0.1', '127.0.0.1'));
+ }
+
+ public function testWithValidNetwork()
+ {
+ $this->assertNull(HostValidator::validate(array('192.168.10.1/24'), '192.168.10.1'),'test ip match');
+ $this->assertNull(HostValidator::validate(array('192.168.10.1/24'), '192.168.10.250'),'test ip match');
+ $this->setExpectedException('\JsonRPC\Exception\AccessDeniedException');
+ HostValidator::validate(array('192.168.10.1/24'), '192.168.11.1');
+ }
+
+ public function testWithNotAuthorizedHosts()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\AccessDeniedException');
+ HostValidator::validate(array('192.168.1.1'), '127.0.0.1', '127.0.0.1');
+ }
+}
diff --git a/libs/jsonrpc/tests/Validator/JsonEncodingValidatorTest.php b/libs/jsonrpc/tests/Validator/JsonEncodingValidatorTest.php
new file mode 100644
index 00000000..a1b2b80e
--- /dev/null
+++ b/libs/jsonrpc/tests/Validator/JsonEncodingValidatorTest.php
@@ -0,0 +1,22 @@
+<?php
+
+use JsonRPC\Validator\JsonEncodingValidator;
+
+require_once __DIR__.'/../../../../vendor/autoload.php';
+
+class JsonEncodingValidatorTest extends PHPUnit_Framework_TestCase
+{
+ public function testWithValidJson()
+ {
+ json_encode('{"foo": "bar"}');
+ $this->assertNull(JsonEncodingValidator::validate());
+ }
+
+ public function testWithJsonError()
+ {
+ json_encode("\xB1\x31");
+
+ $this->setExpectedException('\JsonRPC\Exception\ResponseEncodingFailureException');
+ JsonEncodingValidator::validate();
+ }
+}
diff --git a/libs/jsonrpc/tests/Validator/JsonFormatValidatorTest.php b/libs/jsonrpc/tests/Validator/JsonFormatValidatorTest.php
new file mode 100644
index 00000000..a838ada9
--- /dev/null
+++ b/libs/jsonrpc/tests/Validator/JsonFormatValidatorTest.php
@@ -0,0 +1,19 @@
+<?php
+
+use JsonRPC\Validator\JsonFormatValidator;
+
+require_once __DIR__.'/../../../../vendor/autoload.php';
+
+class JsonFormatValidatorTest extends PHPUnit_Framework_TestCase
+{
+ public function testJsonParsedCorrectly()
+ {
+ $this->assertNull(JsonFormatValidator::validate(array('foobar')));
+ }
+
+ public function testJsonNotParsedCorrectly()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\InvalidJsonFormatException');
+ JsonFormatValidator::validate('');
+ }
+}
diff --git a/libs/jsonrpc/tests/Validator/RpcFormatValidatorTest.php b/libs/jsonrpc/tests/Validator/RpcFormatValidatorTest.php
new file mode 100644
index 00000000..3e6ba8bc
--- /dev/null
+++ b/libs/jsonrpc/tests/Validator/RpcFormatValidatorTest.php
@@ -0,0 +1,48 @@
+<?php
+
+use JsonRPC\Validator\RpcFormatValidator;
+
+require_once __DIR__.'/../../../../vendor/autoload.php';
+
+class RpcFormatValidatorTest extends PHPUnit_Framework_TestCase
+{
+ public function testWithMinimumRequirement()
+ {
+ $this->assertNull(RpcFormatValidator::validate(array('jsonrpc' => '2.0', 'method' => 'foobar')));
+ }
+
+ public function testWithNoVersion()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\InvalidJsonRpcFormatException');
+ RpcFormatValidator::validate(array('method' => 'foobar'));
+ }
+
+ public function testWithNoMethod()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\InvalidJsonRpcFormatException');
+ RpcFormatValidator::validate(array('jsonrpc' => '2.0'));
+ }
+
+ public function testWithMethodNotString()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\InvalidJsonRpcFormatException');
+ RpcFormatValidator::validate(array('jsonrpc' => '2.0', 'method' => array()));
+ }
+
+ public function testWithBadVersion()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\InvalidJsonRpcFormatException');
+ RpcFormatValidator::validate(array('jsonrpc' => '1.0', 'method' => 'abc'));
+ }
+
+ public function testWithBadParams()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\InvalidJsonRpcFormatException');
+ RpcFormatValidator::validate(array('jsonrpc' => '2.0', 'method' => 'abc', 'params' => 'foobar'));
+ }
+
+ public function testWithParams()
+ {
+ $this->assertNull(RpcFormatValidator::validate(array('jsonrpc' => '2.0', 'method' => 'abc', 'params' => array(1, 2))));
+ }
+}
diff --git a/libs/jsonrpc/tests/Validator/UserValidatorTest.php b/libs/jsonrpc/tests/Validator/UserValidatorTest.php
new file mode 100644
index 00000000..e514c105
--- /dev/null
+++ b/libs/jsonrpc/tests/Validator/UserValidatorTest.php
@@ -0,0 +1,24 @@
+<?php
+
+use JsonRPC\Validator\UserValidator;
+
+require_once __DIR__.'/../../../../vendor/autoload.php';
+
+class UserValidatorTest extends PHPUnit_Framework_TestCase
+{
+ public function testWithEmptyHosts()
+ {
+ $this->assertNull(UserValidator::validate(array(), 'user', 'pass'));
+ }
+
+ public function testWithValidHosts()
+ {
+ $this->assertNull(UserValidator::validate(array('user' => 'pass'), 'user', 'pass'));
+ }
+
+ public function testWithNotAuthorizedHosts()
+ {
+ $this->setExpectedException('\JsonRPC\Exception\AuthenticationFailureException');
+ UserValidator::validate(array('user' => 'pass'), 'user', 'wrong password');
+ }
+}
diff --git a/vendor/aferrandini/phpqrcode/LICENSE b/libs/phpqrcode/LICENSE
index 18833032..18833032 100755
--- a/vendor/aferrandini/phpqrcode/LICENSE
+++ b/libs/phpqrcode/LICENSE
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_1.dat b/libs/phpqrcode/cache/frame_1.dat
index be28feac..be28feac 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_1.dat
+++ b/libs/phpqrcode/cache/frame_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_1.png b/libs/phpqrcode/cache/frame_1.png
index 86ce6e98..86ce6e98 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_1.png
+++ b/libs/phpqrcode/cache/frame_1.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_10.dat b/libs/phpqrcode/cache/frame_10.dat
index aff163f6..aff163f6 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_10.dat
+++ b/libs/phpqrcode/cache/frame_10.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_10.png b/libs/phpqrcode/cache/frame_10.png
index dbfcd70b..dbfcd70b 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_10.png
+++ b/libs/phpqrcode/cache/frame_10.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_11.dat b/libs/phpqrcode/cache/frame_11.dat
index 95af68a4..95af68a4 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_11.dat
+++ b/libs/phpqrcode/cache/frame_11.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_11.png b/libs/phpqrcode/cache/frame_11.png
index c07c761f..c07c761f 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_11.png
+++ b/libs/phpqrcode/cache/frame_11.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_12.dat b/libs/phpqrcode/cache/frame_12.dat
index 73228b36..73228b36 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_12.dat
+++ b/libs/phpqrcode/cache/frame_12.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_12.png b/libs/phpqrcode/cache/frame_12.png
index 8ba67822..8ba67822 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_12.png
+++ b/libs/phpqrcode/cache/frame_12.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_13.dat b/libs/phpqrcode/cache/frame_13.dat
index 2256f0e3..2256f0e3 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_13.dat
+++ b/libs/phpqrcode/cache/frame_13.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_13.png b/libs/phpqrcode/cache/frame_13.png
index 6e49d35a..6e49d35a 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_13.png
+++ b/libs/phpqrcode/cache/frame_13.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_14.dat b/libs/phpqrcode/cache/frame_14.dat
index e9ae0932..e9ae0932 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_14.dat
+++ b/libs/phpqrcode/cache/frame_14.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_14.png b/libs/phpqrcode/cache/frame_14.png
index efc36c03..efc36c03 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_14.png
+++ b/libs/phpqrcode/cache/frame_14.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_15.dat b/libs/phpqrcode/cache/frame_15.dat
index 18727818..18727818 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_15.dat
+++ b/libs/phpqrcode/cache/frame_15.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_15.png b/libs/phpqrcode/cache/frame_15.png
index a9f416c7..a9f416c7 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_15.png
+++ b/libs/phpqrcode/cache/frame_15.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_16.dat b/libs/phpqrcode/cache/frame_16.dat
index 60af6784..60af6784 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_16.dat
+++ b/libs/phpqrcode/cache/frame_16.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_16.png b/libs/phpqrcode/cache/frame_16.png
index 6ac8fe89..6ac8fe89 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_16.png
+++ b/libs/phpqrcode/cache/frame_16.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_17.dat b/libs/phpqrcode/cache/frame_17.dat
index 87f0cf59..87f0cf59 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_17.dat
+++ b/libs/phpqrcode/cache/frame_17.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_17.png b/libs/phpqrcode/cache/frame_17.png
index 5b929ac7..5b929ac7 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_17.png
+++ b/libs/phpqrcode/cache/frame_17.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_18.dat b/libs/phpqrcode/cache/frame_18.dat
index bb7138c1..bb7138c1 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_18.dat
+++ b/libs/phpqrcode/cache/frame_18.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_18.png b/libs/phpqrcode/cache/frame_18.png
index ee0d6a35..ee0d6a35 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_18.png
+++ b/libs/phpqrcode/cache/frame_18.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_19.dat b/libs/phpqrcode/cache/frame_19.dat
index 95e26adc..95e26adc 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_19.dat
+++ b/libs/phpqrcode/cache/frame_19.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_19.png b/libs/phpqrcode/cache/frame_19.png
index 20fddd84..20fddd84 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_19.png
+++ b/libs/phpqrcode/cache/frame_19.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_2.dat b/libs/phpqrcode/cache/frame_2.dat
index 7e42f31c..7e42f31c 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_2.dat
+++ b/libs/phpqrcode/cache/frame_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_2.png b/libs/phpqrcode/cache/frame_2.png
index 9c150ebe..9c150ebe 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_2.png
+++ b/libs/phpqrcode/cache/frame_2.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_20.dat b/libs/phpqrcode/cache/frame_20.dat
index d5ecc1d8..d5ecc1d8 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_20.dat
+++ b/libs/phpqrcode/cache/frame_20.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_20.png b/libs/phpqrcode/cache/frame_20.png
index 23a061d5..23a061d5 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_20.png
+++ b/libs/phpqrcode/cache/frame_20.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_21.dat b/libs/phpqrcode/cache/frame_21.dat
index 1974dd9d..1974dd9d 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_21.dat
+++ b/libs/phpqrcode/cache/frame_21.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_21.png b/libs/phpqrcode/cache/frame_21.png
index 291598c7..291598c7 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_21.png
+++ b/libs/phpqrcode/cache/frame_21.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_22.dat b/libs/phpqrcode/cache/frame_22.dat
index 0f01802d..0f01802d 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_22.dat
+++ b/libs/phpqrcode/cache/frame_22.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_22.png b/libs/phpqrcode/cache/frame_22.png
index bc97bd01..bc97bd01 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_22.png
+++ b/libs/phpqrcode/cache/frame_22.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_23.dat b/libs/phpqrcode/cache/frame_23.dat
index ee3b3707..ee3b3707 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_23.dat
+++ b/libs/phpqrcode/cache/frame_23.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_23.png b/libs/phpqrcode/cache/frame_23.png
index b8f16ae2..b8f16ae2 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_23.png
+++ b/libs/phpqrcode/cache/frame_23.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_24.dat b/libs/phpqrcode/cache/frame_24.dat
index 7b92e29c..7b92e29c 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_24.dat
+++ b/libs/phpqrcode/cache/frame_24.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_24.png b/libs/phpqrcode/cache/frame_24.png
index 397c64f8..397c64f8 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_24.png
+++ b/libs/phpqrcode/cache/frame_24.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_25.dat b/libs/phpqrcode/cache/frame_25.dat
index ba125182..ba125182 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_25.dat
+++ b/libs/phpqrcode/cache/frame_25.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_25.png b/libs/phpqrcode/cache/frame_25.png
index 25bc4454..25bc4454 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_25.png
+++ b/libs/phpqrcode/cache/frame_25.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_26.dat b/libs/phpqrcode/cache/frame_26.dat
index d34a73f1..d34a73f1 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_26.dat
+++ b/libs/phpqrcode/cache/frame_26.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_26.png b/libs/phpqrcode/cache/frame_26.png
index f4a6b393..f4a6b393 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_26.png
+++ b/libs/phpqrcode/cache/frame_26.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_27.dat b/libs/phpqrcode/cache/frame_27.dat
index b4d9ffd4..b4d9ffd4 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_27.dat
+++ b/libs/phpqrcode/cache/frame_27.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_27.png b/libs/phpqrcode/cache/frame_27.png
index 8419ec23..8419ec23 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_27.png
+++ b/libs/phpqrcode/cache/frame_27.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_28.dat b/libs/phpqrcode/cache/frame_28.dat
index 8cbaa196..8cbaa196 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_28.dat
+++ b/libs/phpqrcode/cache/frame_28.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_28.png b/libs/phpqrcode/cache/frame_28.png
index 7609d8e1..7609d8e1 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_28.png
+++ b/libs/phpqrcode/cache/frame_28.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_29.dat b/libs/phpqrcode/cache/frame_29.dat
index 5e4a7110..5e4a7110 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_29.dat
+++ b/libs/phpqrcode/cache/frame_29.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_29.png b/libs/phpqrcode/cache/frame_29.png
index ffe072c8..ffe072c8 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_29.png
+++ b/libs/phpqrcode/cache/frame_29.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_3.dat b/libs/phpqrcode/cache/frame_3.dat
index 188d531c..188d531c 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_3.dat
+++ b/libs/phpqrcode/cache/frame_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_3.png b/libs/phpqrcode/cache/frame_3.png
index 945ee7cb..945ee7cb 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_3.png
+++ b/libs/phpqrcode/cache/frame_3.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_30.dat b/libs/phpqrcode/cache/frame_30.dat
index 44cf3d31..44cf3d31 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_30.dat
+++ b/libs/phpqrcode/cache/frame_30.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_30.png b/libs/phpqrcode/cache/frame_30.png
index 75dbddd2..75dbddd2 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_30.png
+++ b/libs/phpqrcode/cache/frame_30.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_31.dat b/libs/phpqrcode/cache/frame_31.dat
index ce429d0a..ce429d0a 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_31.dat
+++ b/libs/phpqrcode/cache/frame_31.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_31.png b/libs/phpqrcode/cache/frame_31.png
index b14d1fa2..b14d1fa2 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_31.png
+++ b/libs/phpqrcode/cache/frame_31.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_32.dat b/libs/phpqrcode/cache/frame_32.dat
index aaa0808e..aaa0808e 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_32.dat
+++ b/libs/phpqrcode/cache/frame_32.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_32.png b/libs/phpqrcode/cache/frame_32.png
index 58d42db3..58d42db3 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_32.png
+++ b/libs/phpqrcode/cache/frame_32.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_33.dat b/libs/phpqrcode/cache/frame_33.dat
index a2613755..a2613755 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_33.dat
+++ b/libs/phpqrcode/cache/frame_33.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_33.png b/libs/phpqrcode/cache/frame_33.png
index 924c728e..924c728e 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_33.png
+++ b/libs/phpqrcode/cache/frame_33.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_34.dat b/libs/phpqrcode/cache/frame_34.dat
index 7ceb0259..7ceb0259 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_34.dat
+++ b/libs/phpqrcode/cache/frame_34.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_34.png b/libs/phpqrcode/cache/frame_34.png
index a477042d..a477042d 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_34.png
+++ b/libs/phpqrcode/cache/frame_34.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_35.dat b/libs/phpqrcode/cache/frame_35.dat
index 56bc3e28..56bc3e28 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_35.dat
+++ b/libs/phpqrcode/cache/frame_35.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_35.png b/libs/phpqrcode/cache/frame_35.png
index d29806c6..d29806c6 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_35.png
+++ b/libs/phpqrcode/cache/frame_35.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_36.dat b/libs/phpqrcode/cache/frame_36.dat
index 282c60d2..282c60d2 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_36.dat
+++ b/libs/phpqrcode/cache/frame_36.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_36.png b/libs/phpqrcode/cache/frame_36.png
index 96ecb421..96ecb421 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_36.png
+++ b/libs/phpqrcode/cache/frame_36.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_37.dat b/libs/phpqrcode/cache/frame_37.dat
index 015c0f24..015c0f24 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_37.dat
+++ b/libs/phpqrcode/cache/frame_37.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_37.png b/libs/phpqrcode/cache/frame_37.png
index fcc51627..fcc51627 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_37.png
+++ b/libs/phpqrcode/cache/frame_37.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_38.dat b/libs/phpqrcode/cache/frame_38.dat
index 71cf53eb..71cf53eb 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_38.dat
+++ b/libs/phpqrcode/cache/frame_38.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_38.png b/libs/phpqrcode/cache/frame_38.png
index 89238f3c..89238f3c 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_38.png
+++ b/libs/phpqrcode/cache/frame_38.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_39.dat b/libs/phpqrcode/cache/frame_39.dat
index 53511f73..53511f73 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_39.dat
+++ b/libs/phpqrcode/cache/frame_39.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_39.png b/libs/phpqrcode/cache/frame_39.png
index 1dc9cd1b..1dc9cd1b 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_39.png
+++ b/libs/phpqrcode/cache/frame_39.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_4.dat b/libs/phpqrcode/cache/frame_4.dat
index 67b30e82..67b30e82 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_4.dat
+++ b/libs/phpqrcode/cache/frame_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_4.png b/libs/phpqrcode/cache/frame_4.png
index b72f9e70..b72f9e70 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_4.png
+++ b/libs/phpqrcode/cache/frame_4.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_40.dat b/libs/phpqrcode/cache/frame_40.dat
index 90d36dd1..90d36dd1 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_40.dat
+++ b/libs/phpqrcode/cache/frame_40.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_40.png b/libs/phpqrcode/cache/frame_40.png
index 8034d862..8034d862 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_40.png
+++ b/libs/phpqrcode/cache/frame_40.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_5.dat b/libs/phpqrcode/cache/frame_5.dat
index d5dafe18..d5dafe18 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_5.dat
+++ b/libs/phpqrcode/cache/frame_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_5.png b/libs/phpqrcode/cache/frame_5.png
index 96b6494f..96b6494f 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_5.png
+++ b/libs/phpqrcode/cache/frame_5.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_6.dat b/libs/phpqrcode/cache/frame_6.dat
index 0fc3d039..0fc3d039 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_6.dat
+++ b/libs/phpqrcode/cache/frame_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_6.png b/libs/phpqrcode/cache/frame_6.png
index 05ca358b..05ca358b 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_6.png
+++ b/libs/phpqrcode/cache/frame_6.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_7.dat b/libs/phpqrcode/cache/frame_7.dat
index 43375960..43375960 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_7.dat
+++ b/libs/phpqrcode/cache/frame_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_7.png b/libs/phpqrcode/cache/frame_7.png
index 7d2ff4f3..7d2ff4f3 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_7.png
+++ b/libs/phpqrcode/cache/frame_7.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_8.dat b/libs/phpqrcode/cache/frame_8.dat
index 669b325f..669b325f 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_8.dat
+++ b/libs/phpqrcode/cache/frame_8.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_8.png b/libs/phpqrcode/cache/frame_8.png
index db1f1877..db1f1877 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_8.png
+++ b/libs/phpqrcode/cache/frame_8.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_9.dat b/libs/phpqrcode/cache/frame_9.dat
index d79295ee..d79295ee 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_9.dat
+++ b/libs/phpqrcode/cache/frame_9.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/frame_9.png b/libs/phpqrcode/cache/frame_9.png
index 74ddf08d..74ddf08d 100755
--- a/vendor/aferrandini/phpqrcode/cache/frame_9.png
+++ b/libs/phpqrcode/cache/frame_9.png
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_101_0.dat b/libs/phpqrcode/cache/mask_0/mask_101_0.dat
index 51deabae..51deabae 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_101_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_101_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_105_0.dat b/libs/phpqrcode/cache/mask_0/mask_105_0.dat
index 97e9e5df..97e9e5df 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_105_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_105_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_109_0.dat b/libs/phpqrcode/cache/mask_0/mask_109_0.dat
index eadf83a2..eadf83a2 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_109_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_109_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_113_0.dat b/libs/phpqrcode/cache/mask_0/mask_113_0.dat
index 5eb7f5de..5eb7f5de 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_113_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_113_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_117_0.dat b/libs/phpqrcode/cache/mask_0/mask_117_0.dat
index 781c7f87..781c7f87 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_117_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_117_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_121_0.dat b/libs/phpqrcode/cache/mask_0/mask_121_0.dat
index 68810c34..68810c34 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_121_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_121_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_125_0.dat b/libs/phpqrcode/cache/mask_0/mask_125_0.dat
index 2c73ef1a..2c73ef1a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_125_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_125_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_129_0.dat b/libs/phpqrcode/cache/mask_0/mask_129_0.dat
index 812ee8a6..812ee8a6 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_129_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_129_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_133_0.dat b/libs/phpqrcode/cache/mask_0/mask_133_0.dat
index 03b41d36..03b41d36 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_133_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_133_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_137_0.dat b/libs/phpqrcode/cache/mask_0/mask_137_0.dat
index f6d993b0..f6d993b0 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_137_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_137_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_141_0.dat b/libs/phpqrcode/cache/mask_0/mask_141_0.dat
index 8c685c8e..8c685c8e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_141_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_141_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_145_0.dat b/libs/phpqrcode/cache/mask_0/mask_145_0.dat
index 9c9c1ae1..9c9c1ae1 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_145_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_145_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_149_0.dat b/libs/phpqrcode/cache/mask_0/mask_149_0.dat
index d2583502..d2583502 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_149_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_149_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_153_0.dat b/libs/phpqrcode/cache/mask_0/mask_153_0.dat
index fc79e9ed..fc79e9ed 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_153_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_153_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_157_0.dat b/libs/phpqrcode/cache/mask_0/mask_157_0.dat
index ad749f30..ad749f30 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_157_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_157_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_161_0.dat b/libs/phpqrcode/cache/mask_0/mask_161_0.dat
index 4bdc5fdd..4bdc5fdd 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_161_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_161_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_165_0.dat b/libs/phpqrcode/cache/mask_0/mask_165_0.dat
index 3a17a051..3a17a051 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_165_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_165_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_169_0.dat b/libs/phpqrcode/cache/mask_0/mask_169_0.dat
index c4787d9d..c4787d9d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_169_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_169_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_173_0.dat b/libs/phpqrcode/cache/mask_0/mask_173_0.dat
index 5ef85e7a..5ef85e7a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_173_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_173_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_177_0.dat b/libs/phpqrcode/cache/mask_0/mask_177_0.dat
index 78a26a77..78a26a77 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_177_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_177_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_21_0.dat b/libs/phpqrcode/cache/mask_0/mask_21_0.dat
index 368c9941..368c9941 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_21_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_21_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_25_0.dat b/libs/phpqrcode/cache/mask_0/mask_25_0.dat
index e4a5b6d8..e4a5b6d8 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_25_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_25_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_29_0.dat b/libs/phpqrcode/cache/mask_0/mask_29_0.dat
index 74a216b4..74a216b4 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_29_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_29_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_33_0.dat b/libs/phpqrcode/cache/mask_0/mask_33_0.dat
index 2ec712a7..2ec712a7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_33_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_33_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_37_0.dat b/libs/phpqrcode/cache/mask_0/mask_37_0.dat
index 1588cfce..1588cfce 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_37_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_37_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_41_0.dat b/libs/phpqrcode/cache/mask_0/mask_41_0.dat
index e369027e..e369027e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_41_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_41_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_45_0.dat b/libs/phpqrcode/cache/mask_0/mask_45_0.dat
index 452f126c..452f126c 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_45_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_45_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_49_0.dat b/libs/phpqrcode/cache/mask_0/mask_49_0.dat
index fdd2aac1..fdd2aac1 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_49_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_49_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_53_0.dat b/libs/phpqrcode/cache/mask_0/mask_53_0.dat
index 572d279e..572d279e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_53_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_53_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_57_0.dat b/libs/phpqrcode/cache/mask_0/mask_57_0.dat
index ea81e6dc..ea81e6dc 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_57_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_57_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_61_0.dat b/libs/phpqrcode/cache/mask_0/mask_61_0.dat
index 93d2444d..93d2444d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_61_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_61_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_65_0.dat b/libs/phpqrcode/cache/mask_0/mask_65_0.dat
index df29d7bf..df29d7bf 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_65_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_65_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_69_0.dat b/libs/phpqrcode/cache/mask_0/mask_69_0.dat
index 8a2cfbd7..8a2cfbd7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_69_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_69_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_73_0.dat b/libs/phpqrcode/cache/mask_0/mask_73_0.dat
index 3de46066..3de46066 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_73_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_73_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_77_0.dat b/libs/phpqrcode/cache/mask_0/mask_77_0.dat
index 2717fd86..2717fd86 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_77_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_77_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_81_0.dat b/libs/phpqrcode/cache/mask_0/mask_81_0.dat
index 2d9a052f..2d9a052f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_81_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_81_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_85_0.dat b/libs/phpqrcode/cache/mask_0/mask_85_0.dat
index eb8197b2..eb8197b2 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_85_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_85_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_89_0.dat b/libs/phpqrcode/cache/mask_0/mask_89_0.dat
index aaa4c526..aaa4c526 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_89_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_89_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_93_0.dat b/libs/phpqrcode/cache/mask_0/mask_93_0.dat
index e218fa0e..e218fa0e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_93_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_93_0.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_97_0.dat b/libs/phpqrcode/cache/mask_0/mask_97_0.dat
index 74ac719d..74ac719d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_0/mask_97_0.dat
+++ b/libs/phpqrcode/cache/mask_0/mask_97_0.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_101_1.dat b/libs/phpqrcode/cache/mask_1/mask_101_1.dat
index ec939b52..ec939b52 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_101_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_101_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_105_1.dat b/libs/phpqrcode/cache/mask_1/mask_105_1.dat
index e1f5c99b..e1f5c99b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_105_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_105_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_109_1.dat b/libs/phpqrcode/cache/mask_1/mask_109_1.dat
index 7e0d6d16..7e0d6d16 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_109_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_109_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_113_1.dat b/libs/phpqrcode/cache/mask_1/mask_113_1.dat
index 1dd666d9..1dd666d9 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_113_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_113_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_117_1.dat b/libs/phpqrcode/cache/mask_1/mask_117_1.dat
index 8921f643..8921f643 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_117_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_117_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_121_1.dat b/libs/phpqrcode/cache/mask_1/mask_121_1.dat
index 64bd8ba0..64bd8ba0 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_121_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_121_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_125_1.dat b/libs/phpqrcode/cache/mask_1/mask_125_1.dat
index d5881dd5..d5881dd5 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_125_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_125_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_129_1.dat b/libs/phpqrcode/cache/mask_1/mask_129_1.dat
index 62cd1c9a..62cd1c9a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_129_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_129_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_133_1.dat b/libs/phpqrcode/cache/mask_1/mask_133_1.dat
index 18d68dce..18d68dce 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_133_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_133_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_137_1.dat b/libs/phpqrcode/cache/mask_1/mask_137_1.dat
index 284d7bea..284d7bea 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_137_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_137_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_141_1.dat b/libs/phpqrcode/cache/mask_1/mask_141_1.dat
index 83220ddb..83220ddb 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_141_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_141_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_145_1.dat b/libs/phpqrcode/cache/mask_1/mask_145_1.dat
index 6a9950f7..6a9950f7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_145_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_145_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_149_1.dat b/libs/phpqrcode/cache/mask_1/mask_149_1.dat
index 02a3cdc6..02a3cdc6 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_149_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_149_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_153_1.dat b/libs/phpqrcode/cache/mask_1/mask_153_1.dat
index 2abfca20..2abfca20 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_153_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_153_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_157_1.dat b/libs/phpqrcode/cache/mask_1/mask_157_1.dat
index 17344b89..17344b89 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_157_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_157_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_161_1.dat b/libs/phpqrcode/cache/mask_1/mask_161_1.dat
index 669ade1b..669ade1b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_161_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_161_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_165_1.dat b/libs/phpqrcode/cache/mask_1/mask_165_1.dat
index abb48f0b..abb48f0b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_165_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_165_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_169_1.dat b/libs/phpqrcode/cache/mask_1/mask_169_1.dat
index ba21b710..ba21b710 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_169_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_169_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_173_1.dat b/libs/phpqrcode/cache/mask_1/mask_173_1.dat
index 436918c0..436918c0 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_173_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_173_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_177_1.dat b/libs/phpqrcode/cache/mask_1/mask_177_1.dat
index 12e2e522..12e2e522 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_177_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_177_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_21_1.dat b/libs/phpqrcode/cache/mask_1/mask_21_1.dat
index f87e0a11..f87e0a11 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_21_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_21_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_25_1.dat b/libs/phpqrcode/cache/mask_1/mask_25_1.dat
index 3a225e30..3a225e30 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_25_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_25_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_29_1.dat b/libs/phpqrcode/cache/mask_1/mask_29_1.dat
index 0a1cb3b5..0a1cb3b5 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_29_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_29_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_33_1.dat b/libs/phpqrcode/cache/mask_1/mask_33_1.dat
index 318949df..318949df 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_33_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_33_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_37_1.dat b/libs/phpqrcode/cache/mask_1/mask_37_1.dat
index 5bd9e3aa..5bd9e3aa 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_37_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_37_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_41_1.dat b/libs/phpqrcode/cache/mask_1/mask_41_1.dat
index 52e9e58f..52e9e58f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_41_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_41_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_45_1.dat b/libs/phpqrcode/cache/mask_1/mask_45_1.dat
index b35c567d..b35c567d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_45_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_45_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_49_1.dat b/libs/phpqrcode/cache/mask_1/mask_49_1.dat
index d20d7171..d20d7171 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_49_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_49_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_53_1.dat b/libs/phpqrcode/cache/mask_1/mask_53_1.dat
index a676d7df..a676d7df 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_53_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_53_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_57_1.dat b/libs/phpqrcode/cache/mask_1/mask_57_1.dat
index 896ed435..896ed435 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_57_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_57_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_61_1.dat b/libs/phpqrcode/cache/mask_1/mask_61_1.dat
index 4165a4bd..4165a4bd 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_61_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_61_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_65_1.dat b/libs/phpqrcode/cache/mask_1/mask_65_1.dat
index db8db88a..db8db88a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_65_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_65_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_69_1.dat b/libs/phpqrcode/cache/mask_1/mask_69_1.dat
index 03bba657..03bba657 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_69_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_69_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_73_1.dat b/libs/phpqrcode/cache/mask_1/mask_73_1.dat
index a729fdf0..a729fdf0 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_73_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_73_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_77_1.dat b/libs/phpqrcode/cache/mask_1/mask_77_1.dat
index 0fe0b03e..0fe0b03e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_77_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_77_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_81_1.dat b/libs/phpqrcode/cache/mask_1/mask_81_1.dat
index eacbdb1a..eacbdb1a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_81_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_81_1.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_85_1.dat b/libs/phpqrcode/cache/mask_1/mask_85_1.dat
index b8a20c75..b8a20c75 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_85_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_85_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_89_1.dat b/libs/phpqrcode/cache/mask_1/mask_89_1.dat
index e9d226f3..e9d226f3 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_89_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_89_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_93_1.dat b/libs/phpqrcode/cache/mask_1/mask_93_1.dat
index f37836c6..f37836c6 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_93_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_93_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_97_1.dat b/libs/phpqrcode/cache/mask_1/mask_97_1.dat
index 24fa60fc..24fa60fc 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_1/mask_97_1.dat
+++ b/libs/phpqrcode/cache/mask_1/mask_97_1.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_101_2.dat b/libs/phpqrcode/cache/mask_2/mask_101_2.dat
index e39fd2cf..e39fd2cf 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_101_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_101_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_105_2.dat b/libs/phpqrcode/cache/mask_2/mask_105_2.dat
index 7b63e31b..7b63e31b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_105_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_105_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_109_2.dat b/libs/phpqrcode/cache/mask_2/mask_109_2.dat
index 252f6d80..252f6d80 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_109_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_109_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_113_2.dat b/libs/phpqrcode/cache/mask_2/mask_113_2.dat
index 26b5d7ea..26b5d7ea 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_113_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_113_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_117_2.dat b/libs/phpqrcode/cache/mask_2/mask_117_2.dat
index b4dcce46..b4dcce46 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_117_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_117_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_121_2.dat b/libs/phpqrcode/cache/mask_2/mask_121_2.dat
index a2a0097b..a2a0097b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_121_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_121_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_125_2.dat b/libs/phpqrcode/cache/mask_2/mask_125_2.dat
index 0ea40fda..0ea40fda 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_125_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_125_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_129_2.dat b/libs/phpqrcode/cache/mask_2/mask_129_2.dat
index bf048394..bf048394 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_129_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_129_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_133_2.dat b/libs/phpqrcode/cache/mask_2/mask_133_2.dat
index 9e78b6de..9e78b6de 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_133_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_133_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_137_2.dat b/libs/phpqrcode/cache/mask_2/mask_137_2.dat
index 95c3c48c..95c3c48c 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_137_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_137_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_141_2.dat b/libs/phpqrcode/cache/mask_2/mask_141_2.dat
index da07da2e..da07da2e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_141_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_141_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_145_2.dat b/libs/phpqrcode/cache/mask_2/mask_145_2.dat
index 9ff2bbf3..9ff2bbf3 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_145_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_145_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_149_2.dat b/libs/phpqrcode/cache/mask_2/mask_149_2.dat
index d52e0484..d52e0484 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_149_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_149_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_153_2.dat b/libs/phpqrcode/cache/mask_2/mask_153_2.dat
index 3b060410..3b060410 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_153_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_153_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_157_2.dat b/libs/phpqrcode/cache/mask_2/mask_157_2.dat
index 2baf535e..2baf535e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_157_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_157_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_161_2.dat b/libs/phpqrcode/cache/mask_2/mask_161_2.dat
index d2df7594..d2df7594 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_161_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_161_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_165_2.dat b/libs/phpqrcode/cache/mask_2/mask_165_2.dat
index 2e6cd7c6..2e6cd7c6 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_165_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_165_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_169_2.dat b/libs/phpqrcode/cache/mask_2/mask_169_2.dat
index 4052062b..4052062b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_169_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_169_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_173_2.dat b/libs/phpqrcode/cache/mask_2/mask_173_2.dat
index 0a30ba53..0a30ba53 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_173_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_173_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_177_2.dat b/libs/phpqrcode/cache/mask_2/mask_177_2.dat
index d2c52f99..d2c52f99 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_177_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_177_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_21_2.dat b/libs/phpqrcode/cache/mask_2/mask_21_2.dat
index 7466be4b..7466be4b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_21_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_21_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_25_2.dat b/libs/phpqrcode/cache/mask_2/mask_25_2.dat
index 0bc44c03..0bc44c03 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_25_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_25_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_29_2.dat b/libs/phpqrcode/cache/mask_2/mask_29_2.dat
index 5112d11e..5112d11e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_29_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_29_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_33_2.dat b/libs/phpqrcode/cache/mask_2/mask_33_2.dat
index 5bac0c80..5bac0c80 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_33_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_33_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_37_2.dat b/libs/phpqrcode/cache/mask_2/mask_37_2.dat
index bdfc0bd4..bdfc0bd4 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_37_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_37_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_41_2.dat b/libs/phpqrcode/cache/mask_2/mask_41_2.dat
index c55c63e8..c55c63e8 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_41_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_41_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_45_2.dat b/libs/phpqrcode/cache/mask_2/mask_45_2.dat
index ad44ff18..ad44ff18 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_45_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_45_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_49_2.dat b/libs/phpqrcode/cache/mask_2/mask_49_2.dat
index 6e8edff2..6e8edff2 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_49_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_49_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_53_2.dat b/libs/phpqrcode/cache/mask_2/mask_53_2.dat
index 682cae2a..682cae2a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_53_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_53_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_57_2.dat b/libs/phpqrcode/cache/mask_2/mask_57_2.dat
index 66a5c056..66a5c056 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_57_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_57_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_61_2.dat b/libs/phpqrcode/cache/mask_2/mask_61_2.dat
index 77d3815e..77d3815e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_61_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_61_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_65_2.dat b/libs/phpqrcode/cache/mask_2/mask_65_2.dat
index caf184ad..caf184ad 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_65_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_65_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_69_2.dat b/libs/phpqrcode/cache/mask_2/mask_69_2.dat
index 6a3801bf..6a3801bf 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_69_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_69_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_73_2.dat b/libs/phpqrcode/cache/mask_2/mask_73_2.dat
index 74945b71..74945b71 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_73_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_73_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_77_2.dat b/libs/phpqrcode/cache/mask_2/mask_77_2.dat
index 903cba4a..903cba4a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_77_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_77_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_81_2.dat b/libs/phpqrcode/cache/mask_2/mask_81_2.dat
index 17a9ac2a..17a9ac2a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_81_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_81_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_85_2.dat b/libs/phpqrcode/cache/mask_2/mask_85_2.dat
index 72c74ff9..72c74ff9 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_85_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_85_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_89_2.dat b/libs/phpqrcode/cache/mask_2/mask_89_2.dat
index 06c9a4fe..06c9a4fe 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_89_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_89_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_93_2.dat b/libs/phpqrcode/cache/mask_2/mask_93_2.dat
index f5202963..f5202963 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_93_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_93_2.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_97_2.dat b/libs/phpqrcode/cache/mask_2/mask_97_2.dat
index 38842b98..38842b98 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_2/mask_97_2.dat
+++ b/libs/phpqrcode/cache/mask_2/mask_97_2.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_101_3.dat b/libs/phpqrcode/cache/mask_3/mask_101_3.dat
index fa992512..fa992512 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_101_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_101_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_105_3.dat b/libs/phpqrcode/cache/mask_3/mask_105_3.dat
index d8a28ce9..d8a28ce9 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_105_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_105_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_109_3.dat b/libs/phpqrcode/cache/mask_3/mask_109_3.dat
index 48d94040..48d94040 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_109_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_109_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_113_3.dat b/libs/phpqrcode/cache/mask_3/mask_113_3.dat
index 023b2730..023b2730 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_113_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_113_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_117_3.dat b/libs/phpqrcode/cache/mask_3/mask_117_3.dat
index 79cc04d1..79cc04d1 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_117_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_117_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_121_3.dat b/libs/phpqrcode/cache/mask_3/mask_121_3.dat
index aff5a7be..aff5a7be 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_121_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_121_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_125_3.dat b/libs/phpqrcode/cache/mask_3/mask_125_3.dat
index e2febdbd..e2febdbd 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_125_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_125_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_129_3.dat b/libs/phpqrcode/cache/mask_3/mask_129_3.dat
index b1ce63b7..b1ce63b7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_129_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_129_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_133_3.dat b/libs/phpqrcode/cache/mask_3/mask_133_3.dat
index f4181507..f4181507 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_133_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_133_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_137_3.dat b/libs/phpqrcode/cache/mask_3/mask_137_3.dat
index e24ac5b5..e24ac5b5 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_137_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_137_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_141_3.dat b/libs/phpqrcode/cache/mask_3/mask_141_3.dat
index a3f6a248..a3f6a248 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_141_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_141_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_145_3.dat b/libs/phpqrcode/cache/mask_3/mask_145_3.dat
index 338b7e7a..338b7e7a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_145_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_145_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_149_3.dat b/libs/phpqrcode/cache/mask_3/mask_149_3.dat
index 30bc5fab..30bc5fab 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_149_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_149_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_153_3.dat b/libs/phpqrcode/cache/mask_3/mask_153_3.dat
index 89cdec03..89cdec03 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_153_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_153_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_157_3.dat b/libs/phpqrcode/cache/mask_3/mask_157_3.dat
index 167e6f84..167e6f84 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_157_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_157_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_161_3.dat b/libs/phpqrcode/cache/mask_3/mask_161_3.dat
index 72a26a4f..72a26a4f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_161_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_161_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_165_3.dat b/libs/phpqrcode/cache/mask_3/mask_165_3.dat
index 870af8f4..870af8f4 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_165_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_165_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_169_3.dat b/libs/phpqrcode/cache/mask_3/mask_169_3.dat
index 94310952..94310952 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_169_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_169_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_173_3.dat b/libs/phpqrcode/cache/mask_3/mask_173_3.dat
index 74669862..74669862 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_173_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_173_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_177_3.dat b/libs/phpqrcode/cache/mask_3/mask_177_3.dat
index 9586979a..9586979a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_177_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_177_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_21_3.dat b/libs/phpqrcode/cache/mask_3/mask_21_3.dat
index bcb4eec4..bcb4eec4 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_21_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_21_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_25_3.dat b/libs/phpqrcode/cache/mask_3/mask_25_3.dat
index 0ffc375f..0ffc375f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_25_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_25_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_29_3.dat b/libs/phpqrcode/cache/mask_3/mask_29_3.dat
index 6150ac12..6150ac12 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_29_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_29_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_33_3.dat b/libs/phpqrcode/cache/mask_3/mask_33_3.dat
index 6053b5e3..6053b5e3 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_33_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_33_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_37_3.dat b/libs/phpqrcode/cache/mask_3/mask_37_3.dat
index 5dea5b9c..5dea5b9c 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_37_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_37_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_41_3.dat b/libs/phpqrcode/cache/mask_3/mask_41_3.dat
index ca9ddc2a..ca9ddc2a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_41_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_41_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_45_3.dat b/libs/phpqrcode/cache/mask_3/mask_45_3.dat
index 3daad97f..3daad97f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_45_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_45_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_49_3.dat b/libs/phpqrcode/cache/mask_3/mask_49_3.dat
index 7f6508dd..7f6508dd 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_49_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_49_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_53_3.dat b/libs/phpqrcode/cache/mask_3/mask_53_3.dat
index 8800beab..8800beab 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_53_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_53_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_57_3.dat b/libs/phpqrcode/cache/mask_3/mask_57_3.dat
index 4e1e5da3..4e1e5da3 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_57_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_57_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_61_3.dat b/libs/phpqrcode/cache/mask_3/mask_61_3.dat
index bf1a3cc7..bf1a3cc7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_61_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_61_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_65_3.dat b/libs/phpqrcode/cache/mask_3/mask_65_3.dat
index 85892089..85892089 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_65_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_65_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_69_3.dat b/libs/phpqrcode/cache/mask_3/mask_69_3.dat
index 55318a87..55318a87 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_69_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_69_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_73_3.dat b/libs/phpqrcode/cache/mask_3/mask_73_3.dat
index 15be77f6..15be77f6 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_73_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_73_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_77_3.dat b/libs/phpqrcode/cache/mask_3/mask_77_3.dat
index ec782804..ec782804 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_77_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_77_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_81_3.dat b/libs/phpqrcode/cache/mask_3/mask_81_3.dat
index 47bc0f79..47bc0f79 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_81_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_81_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_85_3.dat b/libs/phpqrcode/cache/mask_3/mask_85_3.dat
index 02c4f8cd..02c4f8cd 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_85_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_85_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_89_3.dat b/libs/phpqrcode/cache/mask_3/mask_89_3.dat
index 2b4cb59f..2b4cb59f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_89_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_89_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_93_3.dat b/libs/phpqrcode/cache/mask_3/mask_93_3.dat
index b4cc8a97..b4cc8a97 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_93_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_93_3.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_97_3.dat b/libs/phpqrcode/cache/mask_3/mask_97_3.dat
index 7adc9eba..7adc9eba 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_3/mask_97_3.dat
+++ b/libs/phpqrcode/cache/mask_3/mask_97_3.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_101_4.dat b/libs/phpqrcode/cache/mask_4/mask_101_4.dat
index 1c97dc04..1c97dc04 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_101_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_101_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_105_4.dat b/libs/phpqrcode/cache/mask_4/mask_105_4.dat
index 0211cdb3..0211cdb3 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_105_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_105_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_109_4.dat b/libs/phpqrcode/cache/mask_4/mask_109_4.dat
index 2cc0c815..2cc0c815 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_109_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_109_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_113_4.dat b/libs/phpqrcode/cache/mask_4/mask_113_4.dat
index 99bd73f6..99bd73f6 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_113_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_113_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_117_4.dat b/libs/phpqrcode/cache/mask_4/mask_117_4.dat
index 38672591..38672591 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_117_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_117_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_121_4.dat b/libs/phpqrcode/cache/mask_4/mask_121_4.dat
index 84957eb7..84957eb7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_121_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_121_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_125_4.dat b/libs/phpqrcode/cache/mask_4/mask_125_4.dat
index b98dc813..b98dc813 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_125_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_125_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_129_4.dat b/libs/phpqrcode/cache/mask_4/mask_129_4.dat
index 8ecfa250..8ecfa250 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_129_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_129_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_133_4.dat b/libs/phpqrcode/cache/mask_4/mask_133_4.dat
index 69f83acb..69f83acb 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_133_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_133_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_137_4.dat b/libs/phpqrcode/cache/mask_4/mask_137_4.dat
index 0c09c487..0c09c487 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_137_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_137_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_141_4.dat b/libs/phpqrcode/cache/mask_4/mask_141_4.dat
index 62b03f24..62b03f24 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_141_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_141_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_145_4.dat b/libs/phpqrcode/cache/mask_4/mask_145_4.dat
index 33fb2112..33fb2112 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_145_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_145_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_149_4.dat b/libs/phpqrcode/cache/mask_4/mask_149_4.dat
index de99310f..de99310f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_149_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_149_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_153_4.dat b/libs/phpqrcode/cache/mask_4/mask_153_4.dat
index e827dd16..e827dd16 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_153_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_153_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_157_4.dat b/libs/phpqrcode/cache/mask_4/mask_157_4.dat
index ad5fcf69..ad5fcf69 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_157_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_157_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_161_4.dat b/libs/phpqrcode/cache/mask_4/mask_161_4.dat
index 7604c454..7604c454 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_161_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_161_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_165_4.dat b/libs/phpqrcode/cache/mask_4/mask_165_4.dat
index d83d6316..d83d6316 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_165_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_165_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_169_4.dat b/libs/phpqrcode/cache/mask_4/mask_169_4.dat
index 4aac95c1..4aac95c1 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_169_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_169_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_173_4.dat b/libs/phpqrcode/cache/mask_4/mask_173_4.dat
index 9df4d865..9df4d865 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_173_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_173_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_177_4.dat b/libs/phpqrcode/cache/mask_4/mask_177_4.dat
index 6437d251..6437d251 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_177_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_177_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_21_4.dat b/libs/phpqrcode/cache/mask_4/mask_21_4.dat
index e006b67e..e006b67e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_21_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_21_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_25_4.dat b/libs/phpqrcode/cache/mask_4/mask_25_4.dat
index 0c7c44bb..0c7c44bb 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_25_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_25_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_29_4.dat b/libs/phpqrcode/cache/mask_4/mask_29_4.dat
index c28dc20e..c28dc20e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_29_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_29_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_33_4.dat b/libs/phpqrcode/cache/mask_4/mask_33_4.dat
index 5834b6fb..5834b6fb 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_33_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_33_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_37_4.dat b/libs/phpqrcode/cache/mask_4/mask_37_4.dat
index 4bf2e26e..4bf2e26e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_37_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_37_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_41_4.dat b/libs/phpqrcode/cache/mask_4/mask_41_4.dat
index b75b7d05..b75b7d05 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_41_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_41_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_45_4.dat b/libs/phpqrcode/cache/mask_4/mask_45_4.dat
index 1b921f30..1b921f30 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_45_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_45_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_49_4.dat b/libs/phpqrcode/cache/mask_4/mask_49_4.dat
index e417f947..e417f947 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_49_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_49_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_53_4.dat b/libs/phpqrcode/cache/mask_4/mask_53_4.dat
index 7e88826d..7e88826d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_53_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_53_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_57_4.dat b/libs/phpqrcode/cache/mask_4/mask_57_4.dat
index 84669c7d..84669c7d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_57_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_57_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_61_4.dat b/libs/phpqrcode/cache/mask_4/mask_61_4.dat
index d127c3be..d127c3be 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_61_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_61_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_65_4.dat b/libs/phpqrcode/cache/mask_4/mask_65_4.dat
index c24343d9..c24343d9 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_65_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_65_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_69_4.dat b/libs/phpqrcode/cache/mask_4/mask_69_4.dat
index a73b1144..a73b1144 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_69_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_69_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_73_4.dat b/libs/phpqrcode/cache/mask_4/mask_73_4.dat
index 72f89227..72f89227 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_73_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_73_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_77_4.dat b/libs/phpqrcode/cache/mask_4/mask_77_4.dat
index 993c4860..993c4860 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_77_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_77_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_81_4.dat b/libs/phpqrcode/cache/mask_4/mask_81_4.dat
index dd652161..dd652161 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_81_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_81_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_85_4.dat b/libs/phpqrcode/cache/mask_4/mask_85_4.dat
index c8d5123e..c8d5123e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_85_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_85_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_89_4.dat b/libs/phpqrcode/cache/mask_4/mask_89_4.dat
index 5b9bd7ec..5b9bd7ec 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_89_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_89_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_93_4.dat b/libs/phpqrcode/cache/mask_4/mask_93_4.dat
index be7f5e52..be7f5e52 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_93_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_93_4.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_97_4.dat b/libs/phpqrcode/cache/mask_4/mask_97_4.dat
index 5d848caa..5d848caa 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_4/mask_97_4.dat
+++ b/libs/phpqrcode/cache/mask_4/mask_97_4.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_101_5.dat b/libs/phpqrcode/cache/mask_5/mask_101_5.dat
index c21869e8..c21869e8 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_101_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_101_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_105_5.dat b/libs/phpqrcode/cache/mask_5/mask_105_5.dat
index bc8798c6..bc8798c6 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_105_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_105_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_109_5.dat b/libs/phpqrcode/cache/mask_5/mask_109_5.dat
index 25a39440..25a39440 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_109_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_109_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_113_5.dat b/libs/phpqrcode/cache/mask_5/mask_113_5.dat
index 25f42b8b..25f42b8b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_113_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_113_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_117_5.dat b/libs/phpqrcode/cache/mask_5/mask_117_5.dat
index f236940d..f236940d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_117_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_117_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_121_5.dat b/libs/phpqrcode/cache/mask_5/mask_121_5.dat
index 9bb5c415..9bb5c415 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_121_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_121_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_125_5.dat b/libs/phpqrcode/cache/mask_5/mask_125_5.dat
index 2161c50a..2161c50a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_125_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_125_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_129_5.dat b/libs/phpqrcode/cache/mask_5/mask_129_5.dat
index f0c1d650..f0c1d650 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_129_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_129_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_133_5.dat b/libs/phpqrcode/cache/mask_5/mask_133_5.dat
index 46be8b09..46be8b09 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_133_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_133_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_137_5.dat b/libs/phpqrcode/cache/mask_5/mask_137_5.dat
index 064e7f2f..064e7f2f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_137_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_137_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_141_5.dat b/libs/phpqrcode/cache/mask_5/mask_141_5.dat
index 60c1a8e8..60c1a8e8 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_141_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_141_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_145_5.dat b/libs/phpqrcode/cache/mask_5/mask_145_5.dat
index 9303c07f..9303c07f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_145_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_145_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_149_5.dat b/libs/phpqrcode/cache/mask_5/mask_149_5.dat
index 4256cefd..4256cefd 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_149_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_149_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_153_5.dat b/libs/phpqrcode/cache/mask_5/mask_153_5.dat
index deea09d7..deea09d7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_153_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_153_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_157_5.dat b/libs/phpqrcode/cache/mask_5/mask_157_5.dat
index 176e2a69..176e2a69 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_157_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_157_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_161_5.dat b/libs/phpqrcode/cache/mask_5/mask_161_5.dat
index 70d5fb00..70d5fb00 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_161_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_161_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_165_5.dat b/libs/phpqrcode/cache/mask_5/mask_165_5.dat
index 94af813d..94af813d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_165_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_165_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_169_5.dat b/libs/phpqrcode/cache/mask_5/mask_169_5.dat
index 921a7707..921a7707 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_169_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_169_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_173_5.dat b/libs/phpqrcode/cache/mask_5/mask_173_5.dat
index f9a67413..f9a67413 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_173_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_173_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_177_5.dat b/libs/phpqrcode/cache/mask_5/mask_177_5.dat
index b07c636b..b07c636b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_177_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_177_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_21_5.dat b/libs/phpqrcode/cache/mask_5/mask_21_5.dat
index 04f97ea6..04f97ea6 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_21_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_21_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_25_5.dat b/libs/phpqrcode/cache/mask_5/mask_25_5.dat
index c20b59b1..c20b59b1 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_25_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_25_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_29_5.dat b/libs/phpqrcode/cache/mask_5/mask_29_5.dat
index 217ec1b8..217ec1b8 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_29_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_29_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_33_5.dat b/libs/phpqrcode/cache/mask_5/mask_33_5.dat
index 726d7fd7..726d7fd7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_33_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_33_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_37_5.dat b/libs/phpqrcode/cache/mask_5/mask_37_5.dat
index 6d32ca6f..6d32ca6f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_37_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_37_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_41_5.dat b/libs/phpqrcode/cache/mask_5/mask_41_5.dat
index e07c6172..e07c6172 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_41_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_41_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_45_5.dat b/libs/phpqrcode/cache/mask_5/mask_45_5.dat
index 5168a17f..5168a17f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_45_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_45_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_49_5.dat b/libs/phpqrcode/cache/mask_5/mask_49_5.dat
index 9f3f3cd7..9f3f3cd7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_49_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_49_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_53_5.dat b/libs/phpqrcode/cache/mask_5/mask_53_5.dat
index 449807ba..449807ba 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_53_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_53_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_57_5.dat b/libs/phpqrcode/cache/mask_5/mask_57_5.dat
index c7dd81f3..c7dd81f3 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_57_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_57_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_61_5.dat b/libs/phpqrcode/cache/mask_5/mask_61_5.dat
index dee749fb..dee749fb 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_61_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_61_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_65_5.dat b/libs/phpqrcode/cache/mask_5/mask_65_5.dat
index ecd93806..ecd93806 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_65_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_65_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_69_5.dat b/libs/phpqrcode/cache/mask_5/mask_69_5.dat
index ead4edc1..ead4edc1 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_69_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_69_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_73_5.dat b/libs/phpqrcode/cache/mask_5/mask_73_5.dat
index 00001176..00001176 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_73_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_73_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_77_5.dat b/libs/phpqrcode/cache/mask_5/mask_77_5.dat
index 1652cdc2..1652cdc2 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_77_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_77_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_81_5.dat b/libs/phpqrcode/cache/mask_5/mask_81_5.dat
index 71215e95..71215e95 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_81_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_81_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_85_5.dat b/libs/phpqrcode/cache/mask_5/mask_85_5.dat
index 09cf0e28..09cf0e28 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_85_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_85_5.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_89_5.dat b/libs/phpqrcode/cache/mask_5/mask_89_5.dat
index 5fff5306..5fff5306 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_89_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_89_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_93_5.dat b/libs/phpqrcode/cache/mask_5/mask_93_5.dat
index ec4240bd..ec4240bd 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_93_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_93_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_97_5.dat b/libs/phpqrcode/cache/mask_5/mask_97_5.dat
index 509d1174..509d1174 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_5/mask_97_5.dat
+++ b/libs/phpqrcode/cache/mask_5/mask_97_5.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_101_6.dat b/libs/phpqrcode/cache/mask_6/mask_101_6.dat
index 13f97a0f..13f97a0f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_101_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_101_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_105_6.dat b/libs/phpqrcode/cache/mask_6/mask_105_6.dat
index a58fec74..a58fec74 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_105_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_105_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_109_6.dat b/libs/phpqrcode/cache/mask_6/mask_109_6.dat
index be7b4749..be7b4749 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_109_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_109_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_113_6.dat b/libs/phpqrcode/cache/mask_6/mask_113_6.dat
index 397f5274..397f5274 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_113_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_113_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_117_6.dat b/libs/phpqrcode/cache/mask_6/mask_117_6.dat
index 99108bef..99108bef 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_117_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_117_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_121_6.dat b/libs/phpqrcode/cache/mask_6/mask_121_6.dat
index f3c32994..f3c32994 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_121_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_121_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_125_6.dat b/libs/phpqrcode/cache/mask_6/mask_125_6.dat
index ff64d44f..ff64d44f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_125_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_125_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_129_6.dat b/libs/phpqrcode/cache/mask_6/mask_129_6.dat
index b4695c3f..b4695c3f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_129_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_129_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_133_6.dat b/libs/phpqrcode/cache/mask_6/mask_133_6.dat
index 40911dc5..40911dc5 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_133_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_133_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_137_6.dat b/libs/phpqrcode/cache/mask_6/mask_137_6.dat
index 43ccb68c..43ccb68c 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_137_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_137_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_141_6.dat b/libs/phpqrcode/cache/mask_6/mask_141_6.dat
index 0340409a..0340409a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_141_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_141_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_145_6.dat b/libs/phpqrcode/cache/mask_6/mask_145_6.dat
index 6c142151..6c142151 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_145_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_145_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_149_6.dat b/libs/phpqrcode/cache/mask_6/mask_149_6.dat
index 69e98835..69e98835 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_149_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_149_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_153_6.dat b/libs/phpqrcode/cache/mask_6/mask_153_6.dat
index 3ab6130e..3ab6130e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_153_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_153_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_157_6.dat b/libs/phpqrcode/cache/mask_6/mask_157_6.dat
index b45c0cee..b45c0cee 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_157_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_157_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_161_6.dat b/libs/phpqrcode/cache/mask_6/mask_161_6.dat
index ecec68b1..ecec68b1 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_161_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_161_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_165_6.dat b/libs/phpqrcode/cache/mask_6/mask_165_6.dat
index d641dfa3..d641dfa3 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_165_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_165_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_169_6.dat b/libs/phpqrcode/cache/mask_6/mask_169_6.dat
index ae689723..ae689723 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_169_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_169_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_173_6.dat b/libs/phpqrcode/cache/mask_6/mask_173_6.dat
index 95fa97c7..95fa97c7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_173_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_173_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_177_6.dat b/libs/phpqrcode/cache/mask_6/mask_177_6.dat
index e9f0476f..e9f0476f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_177_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_177_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_21_6.dat b/libs/phpqrcode/cache/mask_6/mask_21_6.dat
index 6bd505b4..6bd505b4 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_21_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_21_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_25_6.dat b/libs/phpqrcode/cache/mask_6/mask_25_6.dat
index d45083aa..d45083aa 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_25_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_25_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_29_6.dat b/libs/phpqrcode/cache/mask_6/mask_29_6.dat
index 0408e224..0408e224 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_29_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_29_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_33_6.dat b/libs/phpqrcode/cache/mask_6/mask_33_6.dat
index 8de4ba5c..8de4ba5c 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_33_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_33_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_37_6.dat b/libs/phpqrcode/cache/mask_6/mask_37_6.dat
index b37ff0ab..b37ff0ab 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_37_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_37_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_41_6.dat b/libs/phpqrcode/cache/mask_6/mask_41_6.dat
index c1535f78..c1535f78 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_41_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_41_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_45_6.dat b/libs/phpqrcode/cache/mask_6/mask_45_6.dat
index a7da7ee0..a7da7ee0 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_45_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_45_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_49_6.dat b/libs/phpqrcode/cache/mask_6/mask_49_6.dat
index 64ded709..64ded709 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_49_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_49_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_53_6.dat b/libs/phpqrcode/cache/mask_6/mask_53_6.dat
index 9139e325..9139e325 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_53_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_53_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_57_6.dat b/libs/phpqrcode/cache/mask_6/mask_57_6.dat
index 61e7e242..61e7e242 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_57_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_57_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_61_6.dat b/libs/phpqrcode/cache/mask_6/mask_61_6.dat
index f2d3f10d..f2d3f10d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_61_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_61_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_65_6.dat b/libs/phpqrcode/cache/mask_6/mask_65_6.dat
index 550fc8fe..550fc8fe 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_65_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_65_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_69_6.dat b/libs/phpqrcode/cache/mask_6/mask_69_6.dat
index a3e4fa0f..a3e4fa0f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_69_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_69_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_73_6.dat b/libs/phpqrcode/cache/mask_6/mask_73_6.dat
index ab71b70a..ab71b70a 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_73_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_73_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_77_6.dat b/libs/phpqrcode/cache/mask_6/mask_77_6.dat
index ad5a660e..ad5a660e 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_77_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_77_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_81_6.dat b/libs/phpqrcode/cache/mask_6/mask_81_6.dat
index 28a6d075..28a6d075 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_81_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_81_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_85_6.dat b/libs/phpqrcode/cache/mask_6/mask_85_6.dat
index d5403e49..d5403e49 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_85_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_85_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_89_6.dat b/libs/phpqrcode/cache/mask_6/mask_89_6.dat
index eeeb5d19..eeeb5d19 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_89_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_89_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_93_6.dat b/libs/phpqrcode/cache/mask_6/mask_93_6.dat
index 6ff38db6..6ff38db6 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_93_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_93_6.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_97_6.dat b/libs/phpqrcode/cache/mask_6/mask_97_6.dat
index 3a2072ef..3a2072ef 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_6/mask_97_6.dat
+++ b/libs/phpqrcode/cache/mask_6/mask_97_6.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_101_7.dat b/libs/phpqrcode/cache/mask_7/mask_101_7.dat
index 1f6bc512..1f6bc512 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_101_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_101_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_105_7.dat b/libs/phpqrcode/cache/mask_7/mask_105_7.dat
index 6b0cacfe..6b0cacfe 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_105_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_105_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_109_7.dat b/libs/phpqrcode/cache/mask_7/mask_109_7.dat
index 9875cbe8..9875cbe8 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_109_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_109_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_113_7.dat b/libs/phpqrcode/cache/mask_7/mask_113_7.dat
index b6e21598..b6e21598 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_113_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_113_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_117_7.dat b/libs/phpqrcode/cache/mask_7/mask_117_7.dat
index cde78c10..cde78c10 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_117_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_117_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_121_7.dat b/libs/phpqrcode/cache/mask_7/mask_121_7.dat
index d5d577f7..d5d577f7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_121_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_121_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_125_7.dat b/libs/phpqrcode/cache/mask_7/mask_125_7.dat
index f9ec0887..f9ec0887 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_125_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_125_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_129_7.dat b/libs/phpqrcode/cache/mask_7/mask_129_7.dat
index 9bf51d52..9bf51d52 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_129_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_129_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_133_7.dat b/libs/phpqrcode/cache/mask_7/mask_133_7.dat
index b643ffed..b643ffed 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_133_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_133_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_137_7.dat b/libs/phpqrcode/cache/mask_7/mask_137_7.dat
index 11d212bf..11d212bf 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_137_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_137_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_141_7.dat b/libs/phpqrcode/cache/mask_7/mask_141_7.dat
index 98dffab0..98dffab0 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_141_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_141_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_145_7.dat b/libs/phpqrcode/cache/mask_7/mask_145_7.dat
index 4aa2bac1..4aa2bac1 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_145_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_145_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_149_7.dat b/libs/phpqrcode/cache/mask_7/mask_149_7.dat
index 809f0055..809f0055 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_149_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_149_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_153_7.dat b/libs/phpqrcode/cache/mask_7/mask_153_7.dat
index c1ab2766..c1ab2766 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_153_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_153_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_157_7.dat b/libs/phpqrcode/cache/mask_7/mask_157_7.dat
index 2db27f68..2db27f68 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_157_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_157_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_161_7.dat b/libs/phpqrcode/cache/mask_7/mask_161_7.dat
index 35ba8ff4..35ba8ff4 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_161_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_161_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_165_7.dat b/libs/phpqrcode/cache/mask_7/mask_165_7.dat
index e27fb8ed..e27fb8ed 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_165_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_165_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_169_7.dat b/libs/phpqrcode/cache/mask_7/mask_169_7.dat
index ef1a181f..ef1a181f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_169_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_169_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_173_7.dat b/libs/phpqrcode/cache/mask_7/mask_173_7.dat
index 3b513712..3b513712 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_173_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_173_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_177_7.dat b/libs/phpqrcode/cache/mask_7/mask_177_7.dat
index 068477c9..068477c9 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_177_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_177_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_21_7.dat b/libs/phpqrcode/cache/mask_7/mask_21_7.dat
index 4f9f1386..4f9f1386 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_21_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_21_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_25_7.dat b/libs/phpqrcode/cache/mask_7/mask_25_7.dat
index cefe1b97..cefe1b97 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_25_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_25_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_29_7.dat b/libs/phpqrcode/cache/mask_7/mask_29_7.dat
index e3d7391b..e3d7391b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_29_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_29_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_33_7.dat b/libs/phpqrcode/cache/mask_7/mask_33_7.dat
index 1763f428..1763f428 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_33_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_33_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_37_7.dat b/libs/phpqrcode/cache/mask_7/mask_37_7.dat
index 87d9a1a9..87d9a1a9 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_37_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_37_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_41_7.dat b/libs/phpqrcode/cache/mask_7/mask_41_7.dat
index 8acec04f..8acec04f 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_41_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_41_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_45_7.dat b/libs/phpqrcode/cache/mask_7/mask_45_7.dat
index dbba31d0..dbba31d0 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_45_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_45_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_49_7.dat b/libs/phpqrcode/cache/mask_7/mask_49_7.dat
index be5dce8b..be5dce8b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_49_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_49_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_53_7.dat b/libs/phpqrcode/cache/mask_7/mask_53_7.dat
index 7028ef6d..7028ef6d 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_53_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_53_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_57_7.dat b/libs/phpqrcode/cache/mask_7/mask_57_7.dat
index ee3107a3..ee3107a3 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_57_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_57_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_61_7.dat b/libs/phpqrcode/cache/mask_7/mask_61_7.dat
index 76f8d727..76f8d727 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_61_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_61_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_65_7.dat b/libs/phpqrcode/cache/mask_7/mask_65_7.dat
index d8b92062..d8b92062 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_65_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_65_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_69_7.dat b/libs/phpqrcode/cache/mask_7/mask_69_7.dat
index c2db0204..c2db0204 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_69_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_69_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_73_7.dat b/libs/phpqrcode/cache/mask_7/mask_73_7.dat
index f414e4a5..f414e4a5 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_73_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_73_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_77_7.dat b/libs/phpqrcode/cache/mask_7/mask_77_7.dat
index 3e52bfd3..3e52bfd3 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_77_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_77_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_81_7.dat b/libs/phpqrcode/cache/mask_7/mask_81_7.dat
index 78e08dfc..78e08dfc 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_81_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_81_7.dat
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_85_7.dat b/libs/phpqrcode/cache/mask_7/mask_85_7.dat
index a53824ae..a53824ae 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_85_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_85_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_89_7.dat b/libs/phpqrcode/cache/mask_7/mask_89_7.dat
index 32934a44..32934a44 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_89_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_89_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_93_7.dat b/libs/phpqrcode/cache/mask_7/mask_93_7.dat
index 1955f6b7..1955f6b7 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_93_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_93_7.dat
Binary files differ
diff --git a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_97_7.dat b/libs/phpqrcode/cache/mask_7/mask_97_7.dat
index b277368b..b277368b 100755
--- a/vendor/aferrandini/phpqrcode/cache/mask_7/mask_97_7.dat
+++ b/libs/phpqrcode/cache/mask_7/mask_97_7.dat
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode.php b/libs/phpqrcode/lib/PHPQRCode.php
index e96c5e3d..e96c5e3d 100644
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode.php
+++ b/libs/phpqrcode/lib/PHPQRCode.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/Autoloader.php b/libs/phpqrcode/lib/PHPQRCode/Autoloader.php
index 6fe2bb2f..6fe2bb2f 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/Autoloader.php
+++ b/libs/phpqrcode/lib/PHPQRCode/Autoloader.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/Constants.php b/libs/phpqrcode/lib/PHPQRCode/Constants.php
index 49fc6434..49fc6434 100644
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/Constants.php
+++ b/libs/phpqrcode/lib/PHPQRCode/Constants.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/FrameFiller.php b/libs/phpqrcode/lib/PHPQRCode/FrameFiller.php
index 02e94e3f..02e94e3f 100644
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/FrameFiller.php
+++ b/libs/phpqrcode/lib/PHPQRCode/FrameFiller.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRbitstream.php b/libs/phpqrcode/lib/PHPQRCode/QRbitstream.php
index 93606f13..93606f13 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRbitstream.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRbitstream.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRcode.php b/libs/phpqrcode/lib/PHPQRCode/QRcode.php
index 08b60243..08b60243 100644
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRcode.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRcode.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRencode.php b/libs/phpqrcode/lib/PHPQRCode/QRencode.php
index d05ab6b7..d05ab6b7 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRencode.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRencode.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRimage.php b/libs/phpqrcode/lib/PHPQRCode/QRimage.php
index 430a16f8..430a16f8 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRimage.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRimage.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRinput.php b/libs/phpqrcode/lib/PHPQRCode/QRinput.php
index 8bdd21e7..8bdd21e7 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRinput.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRinput.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRinputItem.php b/libs/phpqrcode/lib/PHPQRCode/QRinputItem.php
index 1e5eb18d..1e5eb18d 100644
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRinputItem.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRinputItem.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRmask.php b/libs/phpqrcode/lib/PHPQRCode/QRmask.php
index 2be76f47..2be76f47 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRmask.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRmask.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrawcode.php b/libs/phpqrcode/lib/PHPQRCode/QRrawcode.php
index 25eae7c8..25eae7c8 100644
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrawcode.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRrawcode.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrs.php b/libs/phpqrcode/lib/PHPQRCode/QRrs.php
index 66f0d5e7..66f0d5e7 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrs.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRrs.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrsItem.php b/libs/phpqrcode/lib/PHPQRCode/QRrsItem.php
index ce63a8c3..ce63a8c3 100644
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrsItem.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRrsItem.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrsblock.php b/libs/phpqrcode/lib/PHPQRCode/QRrsblock.php
index c1d01f22..c1d01f22 100644
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRrsblock.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRrsblock.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRspec.php b/libs/phpqrcode/lib/PHPQRCode/QRspec.php
index d6843260..d6843260 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRspec.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRspec.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRsplit.php b/libs/phpqrcode/lib/PHPQRCode/QRsplit.php
index 805140a9..805140a9 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRsplit.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRsplit.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRstr.php b/libs/phpqrcode/lib/PHPQRCode/QRstr.php
index 64c4bd5c..64c4bd5c 100644
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRstr.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRstr.php
diff --git a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRtools.php b/libs/phpqrcode/lib/PHPQRCode/QRtools.php
index 7c75a6e2..7c75a6e2 100755
--- a/vendor/aferrandini/phpqrcode/lib/PHPQRCode/QRtools.php
+++ b/libs/phpqrcode/lib/PHPQRCode/QRtools.php
diff --git a/vendor/fguillot/picodb/LICENSE b/libs/picodb/LICENSE
index 6a362bc1..6a362bc1 100644
--- a/vendor/fguillot/picodb/LICENSE
+++ b/libs/picodb/LICENSE
diff --git a/libs/picodb/README.md b/libs/picodb/README.md
new file mode 100644
index 00000000..722e8317
--- /dev/null
+++ b/libs/picodb/README.md
@@ -0,0 +1,672 @@
+PicoDb
+======
+
+PicoDb is a minimalist database query builder for PHP.
+
+Features
+--------
+
+- Easy to use, easy to hack, fast and very lightweight
+- Supported drivers: Sqlite, Mssql, Mysql, Postgresql
+- Requires only PDO
+- Use prepared statements
+- Handle schema migrations
+- Fully unit tested on PHP 5.3, 5.4, 5.5, 5.6 and 7.0
+- License: MIT
+
+Requirements
+------------
+
+- PHP >= 5.3
+- PDO extension
+- Sqlite, Mssql, Mysql or Postgresql
+
+Author
+------
+
+Frédéric Guillot
+
+Documentation
+-------------
+
+### Installation
+
+```bash
+composer require fguillot/picodb @stable
+```
+
+### Database connection
+
+#### Sqlite:
+
+```php
+use PicoDb\Database;
+
+// Sqlite driver
+$db = new Database(['driver' => 'sqlite', 'filename' => ':memory:']);
+```
+
+The Sqlite driver enable foreign keys by default.
+
+#### Microsoft SQL server:
+
+```php
+// Optional attributes:
+// "schema_table" (the default table name is "schema_version")
+
+$db = new Database([
+ 'driver' => 'mssql',
+ 'hostname' => 'localhost',
+ 'username' => 'root',
+ 'password' => '',
+ 'database' => 'my_db_name',
+]);
+```
+
+Optional attributes:
+
+- schema_table
+
+#### Mysql:
+
+```php
+$db = new Database([
+ 'driver' => 'mysql',
+ 'hostname' => 'localhost',
+ 'username' => 'root',
+ 'password' => '',
+ 'database' => 'my_db_name',
+ 'ssl_key' => '/path/to/client-key.pem',
+ 'ssl_cert' => '/path/to/client-cert.pem',
+ 'ssl_ca' => '/path/to/ca-cert.pem',
+]);
+```
+
+Optional attributes:
+
+- charset
+- schema_table
+- port
+- ssl_key
+- ssl_cert
+- ssl_key
+
+#### Postgres:
+
+```php
+$db = new Database([
+ 'driver' => 'postgres',
+ 'hostname' => 'localhost',
+ 'username' => 'root',
+ 'password' => '',
+ 'database' => 'my_db_name',
+]);
+```
+
+Optional attributes:
+
+- port
+- schema_table
+
+#### Connecting from an environment variable:
+
+Let's say you have defined an environment variable:
+
+```bash
+export DATABASE_URL=postgres://user:pass@hostname:6212/db
+```
+
+PicoDb can parse automatically this URL for you:
+
+```php
+use PicoDb\UrlParser;
+use PicoDb\Database;
+
+$db = new Database(UrlParser::getInstance()->getSettings());
+```
+
+#### Connecting from a URL
+
+```php
+use PicoDb\UrlParser;
+use PicoDb\Database;
+
+$db = new Database(UrlParser::getInstance()->getSettings('postgres://user:pass@hostname:6212/db'));
+```
+
+### Execute any SQL query
+
+```php
+$db->execute('CREATE TABLE mytable (column1 TEXT)');
+```
+
+- Returns a `PDOStatement` if successful
+- Returns `false` if there is a duplicate key error
+- Throws a `SQLException` for other errors
+
+### Insertion
+
+```php
+$db->table('mytable')->save(['column1' => 'test']);
+```
+
+or
+
+```php
+$db->table('mytable')->insert(['column1' => 'test']);
+```
+
+### Fetch last inserted id
+
+```php
+$db->getLastId();
+```
+
+### Transactions
+
+```php
+$db->transaction(function ($db) {
+ $db->table('mytable')->save(['column1' => 'foo']);
+ $db->table('mytable')->save(['column1' => 'bar']);
+});
+```
+
+- Returns `true` if the callback returns null
+- Returns the callback return value otherwise
+- Throws an SQLException if something is wrong
+
+or
+
+```php
+$db->startTransaction();
+// Do something...
+$db->closeTransaction();
+
+// Rollback
+$db->cancelTransaction();
+```
+
+### Fetch all data
+
+```php
+$records = $db->table('mytable')->findAll();
+
+foreach ($records as $record) {
+ var_dump($record['column1']);
+}
+```
+
+### Updates
+
+```php
+$db->table('mytable')->eq('id', 1)->save(['column1' => 'hey']);
+```
+
+or
+
+```php
+$db->table('mytable')->eq('id', 1)->update(['column1' => 'hey']);
+```
+
+### Remove records
+
+```php
+$db->table('mytable')->lt('column1', 10)->remove();
+```
+
+### Sorting
+
+```php
+$db->table('mytable')->asc('column1')->findAll();
+```
+
+or
+
+```php
+$db->table('mytable')->desc('column1')->findAll();
+```
+
+or
+
+```php
+$db->table('mytable')->orderBy('column1', 'ASC')->findAll();
+```
+
+Multiple sorting:
+
+```php
+$db->table('mytable')->asc('column1')->desc('column2')->findAll();
+```
+
+### Limit and offset
+
+```php
+$db->table('mytable')->limit(10)->offset(5)->findAll();
+```
+
+### Fetch only some columns
+
+```php
+$db->table('mytable')->columns('column1', 'column2')->findAll();
+```
+
+### Fetch only one column
+
+Many rows:
+
+```php
+$db->table('mytable')->findAllByColumn('column1');
+```
+
+One row:
+
+```php
+$db->table('mytable')->findOneColumn('column1');
+```
+
+### Custom select
+
+```php
+$db->table('mytable')->select(1)->eq('id', 42)->findOne();
+```
+
+### Distinct
+
+```php
+$db->table('mytable')->distinct('columnA')->findOne();
+```
+
+### Group by
+
+```php
+$db->table('mytable')->groupBy('columnA')->findAll();
+```
+
+### Count
+
+```php
+$db->table('mytable')->count();
+```
+
+### Sum
+
+```php
+$db->table('mytable')->sum('columnB');
+```
+
+### Sum column values during update
+
+Add the value 42 to the existing value of the column "mycolumn":
+
+```php
+$db->table('mytable')->sumColumn('mycolumn', 42)->update();
+```
+
+### Increment column
+
+Increment a column value in a single query:
+
+```php
+$db->table('mytable')->eq('another_column', 42)->increment('my_column', 2);
+```
+
+### Decrement column
+
+Decrement a column value in a single query:
+
+```php
+$db->table('mytable')->eq('another_column', 42)->decrement('my_column', 1);
+```
+
+### Exists
+
+Returns true if a record exists otherwise false.
+
+```php
+$db->table('mytable')->eq('column1', 12)->exists();
+```
+
+### Left joins
+
+```php
+// SELECT * FROM mytable LEFT JOIN my_other_table AS t1 ON t1.id=mytable.foreign_key
+$db->table('mytable')->left('my_other_table', 't1', 'id', 'mytable', 'foreign_key')->findAll();
+```
+
+or
+
+```php
+// SELECT * FROM mytable LEFT JOIN my_other_table ON my_other_table.id=mytable.foreign_key
+$db->table('mytable')->join('my_other_table', 'id', 'foreign_key')->findAll();
+```
+
+### Equals condition
+
+```php
+$db->table('mytable')
+ ->eq('column1', 'hey')
+ ->findAll();
+```
+
+### IN condition
+
+```php
+$db->table('mytable')
+ ->in('column1', ['hey', 'bla'])
+ ->findAll();
+```
+
+### IN condition with subquery
+
+```php
+$subquery = $db->table('another_table')->columns('column2')->eq('column3', 'value3');
+
+$db->table('mytable')
+ ->columns('column_5')
+ ->inSubquery('column1', $subquery)
+ ->findAll();
+```
+
+### Like condition
+
+Case-sensitive (only Mysql and Postgres):
+
+```php
+$db->table('mytable')
+ ->like('column1', '%Foo%')
+ ->findAll();
+```
+
+Not case-sensitive:
+
+```php
+$db->table('mytable')
+ ->ilike('column1', '%foo%')
+ ->findAll();
+```
+
+### Lower than condition
+
+```php
+$db->table('mytable')
+ ->lt('column1', 2)
+ ->findAll();
+```
+
+### Lower than or equal condition
+
+```php
+$db->table('mytable')
+ ->lte('column1', 2)
+ ->findAll();
+```
+
+### Greater than condition
+
+```php
+$db->table('mytable')
+ ->gt('column1', 3)
+ ->findAll();
+```
+
+### Greater than or equal condition
+
+```php
+$db->table('mytable')
+ ->gte('column1', 3)
+ ->findAll();
+```
+
+### IS NULL condition
+
+```php
+$db->table('mytable')
+ ->isNull('column1')
+ ->findAll();
+```
+
+### IS NOT NULL condition
+
+```php
+$db->table('mytable')
+ ->notNull('column1')
+ ->findAll();
+```
+
+### Multiple conditions
+
+Add conditions are joined by a `AND`.
+
+```php
+$db->table('mytable')
+ ->like('column2', '%mytable')
+ ->gte('column1', 3)
+ ->findAll();
+```
+
+How to make a OR condition:
+
+```php
+$db->table('mytable')
+ ->beginOr()
+ ->like('column2', '%mytable')
+ ->gte('column1', 3)
+ ->closeOr()
+ ->eq('column5', 'titi')
+ ->findAll();
+```
+
+### Debugging
+
+Log generated queries:
+
+```php
+$db->getStatementHandler()->withLogging();
+```
+
+Mesure each query time:
+
+```php
+$db->getStatementHandler()->withStopWatch();
+```
+
+Get the number of queries executed:
+
+```php
+echo $db->getStatementHandler()->getNbQueries();
+```
+
+Get log messages:
+
+```php
+print_r($db->getLogMessages());
+```
+
+### Large objects (LOBs)
+
+Insert a file:
+
+```php
+$db->largeObject('my_table')->insertFromFile('blobColumn', '/path/to/file', array('id' => 'something'));
+```
+
+Insert from a stream:
+
+```php
+$db->largeObject('my_table')->insertFromStream('blobColumn', $fd, array('id' => 'something'));
+```
+
+Fetch a large object as a stream (Postgres only):
+
+```php
+$fd = $db->largeObject('my_table')->eq('id', 'something')->findOneColumnAsStream('blobColumn');
+```
+
+Fetch a large object as a string:
+
+```php
+echo $db->largeObject('my_table')->eq('id', 'something')->findOneColumnAsString('blobColumn');
+```
+
+Drivers:
+
+- Postgres
+ - Column type: `bytea`
+- Sqlite and Mysql
+ - Column type: `BLOB`
+ - PDO do no not supports the stream feature (returns a string instead)
+
+### Hashtable (key/value store)
+
+How to use a table as a key/value store:
+
+```php
+$db->execute(
+ 'CREATE TABLE mytable (
+ column1 TEXT NOT NULL UNIQUE,
+ column2 TEXT default NULL
+ )'
+);
+
+$db->table('mytable')->insert(['column1' => 'option1', 'column2' => 'value1']);
+```
+
+Add/Replace some values:
+
+```php
+$db->hashtable('mytable')
+ ->columnKey('column1')
+ ->columnValue('column2')
+ ->put(['option1' => 'new value', 'option2' => 'value2']));
+```
+
+Get all values:
+
+```php
+$result = $db->hashtable('mytable')->columnKey('column1')->columnValue('column2')->get();
+print_r($result);
+
+Array
+(
+ [option2] => value2
+ [option1] => new value
+)
+```
+
+or
+
+```php
+$result = $db->hashtable('mytable')->getAll('column1', 'column2');
+```
+
+Get a specific value:
+
+```php
+$db->hashtable('mytable')
+ ->columnKey('column1')
+ ->columnValue('column2')
+ ->put(['option3' => 'value3']);
+
+$result = $db->hashtable('mytable')
+ ->columnKey('column1')
+ ->columnValue('column2')
+ ->get('option1', 'option3');
+
+print_r($result);
+
+Array
+(
+ [option1] => new value
+ [option3] => value3
+)
+```
+
+### Schema migrations
+
+#### Define a migration
+
+- Migrations are defined in simple functions inside a namespace named "Schema".
+- An instance of PDO is passed to first argument of the function.
+- Function names has the version number at the end.
+
+Example:
+
+```php
+namespace Schema;
+
+function version_1($pdo)
+{
+ $pdo->exec('
+ CREATE TABLE users (
+ id INTEGER PRIMARY KEY,
+ name TEXT UNIQUE,
+ email TEXT UNIQUE,
+ password TEXT
+ )
+ ');
+}
+
+
+function version_2($pdo)
+{
+ $pdo->exec('
+ CREATE TABLE tags (
+ id INTEGER PRIMARY KEY,
+ name TEXT UNIQUE
+ )
+ ');
+}
+```
+
+#### Run schema update automatically
+
+- The method `check()` execute all migrations until the version specified
+- If an error occurs, the transaction is rollbacked
+- Foreign keys checks are disabled if possible during the migration
+
+Example:
+
+```php
+$last_schema_version = 5;
+
+$db = new PicoDb\Database(array(
+ 'driver' => 'sqlite',
+ 'filename' => '/tmp/mydb.sqlite'
+));
+
+if ($db->schema()->check($last_schema_version)) {
+
+ // Do something...
+}
+else {
+
+ die('Unable to migrate database schema.');
+}
+```
+
+### Use a singleton to handle database instances
+
+Setup a new instance:
+
+```php
+PicoDb\Database::setInstance('myinstance', function() {
+
+ $db = new PicoDb\Database(array(
+ 'driver' => 'sqlite',
+ 'filename' => DB_FILENAME
+ ));
+
+ if ($db->schema()->check(DB_VERSION)) {
+ return $db;
+ }
+ else {
+ die('Unable to migrate database schema.');
+ }
+});
+```
+
+Get this instance anywhere in your code:
+
+```php
+PicoDb\Database::getInstance('myinstance')->table(...)
+```
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/BaseBuilder.php b/libs/picodb/lib/PicoDb/Builder/BaseBuilder.php
index e075ae3c..e075ae3c 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/BaseBuilder.php
+++ b/libs/picodb/lib/PicoDb/Builder/BaseBuilder.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/ConditionBuilder.php b/libs/picodb/lib/PicoDb/Builder/ConditionBuilder.php
index b0465b6e..b0465b6e 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/ConditionBuilder.php
+++ b/libs/picodb/lib/PicoDb/Builder/ConditionBuilder.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/InsertBuilder.php b/libs/picodb/lib/PicoDb/Builder/InsertBuilder.php
index 9d06c405..9d06c405 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/InsertBuilder.php
+++ b/libs/picodb/lib/PicoDb/Builder/InsertBuilder.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/OrConditionBuilder.php b/libs/picodb/lib/PicoDb/Builder/OrConditionBuilder.php
index 0defeaf4..0defeaf4 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/OrConditionBuilder.php
+++ b/libs/picodb/lib/PicoDb/Builder/OrConditionBuilder.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Builder/UpdateBuilder.php b/libs/picodb/lib/PicoDb/Builder/UpdateBuilder.php
index 300ea9b0..300ea9b0 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Builder/UpdateBuilder.php
+++ b/libs/picodb/lib/PicoDb/Builder/UpdateBuilder.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Database.php b/libs/picodb/lib/PicoDb/Database.php
index 22c9d2fb..22c9d2fb 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Database.php
+++ b/libs/picodb/lib/PicoDb/Database.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Base.php b/libs/picodb/lib/PicoDb/Driver/Base.php
index 790cd623..790cd623 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Base.php
+++ b/libs/picodb/lib/PicoDb/Driver/Base.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Mssql.php b/libs/picodb/lib/PicoDb/Driver/Mssql.php
index 83e75af2..83e75af2 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Mssql.php
+++ b/libs/picodb/lib/PicoDb/Driver/Mssql.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Mysql.php b/libs/picodb/lib/PicoDb/Driver/Mysql.php
index 17f44057..7e5cce0a 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Mysql.php
+++ b/libs/picodb/lib/PicoDb/Driver/Mysql.php
@@ -110,6 +110,10 @@ class Mysql extends Base
$options[PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT] = $settings['verify_server_cert'];
}
+ if (! empty($settings['case'])) {
+ $options[PDO::ATTR_CASE] = $settings['case'];
+ }
+
return $options;
}
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Postgres.php b/libs/picodb/lib/PicoDb/Driver/Postgres.php
index 86036839..86036839 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Postgres.php
+++ b/libs/picodb/lib/PicoDb/Driver/Postgres.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Driver/Sqlite.php b/libs/picodb/lib/PicoDb/Driver/Sqlite.php
index 0503d336..0503d336 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Driver/Sqlite.php
+++ b/libs/picodb/lib/PicoDb/Driver/Sqlite.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/DriverFactory.php b/libs/picodb/lib/PicoDb/DriverFactory.php
index 13151ba7..13151ba7 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/DriverFactory.php
+++ b/libs/picodb/lib/PicoDb/DriverFactory.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Hashtable.php b/libs/picodb/lib/PicoDb/Hashtable.php
index 17afd0e6..17afd0e6 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Hashtable.php
+++ b/libs/picodb/lib/PicoDb/Hashtable.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/LargeObject.php b/libs/picodb/lib/PicoDb/LargeObject.php
index ba5e3b92..ba5e3b92 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/LargeObject.php
+++ b/libs/picodb/lib/PicoDb/LargeObject.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/SQLException.php b/libs/picodb/lib/PicoDb/SQLException.php
index 7e570834..7e570834 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/SQLException.php
+++ b/libs/picodb/lib/PicoDb/SQLException.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Schema.php b/libs/picodb/lib/PicoDb/Schema.php
index a0280368..a0280368 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Schema.php
+++ b/libs/picodb/lib/PicoDb/Schema.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/StatementHandler.php b/libs/picodb/lib/PicoDb/StatementHandler.php
index d0cdaa49..d0cdaa49 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/StatementHandler.php
+++ b/libs/picodb/lib/PicoDb/StatementHandler.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/Table.php b/libs/picodb/lib/PicoDb/Table.php
index 404b5cbe..404b5cbe 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/Table.php
+++ b/libs/picodb/lib/PicoDb/Table.php
diff --git a/vendor/fguillot/picodb/lib/PicoDb/UrlParser.php b/libs/picodb/lib/PicoDb/UrlParser.php
index d8fcaf00..d8fcaf00 100644
--- a/vendor/fguillot/picodb/lib/PicoDb/UrlParser.php
+++ b/libs/picodb/lib/PicoDb/UrlParser.php
diff --git a/libs/picodb/phpunit.xml b/libs/picodb/phpunit.xml
new file mode 100644
index 00000000..77298d47
--- /dev/null
+++ b/libs/picodb/phpunit.xml
@@ -0,0 +1,30 @@
+<phpunit
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.5/phpunit.xsd"
+ colors="true"
+ stopOnError="true"
+ stopOnFailure="true">
+ <testsuites>
+ <testsuite name="sqlite">
+ <file>tests/UrlParserTest.php</file>
+ <file>tests/SqliteDriverTest.php</file>
+ <file>tests/SqliteDatabaseTest.php</file>
+ <file>tests/SqliteSchemaTest.php</file>
+ <file>tests/SqliteTableTest.php</file>
+ </testsuite>
+ <testsuite name="mysql">
+ <file>tests/UrlParserTest.php</file>
+ <file>tests/MysqlDriverTest.php</file>
+ <file>tests/MysqlDatabaseTest.php</file>
+ <file>tests/MysqlSchemaTest.php</file>
+ <file>tests/MysqlTableTest.php</file>
+ </testsuite>
+ <testsuite name="postgres">
+ <file>tests/UrlParserTest.php</file>
+ <file>tests/PostgresDriverTest.php</file>
+ <file>tests/PostgresDatabaseTest.php</file>
+ <file>tests/PostgresSchemaTest.php</file>
+ <file>tests/PostgresTableTest.php</file>
+ </testsuite>
+ </testsuites>
+</phpunit>
diff --git a/libs/picodb/tests/AlternativeSchemaFixture.php b/libs/picodb/tests/AlternativeSchemaFixture.php
new file mode 100644
index 00000000..bebcf137
--- /dev/null
+++ b/libs/picodb/tests/AlternativeSchemaFixture.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace AlternativeSchema;
+
+use PDO;
+
+function version_1(PDO $pdo)
+{
+ $pdo->exec('CREATE TABLE test1 (column1 TEXT)');
+}
+
+function version_2(PDO $pdo)
+{
+ $pdo->exec('CREATE TABLE test2 (column2 TEXT)');
+}
diff --git a/libs/picodb/tests/MysqlDatabaseTest.php b/libs/picodb/tests/MysqlDatabaseTest.php
new file mode 100644
index 00000000..bd819dd9
--- /dev/null
+++ b/libs/picodb/tests/MysqlDatabaseTest.php
@@ -0,0 +1,101 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Database;
+
+class MysqlDatabaseTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new Database(array('driver' => 'mysql', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'picodb'));
+ $this->db->getConnection()->exec('CREATE DATABASE IF NOT EXISTS `picodb`');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
+ }
+
+ public function testEscapeIdentifer()
+ {
+ $this->assertEquals('`a`', $this->db->escapeIdentifier('a'));
+ $this->assertEquals('a.b', $this->db->escapeIdentifier('a.b'));
+ $this->assertEquals('`c`.`a`', $this->db->escapeIdentifier('a', 'c'));
+ $this->assertEquals('a.b', $this->db->escapeIdentifier('a.b', 'c'));
+ $this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test'));
+ $this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test', 'b'));
+ }
+
+ public function testEscapeIdentiferList()
+ {
+ $this->assertEquals(array('`c`.`a`', '`c`.`b`'), $this->db->escapeIdentifierList(array('a', 'b'), 'c'));
+ $this->assertEquals(array('`a`', 'd.b'), $this->db->escapeIdentifierList(array('a', 'd.b')));
+ }
+
+ public function testThatPreparedStatementWorks()
+ {
+ $this->db->getConnection()->exec('CREATE TABLE foobar (id INT AUTO_INCREMENT NOT NULL, something TEXT, PRIMARY KEY (id)) ENGINE=InnoDB');
+ $this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ $this->assertEquals(1, $this->db->getLastId());
+ $this->assertEquals('a', $this->db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn());
+ }
+
+ /**
+ * @expectedException PicoDb\SQLException
+ */
+ public function testBadSQLQuery()
+ {
+ $this->db->execute('INSERT INTO foobar');
+ }
+
+ public function testDuplicateKey()
+ {
+ $this->db->getConnection()->exec('CREATE TABLE foobar (something CHAR(1) UNIQUE) ENGINE=InnoDB');
+
+ $this->assertNotFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
+ $this->assertFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
+
+ $this->assertEquals(1, $this->db->execute('SELECT COUNT(*) FROM foobar WHERE something=?', array('a'))->fetchColumn());
+ }
+
+ public function testThatTransactionReturnsAValue()
+ {
+ $this->assertEquals('a', $this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABLE foobar (something CHAR(1) UNIQUE) ENGINE=InnoDB');
+ $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+
+ return $db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn();
+ }));
+ }
+
+ public function testThatTransactionReturnsTrue()
+ {
+ $this->assertTrue($this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABLE foobar (something CHAR(1) UNIQUE) ENGINE=InnoDB');
+ $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ }));
+ }
+
+ /**
+ * @expectedException PicoDb\SQLException
+ */
+ public function testThatTransactionThrowExceptionWhenRollbacked()
+ {
+ $this->assertFalse($this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABL');
+ }));
+ }
+
+ public function testThatTransactionReturnsFalseWhithDuplicateKey()
+ {
+ $this->assertFalse($this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABLE foobar (something CHAR(1) UNIQUE) ENGINE=InnoDB');
+ $r1 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ $r2 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ return $r1 && $r2;
+ }));
+ }
+}
diff --git a/libs/picodb/tests/MysqlDriverTest.php b/libs/picodb/tests/MysqlDriverTest.php
new file mode 100644
index 00000000..2666a993
--- /dev/null
+++ b/libs/picodb/tests/MysqlDriverTest.php
@@ -0,0 +1,73 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Driver\Mysql;
+
+class MysqlDriverTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Driver\Mysql
+ */
+ private $driver;
+
+ public function setUp()
+ {
+ $this->driver = new Mysql(array('hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'picodb'));
+ $this->driver->getConnection()->exec('CREATE DATABASE IF NOT EXISTS `picodb`');
+ $this->driver->getConnection()->exec('DROP TABLE IF EXISTS foobar');
+ $this->driver->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
+ }
+
+ /**
+ * @expectedException LogicException
+ */
+ public function testMissingRequiredParameter()
+ {
+ new Mysql(array());
+ }
+
+ public function testDuplicateKeyError()
+ {
+ $this->assertFalse($this->driver->isDuplicateKeyError(1234));
+ $this->assertTrue($this->driver->isDuplicateKeyError(23000));
+ }
+
+ public function testOperator()
+ {
+ $this->assertEquals('LIKE BINARY', $this->driver->getOperator('LIKE'));
+ $this->assertEquals('LIKE', $this->driver->getOperator('ILIKE'));
+ $this->assertEquals('', $this->driver->getOperator('FOO'));
+ }
+
+ public function testSchemaVersion()
+ {
+ $this->assertEquals(0, $this->driver->getSchemaVersion());
+
+ $this->driver->setSchemaVersion(1);
+ $this->assertEquals(1, $this->driver->getSchemaVersion());
+
+ $this->driver->setSchemaVersion(42);
+ $this->assertEquals(42, $this->driver->getSchemaVersion());
+ }
+
+ public function testLastInsertId()
+ {
+ $this->assertEquals(0, $this->driver->getLastId());
+
+ $this->driver->getConnection()->exec('CREATE TABLE foobar (id INT AUTO_INCREMENT NOT NULL, something TEXT, PRIMARY KEY (id)) ENGINE=InnoDB');
+ $this->driver->getConnection()->exec('INSERT INTO foobar (something) VALUES (1)');
+
+ $this->assertEquals(1, $this->driver->getLastId());
+ }
+
+ public function testEscape()
+ {
+ $this->assertEquals('`foobar`', $this->driver->escape('foobar'));
+ }
+
+ public function testDatabaseVersion()
+ {
+ $this->assertStringStartsWith('5.', $this->driver->getDatabaseVersion());
+ }
+}
diff --git a/libs/picodb/tests/MysqlLobTest.php b/libs/picodb/tests/MysqlLobTest.php
new file mode 100644
index 00000000..1291d422
--- /dev/null
+++ b/libs/picodb/tests/MysqlLobTest.php
@@ -0,0 +1,83 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+class MysqlLobTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new PicoDb\Database(array('driver' => 'mysql', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'picodb'));
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS large_objects');
+ $this->db->getConnection()->exec('CREATE TABLE large_objects (id VARCHAR(20), file_content BLOB)');
+ $this->db->getStatementHandler()->withLogging();
+ }
+
+ public function testInsert()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test'));
+ $this->assertTrue($result);
+ }
+
+ public function testInsertFromString()
+ {
+ $data = 'test';
+ $result = $this->db->largeObject('large_objects')->insertFromString('file_content', $data, array('id' => 'test'));
+ $this->assertTrue($result);
+ }
+
+ public function testInsertWithOptionalParams()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__);
+ $this->assertTrue($result);
+ }
+
+ public function testFindOneColumnAsStream()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test'));
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test')->findOneColumnAsStream('file_content');
+ $this->assertSame(md5(file_get_contents(__FILE__)), md5($contents));
+ }
+
+ public function testFindOneColumnAsString()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test'));
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__FILE__)), md5($contents));
+ }
+
+ public function testUpdate()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test1'));
+ $this->assertTrue($result);
+
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test2'));
+ $this->assertTrue($result);
+
+ $result = $this->db->largeObject('large_objects')->eq('id', 'test1')->updateFromFile('file_content', __DIR__.'/../LICENSE');
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test1')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__DIR__.'/../LICENSE')), md5($contents));
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test2')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__FILE__)), md5($contents));
+
+ $result = $this->db->largeObject('large_objects')->updateFromFile('file_content', __DIR__.'/../composer.json');
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test1')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__DIR__.'/../composer.json')), md5($contents));
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test2')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__DIR__.'/../composer.json')), md5($contents));
+ }
+}
diff --git a/libs/picodb/tests/MysqlSchemaTest.php b/libs/picodb/tests/MysqlSchemaTest.php
new file mode 100644
index 00000000..4eeee0b9
--- /dev/null
+++ b/libs/picodb/tests/MysqlSchemaTest.php
@@ -0,0 +1,49 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+require_once __DIR__.'/SchemaFixture.php';
+require_once __DIR__.'/AlternativeSchemaFixture.php';
+
+class MysqlSchemaTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new PicoDb\Database(array('driver' => 'mysql', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'picodb'));
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS test1');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS test2');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
+ }
+
+ public function testMigrations()
+ {
+ $this->assertTrue($this->db->schema()->check(2));
+ $this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
+ $this->assertEquals('\Schema', $this->db->schema()->getNamespace());
+ }
+
+ public function testFailedMigrations()
+ {
+ $this->assertEquals(0, $this->db->getDriver()->getSchemaVersion());
+ $this->assertFalse($this->db->schema()->check(3));
+ $this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
+
+ $logs = $this->db->getLogMessages();
+ $this->assertNotEmpty($logs);
+ $this->assertEquals('Running migration \Schema\version_1', $logs[0]);
+ $this->assertEquals('Running migration \Schema\version_2', $logs[1]);
+ $this->assertEquals('Running migration \Schema\version_3', $logs[2]);
+ $this->assertStringStartsWith('SQLSTATE[42000]: Syntax error or access violation', $logs[3]);
+ }
+
+ public function testAlternativeSchemaNamespace()
+ {
+ $this->assertEquals('\AlternativeSchema', $this->db->schema('\AlternativeSchema')->getNamespace());
+ $this->assertTrue($this->db->schema('\AlternativeSchema')->check(2));
+ $this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
+ }
+}
diff --git a/libs/picodb/tests/MysqlTableTest.php b/libs/picodb/tests/MysqlTableTest.php
new file mode 100644
index 00000000..62c1730a
--- /dev/null
+++ b/libs/picodb/tests/MysqlTableTest.php
@@ -0,0 +1,356 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Database;
+use PicoDb\Table;
+
+class MysqlTableTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new Database(array('driver' => 'mysql', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'picodb'));
+ $this->db->getConnection()->exec('CREATE DATABASE IF NOT EXISTS `picodb`');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS test1');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS test2');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar_persist');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
+ }
+
+ public function testSelect()
+ {
+ $this->assertEquals('SELECT 1 FROM `test`', $this->db->table('test')->select(1)->buildSelectQuery());
+ }
+
+ public function testColumns()
+ {
+ $this->assertEquals('SELECT `a`, `b` FROM `test`', $this->db->table('test')->columns('a', 'b')->buildSelectQuery());
+ }
+
+ public function testDistinct()
+ {
+ $this->assertEquals('SELECT DISTINCT `a`, `b` FROM `test`', $this->db->table('test')->distinct('a', 'b')->buildSelectQuery());
+ }
+
+ public function testGroupBy()
+ {
+ $this->assertEquals('SELECT * FROM `test` GROUP BY `a`', $this->db->table('test')->groupBy('a')->buildSelectQuery());
+ }
+
+ public function testOrderBy()
+ {
+ $this->assertEquals('SELECT * FROM `test` ORDER BY `a` ASC', $this->db->table('test')->asc('a')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM `test` ORDER BY `a` ASC', $this->db->table('test')->orderBy('a', Table::SORT_ASC)->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC', $this->db->table('test')->desc('a')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM `test` ORDER BY `a` ASC, `b` ASC', $this->db->table('test')->asc('a')->asc('b')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC, `b` DESC', $this->db->table('test')->desc('a')->desc('b')->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM `test` ORDER BY `a` ASC, `b` ASC', $this->db->table('test')->orderBy('a')->orderBy('b')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC, `b` DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->orderBy('b', Table::SORT_DESC)->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC, `b` ASC', $this->db->table('test')->desc('a')->asc('b')->buildSelectQuery());
+ }
+
+ public function testLimit()
+ {
+ $this->assertEquals('SELECT * FROM `test` LIMIT 10', $this->db->table('test')->limit(10)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM `test`', $this->db->table('test')->limit(null)->buildSelectQuery());
+ }
+
+ public function testOffset()
+ {
+ $this->assertEquals('SELECT * FROM `test` OFFSET 0', $this->db->table('test')->offset(0)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM `test` OFFSET 10', $this->db->table('test')->offset(10)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM `test`', $this->db->table('test')->limit(null)->buildSelectQuery());
+ }
+
+ public function testLimitOffset()
+ {
+ $this->assertEquals('SELECT * FROM `test` LIMIT 2 OFFSET 0', $this->db->table('test')->offset(0)->limit(2)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM `test` LIMIT 5 OFFSET 10', $this->db->table('test')->offset(10)->limit(5)->buildSelectQuery());
+ }
+
+ public function testSubquery()
+ {
+ $this->assertEquals('SELECT (SELECT 1 FROM "foobar" WHERE 1=1) AS `b` FROM `test`', $this->db->table('test')->subquery('SELECT 1 FROM "foobar" WHERE 1=1', 'b')->buildSelectQuery());
+ }
+
+ public function testConditionEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` = ? AND `b` = ?', $table->eq('a', 2)->eq('b', 'foobar')->buildSelectQuery());
+ $this->assertEquals(array(2, 'foobar'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionNotEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` != ?', $table->neq('a', 2)->buildSelectQuery());
+ $this->assertEquals(array(2), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionIn()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` IN (?, ?)', $table->in('a', array('b', 'c'))->buildSelectQuery());
+ $this->assertEquals(array('b', 'c'), $table->getConditionBuilder()->getValues());
+
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test`', $table->in('a', array())->buildSelectQuery());
+ $this->assertEquals(array(), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM `test` WHERE `a` IN (SELECT `c` FROM `test2` WHERE `d` = ?)',
+ $table->inSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionNotIn()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` NOT IN (?, ?)', $table->notIn('a', array('b', 'c'))->buildSelectQuery());
+ $this->assertEquals(array('b', 'c'), $table->getConditionBuilder()->getValues());
+
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test`', $table->notIn('a', array())->buildSelectQuery());
+ $this->assertEquals(array(), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionNotInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM `test` WHERE `a` NOT IN (SELECT `c` FROM `test2` WHERE `d` = ?)',
+ $table->notInSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLike()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` LIKE BINARY ?', $table->like('a', '%foobar%')->buildSelectQuery());
+ $this->assertEquals(array('%foobar%'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionILike()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` LIKE ?', $table->ilike('a', '%foobar%')->buildSelectQuery());
+ $this->assertEquals(array('%foobar%'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionGreaterThan()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` > ?', $table->gt('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionGreaterThanOrEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` >= ?', $table->gte('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLowerThan()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` < ?', $table->lt('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLowerThanOrEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` <= ?', $table->lte('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionIsNull()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` IS NOT NULL', $table->notNull('a')->buildSelectQuery());
+ $this->assertEquals(array(), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testCustomCondition()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE a=c AND `b` = ?', $table->addCondition('a=c')->eq('b', 4)->buildSelectQuery());
+ $this->assertEquals(array(4), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testOrConditions()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM `test` WHERE `a` IS NOT NULL AND (`b` = ? OR `c` >= ?)', $table->notNull('a')->beginOr()->eq('b', 2)->gte('c', 5)->closeOr()->buildSelectQuery());
+ $this->assertEquals(array(2, 5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testPersist()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar_persist (id INT NOT NULL AUTO_INCREMENT, a VARCHAR(10), PRIMARY KEY(id))'));
+ $this->assertSame(1, $this->db->table('foobar_persist')->persist(array('a' => 'b')));
+ }
+
+ public function testInsertUpdate()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a TEXT)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 'b')));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 'c')));
+
+ $this->assertEquals(array(array('a' => 'b'), array('a' => 'c')), $this->db->table('foobar')->findAll());
+
+ $this->assertEquals(array('b', 'c'), $this->db->table('foobar')->findAllByColumn('a'));
+
+ $this->assertEquals(array('a' => 'b'), $this->db->table('foobar')->findOne());
+
+ $this->assertEquals('b', $this->db->table('foobar')->findOneColumn('a'));
+
+ $this->assertTrue($this->db->table('foobar')->exists());
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'c')->exists());
+ $this->assertFalse($this->db->table('foobar')->eq('a', 'e')->exists());
+
+ $this->assertEquals(2, $this->db->table('foobar')->count());
+ $this->assertEquals(1, $this->db->table('foobar')->eq('a', 'c')->count());
+ $this->assertEquals(0, $this->db->table('foobar')->eq('a', 'e')->count());
+
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'c')->remove());
+ $this->assertFalse($this->db->table('foobar')->eq('a', 'e')->remove());
+
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'b')->update(array('a' => 'test')));
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'lol')->update(array('a' => 'test')));
+
+ $this->assertNotEmpty($this->db->table('foobar')->eq('a', 'test')->findOne());
+ $this->assertNull($this->db->table('foobar')->eq('a', 'lol')->findOne());
+
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'test')->save(array('a' => 'plop')));
+ $this->assertEquals(1, $this->db->table('foobar')->count());
+ }
+
+ public function testSumColumn()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (b FLOAT, c FLOAT)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('b' => 2, 'c' => 3.3)));
+
+ $this->assertTrue($this->db->table('foobar')->sumColumn('b', 2.5)->sumColumn('c', 3)->update());
+
+ $this->assertEquals(
+ array('b' => 4.5, 'c' => 6.3),
+ $this->db->table('foobar')->findOne()
+ );
+ }
+
+ public function testSum()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a INTEGER)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 2)));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 5)));
+ $this->assertEquals(7, $this->db->table('foobar')->sum('a'));
+ }
+
+ public function testIncrement()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a INTEGER DEFAULT 0, b INTEGER DEFAULT 0)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 2, 'b' => 5)));
+ $this->assertTrue($this->db->table('foobar')->eq('b', 5)->increment('a', 3));
+ $this->assertEquals(5, $this->db->table('foobar')->findOneColumn('a'));
+ }
+
+ public function testLeftJoin()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE test1 (a INTEGER NOT NULL, foreign_key INTEGER NOT NULL)'));
+ $this->assertNotFalse($this->db->execute('CREATE TABLE test2 (id INTEGER NOT NULL, b INTEGER NOT NULL)'));
+
+ $this->assertTrue($this->db->table('test2')->insert(array('id' => 42, 'b' => 2)));
+ $this->assertTrue($this->db->table('test1')->insert(array('a' => 18, 'foreign_key' => 42)));
+
+ $this->assertEquals(
+ array('a' => 18, 'b' => 2),
+ $this->db->table('test2')->columns('a', 'b')->eq('a', 18)->left('test1', 't1', 'foreign_key', 'test2', 'id')->findOne()
+ );
+
+ $this->assertEquals(
+ array('a' => 18, 'b' => 2),
+ $this->db->table('test2')->columns('a', 'b')->eq('a', 18)->join('test1', 'foreign_key', 'id')->findOne()
+ );
+
+ $this->assertEquals(
+ array('a' => 18, 'b' => 2),
+ $this->db->table('test1')->columns('a', 'b')->join('test2', 'id', 'foreign_key')->findOne()
+ );
+ }
+
+ public function testHashTable()
+ {
+ $this->assertNotFalse($this->db->execute(
+ 'CREATE TABLE foobar (
+ column1 VARCHAR(20) NOT NULL UNIQUE,
+ column2 VARCHAR(20) default NULL
+ )'
+ ));
+
+ $this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option1', 'column2' => 'value1')));
+ $this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option2', 'column2' => 'value2')));
+ $this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option3', 'column2' => 'value3')));
+
+ $values = array(
+ 'option1' => 'hey',
+ 'option4' => 'ho',
+ );
+
+ $this->assertTrue($this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->put($values));
+
+ $this->assertEquals(
+ array('option2' => 'value2', 'option4' => 'ho'),
+ $this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->get('option2', 'option4')
+ );
+
+ $this->assertEquals(
+ array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
+ $this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->get()
+ );
+
+ $this->assertEquals(
+ array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
+ $this->db->hashtable('foobar')->getAll('column1', 'column2')
+ );
+ }
+}
diff --git a/libs/picodb/tests/PostgresDatabaseTest.php b/libs/picodb/tests/PostgresDatabaseTest.php
new file mode 100644
index 00000000..d0d8a644
--- /dev/null
+++ b/libs/picodb/tests/PostgresDatabaseTest.php
@@ -0,0 +1,100 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Database;
+
+class PostgresDatabaseTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new Database(array('driver' => 'postgres', 'hostname' => 'localhost', 'username' => 'postgres', 'password' => '', 'database' => 'picodb'));
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
+ }
+
+ public function testEscapeIdentifer()
+ {
+ $this->assertEquals('"a"', $this->db->escapeIdentifier('a'));
+ $this->assertEquals('a.b', $this->db->escapeIdentifier('a.b'));
+ $this->assertEquals('"c"."a"', $this->db->escapeIdentifier('a', 'c'));
+ $this->assertEquals('a.b', $this->db->escapeIdentifier('a.b', 'c'));
+ $this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test'));
+ $this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test', 'b'));
+ }
+
+ public function testEscapeIdentiferList()
+ {
+ $this->assertEquals(array('"c"."a"', '"c"."b"'), $this->db->escapeIdentifierList(array('a', 'b'), 'c'));
+ $this->assertEquals(array('"a"', 'd.b'), $this->db->escapeIdentifierList(array('a', 'd.b')));
+ }
+
+ public function testThatPreparedStatementWorks()
+ {
+ $this->db->getConnection()->exec('CREATE TABLE foobar (id serial PRIMARY KEY, something TEXT)');
+ $this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ $this->assertEquals(1, $this->db->getLastId());
+ $this->assertEquals('a', $this->db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn());
+ }
+
+ /**
+ * @expectedException PicoDb\SQLException
+ */
+ public function testBadSQLQuery()
+ {
+ $this->db->execute('INSERT INTO foobar');
+ }
+
+ public function testDuplicateKey()
+ {
+ $this->db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
+
+ $this->assertNotFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
+ $this->assertFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
+
+ $this->assertEquals(1, $this->db->execute('SELECT COUNT(*) FROM foobar WHERE something=?', array('a'))->fetchColumn());
+ }
+
+ public function testThatTransactionReturnsAValue()
+ {
+ $this->assertEquals('a', $this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
+ $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+
+ return $db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn();
+ }));
+ }
+
+ public function testThatTransactionReturnsTrue()
+ {
+ $this->assertTrue($this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
+ $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ }));
+ }
+
+ /**
+ * @expectedException PicoDb\SQLException
+ */
+ public function testThatTransactionThrowExceptionWhenRollbacked()
+ {
+ $this->assertFalse($this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABL');
+ }));
+ }
+
+ public function testThatTransactionReturnsFalseWhithDuplicateKey()
+ {
+ $this->assertFalse($this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
+ $r1 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ $r2 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ return $r1 && $r2;
+ }));
+ }
+}
diff --git a/libs/picodb/tests/PostgresDriverTest.php b/libs/picodb/tests/PostgresDriverTest.php
new file mode 100644
index 00000000..9798042b
--- /dev/null
+++ b/libs/picodb/tests/PostgresDriverTest.php
@@ -0,0 +1,78 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Driver\Postgres;
+
+class PostgresDriverTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Driver\Postgres
+ */
+ private $driver;
+
+ public function setUp()
+ {
+ $this->driver = new Postgres(array('hostname' => 'localhost', 'username' => 'postgres', 'password' => 'postgres', 'database' => 'picodb'));
+ $this->driver->getConnection()->exec('DROP TABLE IF EXISTS foobar');
+ $this->driver->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
+ }
+
+ public function tearDown()
+ {
+ $this->driver->closeConnection();
+ }
+
+ /**
+ * @expectedException LogicException
+ */
+ public function testMissingRequiredParameter()
+ {
+ new Postgres(array());
+ }
+
+ public function testDuplicateKeyError()
+ {
+ $this->assertFalse($this->driver->isDuplicateKeyError(1234));
+ $this->assertTrue($this->driver->isDuplicateKeyError(23505));
+ $this->assertTrue($this->driver->isDuplicateKeyError(23503));
+ }
+
+ public function testOperator()
+ {
+ $this->assertEquals('LIKE', $this->driver->getOperator('LIKE'));
+ $this->assertEquals('ILIKE', $this->driver->getOperator('ILIKE'));
+ $this->assertEquals('', $this->driver->getOperator('FOO'));
+ }
+
+ public function testSchemaVersion()
+ {
+ $this->assertEquals(0, $this->driver->getSchemaVersion());
+
+ $this->driver->setSchemaVersion(1);
+ $this->assertEquals(1, $this->driver->getSchemaVersion());
+
+ $this->driver->setSchemaVersion(42);
+ $this->assertEquals(42, $this->driver->getSchemaVersion());
+ }
+
+ public function testLastInsertId()
+ {
+ $this->assertEquals(0, $this->driver->getLastId());
+
+ $this->driver->getConnection()->exec('CREATE TABLE foobar (id serial PRIMARY KEY, something TEXT)');
+ $this->driver->getConnection()->exec('INSERT INTO foobar (something) VALUES (1)');
+
+ $this->assertEquals(1, $this->driver->getLastId());
+ }
+
+ public function testEscape()
+ {
+ $this->assertEquals('"foobar"', $this->driver->escape('foobar'));
+ }
+
+ public function testDatabaseVersion()
+ {
+ $this->assertStringStartsWith('9.', $this->driver->getDatabaseVersion());
+ }
+}
diff --git a/libs/picodb/tests/PostgresLobTest.php b/libs/picodb/tests/PostgresLobTest.php
new file mode 100644
index 00000000..39cf8fb0
--- /dev/null
+++ b/libs/picodb/tests/PostgresLobTest.php
@@ -0,0 +1,87 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Database;
+
+class PostgresLobTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new Database(array('driver' => 'postgres', 'hostname' => 'localhost', 'username' => 'postgres', 'password' => 'postgres', 'database' => 'picodb'));
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS large_objects');
+ $this->db->getConnection()->exec('CREATE TABLE large_objects (id VARCHAR(20), file_content bytea)');
+ }
+
+ public function testInsert()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test'));
+ $this->assertTrue($result);
+ }
+
+ public function testInsertFromString()
+ {
+ $data = 'test';
+ $result = $this->db->largeObject('large_objects')->insertFromString('file_content', $data, array('id' => 'test'));
+ $this->assertTrue($result);
+ }
+
+ public function testInsertWithOptionalParams()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__);
+ $this->assertTrue($result);
+ }
+
+ public function testFindOneColumnAsStream()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test'));
+ $this->assertTrue($result);
+
+ $fd = $this->db->largeObject('large_objects')->eq('id', 'test')->findOneColumnAsStream('file_content');
+ $contents = fread($fd, filesize(__FILE__));
+ fclose($fd);
+
+ $this->assertSame(md5(file_get_contents(__FILE__)), md5($contents));
+ }
+
+ public function testFindOneColumnAsString()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test'));
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__FILE__)), md5($contents));
+ }
+
+ public function testUpdate()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test1'));
+ $this->assertTrue($result);
+
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test2'));
+ $this->assertTrue($result);
+
+ $result = $this->db->largeObject('large_objects')->eq('id', 'test1')->updateFromFile('file_content', __DIR__.'/../LICENSE');
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test1')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__DIR__.'/../LICENSE')), md5($contents));
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test2')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__FILE__)), md5($contents));
+
+ $result = $this->db->largeObject('large_objects')->updateFromFile('file_content', __DIR__.'/../composer.json');
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test1')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__DIR__.'/../composer.json')), md5($contents));
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test2')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__DIR__.'/../composer.json')), md5($contents));
+ }
+}
diff --git a/libs/picodb/tests/PostgresSchemaTest.php b/libs/picodb/tests/PostgresSchemaTest.php
new file mode 100644
index 00000000..5ecf1cc5
--- /dev/null
+++ b/libs/picodb/tests/PostgresSchemaTest.php
@@ -0,0 +1,40 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+require_once __DIR__.'/SchemaFixture.php';
+
+class PostgresSchemaTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new PicoDb\Database(array('driver' => 'postgres', 'hostname' => 'localhost', 'username' => 'postgres', 'password' => 'postgres', 'database' => 'picodb'));
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS test1');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS test2');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
+ }
+
+ public function testMigrations()
+ {
+ $this->assertTrue($this->db->schema()->check(2));
+ $this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
+ }
+
+ public function testFailedMigrations()
+ {
+ $this->assertEquals(0, $this->db->getDriver()->getSchemaVersion());
+ $this->assertFalse($this->db->schema()->check(3));
+ $this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
+
+ $logs = $this->db->getLogMessages();
+ $this->assertNotEmpty($logs);
+ $this->assertEquals('Running migration \Schema\version_1', $logs[0]);
+ $this->assertEquals('Running migration \Schema\version_2', $logs[1]);
+ $this->assertEquals('Running migration \Schema\version_3', $logs[2]);
+ $this->assertStringStartsWith('SQLSTATE[42601]: Syntax error', $logs[3]);
+ }
+}
diff --git a/libs/picodb/tests/PostgresTableTest.php b/libs/picodb/tests/PostgresTableTest.php
new file mode 100644
index 00000000..dc852adf
--- /dev/null
+++ b/libs/picodb/tests/PostgresTableTest.php
@@ -0,0 +1,355 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Database;
+use PicoDb\Table;
+
+class PostgresTableTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new Database(array('driver' => 'postgres', 'hostname' => 'localhost', 'username' => 'postgres', 'password' => 'postgres', 'database' => 'picodb'));
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS test1');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS test2');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar_persist');
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
+ }
+
+ public function testSelect()
+ {
+ $this->assertEquals('SELECT 1 FROM "test"', $this->db->table('test')->select(1)->buildSelectQuery());
+ }
+
+ public function testColumns()
+ {
+ $this->assertEquals('SELECT "a", "b" FROM "test"', $this->db->table('test')->columns('a', 'b')->buildSelectQuery());
+ }
+
+ public function testDistinct()
+ {
+ $this->assertEquals('SELECT DISTINCT "a", "b" FROM "test"', $this->db->table('test')->distinct('a', 'b')->buildSelectQuery());
+ }
+
+ public function testGroupBy()
+ {
+ $this->assertEquals('SELECT * FROM "test" GROUP BY "a"', $this->db->table('test')->groupBy('a')->buildSelectQuery());
+ }
+
+ public function testOrderBy()
+ {
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC', $this->db->table('test')->asc('a')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC', $this->db->table('test')->orderBy('a', Table::SORT_ASC)->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC', $this->db->table('test')->desc('a')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC, "b" ASC', $this->db->table('test')->asc('a')->asc('b')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" DESC', $this->db->table('test')->desc('a')->desc('b')->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC, "b" ASC', $this->db->table('test')->orderBy('a')->orderBy('b')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->orderBy('b', Table::SORT_DESC)->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" ASC', $this->db->table('test')->desc('a')->asc('b')->buildSelectQuery());
+ }
+
+ public function testLimit()
+ {
+ $this->assertEquals('SELECT * FROM "test" LIMIT 10', $this->db->table('test')->limit(10)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test"', $this->db->table('test')->limit(null)->buildSelectQuery());
+ }
+
+ public function testOffset()
+ {
+ $this->assertEquals('SELECT * FROM "test" OFFSET 0', $this->db->table('test')->offset(0)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" OFFSET 10', $this->db->table('test')->offset(10)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test"', $this->db->table('test')->limit(null)->buildSelectQuery());
+ }
+
+ public function testLimitOffset()
+ {
+ $this->assertEquals('SELECT * FROM "test" LIMIT 2 OFFSET 0', $this->db->table('test')->offset(0)->limit(2)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" LIMIT 5 OFFSET 10', $this->db->table('test')->offset(10)->limit(5)->buildSelectQuery());
+ }
+
+ public function testSubquery()
+ {
+ $this->assertEquals('SELECT (SELECT 1 FROM "foobar" WHERE 1=1) AS "b" FROM "test"', $this->db->table('test')->subquery('SELECT 1 FROM "foobar" WHERE 1=1', 'b')->buildSelectQuery());
+ }
+
+ public function testConditionEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" = ? AND "b" = ?', $table->eq('a', 2)->eq('b', 'foobar')->buildSelectQuery());
+ $this->assertEquals(array(2, 'foobar'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionNotEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" != ?', $table->neq('a', 2)->buildSelectQuery());
+ $this->assertEquals(array(2), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionIn()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" IN (?, ?)', $table->in('a', array('b', 'c'))->buildSelectQuery());
+ $this->assertEquals(array('b', 'c'), $table->getConditionBuilder()->getValues());
+
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test"', $table->in('a', array())->buildSelectQuery());
+ $this->assertEquals(array(), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM "test" WHERE "a" IN (SELECT "c" FROM "test2" WHERE "d" = ?)',
+ $table->inSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionNotIn()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" NOT IN (?, ?)', $table->notIn('a', array('b', 'c'))->buildSelectQuery());
+ $this->assertEquals(array('b', 'c'), $table->getConditionBuilder()->getValues());
+
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test"', $table->notIn('a', array())->buildSelectQuery());
+ $this->assertEquals(array(), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionNotInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM "test" WHERE "a" NOT IN (SELECT "c" FROM "test2" WHERE "d" = ?)',
+ $table->notInSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLike()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" LIKE ?', $table->like('a', '%foobar%')->buildSelectQuery());
+ $this->assertEquals(array('%foobar%'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionILike()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" ILIKE ?', $table->ilike('a', '%foobar%')->buildSelectQuery());
+ $this->assertEquals(array('%foobar%'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionGreaterThan()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" > ?', $table->gt('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionGreaterThanOrEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" >= ?', $table->gte('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLowerThan()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" < ?', $table->lt('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLowerThanOrEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" <= ?', $table->lte('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionIsNull()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" IS NOT NULL', $table->notNull('a')->buildSelectQuery());
+ $this->assertEquals(array(), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testCustomCondition()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE a=c AND "b" = ?', $table->addCondition('a=c')->eq('b', 4)->buildSelectQuery());
+ $this->assertEquals(array(4), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testOrConditions()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" IS NOT NULL AND ("b" = ? OR "c" >= ?)', $table->notNull('a')->beginOr()->eq('b', 2)->gte('c', 5)->closeOr()->buildSelectQuery());
+ $this->assertEquals(array(2, 5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testPersist()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar_persist (id SERIAL PRIMARY KEY, a VARCHAR(10))'));
+ $this->assertSame(1, $this->db->table('foobar_persist')->persist(array('a' => 'b')));
+ }
+
+ public function testInsertUpdate()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a TEXT)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 'b')));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 'c')));
+
+ $this->assertEquals(array(array('a' => 'b'), array('a' => 'c')), $this->db->table('foobar')->findAll());
+
+ $this->assertEquals(array('b', 'c'), $this->db->table('foobar')->findAllByColumn('a'));
+
+ $this->assertEquals(array('a' => 'b'), $this->db->table('foobar')->findOne());
+
+ $this->assertEquals('b', $this->db->table('foobar')->findOneColumn('a'));
+
+ $this->assertTrue($this->db->table('foobar')->exists());
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'c')->exists());
+ $this->assertFalse($this->db->table('foobar')->eq('a', 'e')->exists());
+
+ $this->assertEquals(2, $this->db->table('foobar')->count());
+ $this->assertEquals(1, $this->db->table('foobar')->eq('a', 'c')->count());
+ $this->assertEquals(0, $this->db->table('foobar')->eq('a', 'e')->count());
+
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'c')->remove());
+ $this->assertFalse($this->db->table('foobar')->eq('a', 'e')->remove());
+
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'b')->update(array('a' => 'test')));
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'lol')->update(array('a' => 'test')));
+
+ $this->assertNotEmpty($this->db->table('foobar')->eq('a', 'test')->findOne());
+ $this->assertNull($this->db->table('foobar')->eq('a', 'lol')->findOne());
+
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'test')->save(array('a' => 'plop')));
+ $this->assertEquals(1, $this->db->table('foobar')->count());
+ }
+
+ public function testSumColumn()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (b REAL, c REAL)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('b' => 2, 'c' => 3.3)));
+
+ $this->assertTrue($this->db->table('foobar')->sumColumn('b', 2.5)->sumColumn('c', 3)->update());
+
+ $this->assertEquals(
+ array('b' => 4.5, 'c' => 6.3),
+ $this->db->table('foobar')->findOne()
+ );
+ }
+
+ public function testSum()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a INTEGER)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 2)));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 5)));
+ $this->assertEquals(7, $this->db->table('foobar')->sum('a'));
+ }
+
+ public function testIncrement()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a INTEGER DEFAULT 0, b INTEGER DEFAULT 0)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 2, 'b' => 5)));
+ $this->assertTrue($this->db->table('foobar')->eq('b', 5)->increment('a', 3));
+ $this->assertEquals(5, $this->db->table('foobar')->findOneColumn('a'));
+ }
+
+ public function testLeftJoin()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE test1 (a INTEGER NOT NULL, foreign_key INTEGER NOT NULL)'));
+ $this->assertNotFalse($this->db->execute('CREATE TABLE test2 (id INTEGER NOT NULL, b INTEGER NOT NULL)'));
+
+ $this->assertTrue($this->db->table('test2')->insert(array('id' => 42, 'b' => 2)));
+ $this->assertTrue($this->db->table('test1')->insert(array('a' => 18, 'foreign_key' => 42)));
+
+ $this->assertEquals(
+ array('a' => 18, 'b' => 2),
+ $this->db->table('test2')->columns('a', 'b')->eq('a', 18)->left('test1', 't1', 'foreign_key', 'test2', 'id')->findOne()
+ );
+
+ $this->assertEquals(
+ array('a' => 18, 'b' => 2),
+ $this->db->table('test2')->columns('a', 'b')->eq('a', 18)->join('test1', 'foreign_key', 'id')->findOne()
+ );
+
+ $this->assertEquals(
+ array('a' => 18, 'b' => 2),
+ $this->db->table('test1')->columns('a', 'b')->join('test2', 'id', 'foreign_key')->findOne()
+ );
+ }
+
+ public function testHashTable()
+ {
+ $this->assertNotFalse($this->db->execute(
+ 'CREATE TABLE foobar (
+ column1 TEXT NOT NULL UNIQUE,
+ column2 TEXT default NULL
+ )'
+ ));
+
+ $this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option1', 'column2' => 'value1')));
+ $this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option2', 'column2' => 'value2')));
+ $this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option3', 'column2' => 'value3')));
+
+ $values = array(
+ 'option1' => 'hey',
+ 'option4' => 'ho',
+ );
+
+ $this->assertTrue($this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->put($values));
+
+ $this->assertEquals(
+ array('option2' => 'value2', 'option4' => 'ho'),
+ $this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->get('option2', 'option4')
+ );
+
+ $this->assertEquals(
+ array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
+ $this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->get()
+ );
+
+ $this->assertEquals(
+ array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
+ $this->db->hashtable('foobar')->getAll('column1', 'column2')
+ );
+ }
+}
diff --git a/libs/picodb/tests/SchemaFixture.php b/libs/picodb/tests/SchemaFixture.php
new file mode 100644
index 00000000..fe4b5031
--- /dev/null
+++ b/libs/picodb/tests/SchemaFixture.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Schema;
+
+use PDO;
+
+function version_1(PDO $pdo)
+{
+ $pdo->exec('CREATE TABLE test1 (column1 TEXT)');
+}
+
+function version_2(PDO $pdo)
+{
+ $pdo->exec('CREATE TABLE test2 (column2 TEXT)');
+}
+
+function version_3(PDO $pdo)
+{
+ // Simulate an error
+ $pdo->exec('CREATE TABL');
+}
diff --git a/libs/picodb/tests/SqliteDatabaseTest.php b/libs/picodb/tests/SqliteDatabaseTest.php
new file mode 100644
index 00000000..628adb07
--- /dev/null
+++ b/libs/picodb/tests/SqliteDatabaseTest.php
@@ -0,0 +1,120 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Database;
+
+class SqliteDatabaseTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new Database(array('driver' => 'sqlite', 'filename' => ':memory:'));
+ }
+
+ public function testEscapeIdentifer()
+ {
+ $this->assertEquals('"a"', $this->db->escapeIdentifier('a'));
+ $this->assertEquals('a.b', $this->db->escapeIdentifier('a.b'));
+ $this->assertEquals('"c"."a"', $this->db->escapeIdentifier('a', 'c'));
+ $this->assertEquals('a.b', $this->db->escapeIdentifier('a.b', 'c'));
+ $this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test'));
+ $this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test', 'b'));
+ }
+
+ public function testEscapeIdentiferList()
+ {
+ $this->assertEquals(array('"c"."a"', '"c"."b"'), $this->db->escapeIdentifierList(array('a', 'b'), 'c'));
+ $this->assertEquals(array('"a"', 'd.b'), $this->db->escapeIdentifierList(array('a', 'd.b')));
+ }
+
+ public function testThatPreparedStatementWorks()
+ {
+ $this->db->getConnection()->exec('CREATE TABLE foobar (id INTEGER PRIMARY KEY, something TEXT)');
+ $this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ $this->assertEquals(1, $this->db->getLastId());
+ $this->assertEquals('a', $this->db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn());
+ }
+
+ /**
+ * @expectedException PicoDb\SQLException
+ */
+ public function testBadSQLQuery()
+ {
+ $this->db->execute('INSERT INTO foobar');
+ }
+
+ public function testDuplicateKey()
+ {
+ $this->db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
+
+ $this->assertNotFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
+ $this->assertFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
+
+ $this->assertEquals(1, $this->db->execute('SELECT COUNT(*) FROM foobar WHERE something=?', array('a'))->fetchColumn());
+ }
+
+ public function testThatTransactionReturnsAValue()
+ {
+ $this->assertEquals('a', $this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
+ $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+
+ return $db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn();
+ }));
+ }
+
+ public function testThatTransactionReturnsTrue()
+ {
+ $this->assertTrue($this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
+ $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ }));
+ }
+
+ /**
+ * @expectedException PicoDb\SQLException
+ */
+ public function testThatTransactionThrowExceptionWhenRollbacked()
+ {
+ $this->assertFalse($this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABL');
+ }));
+ }
+
+ public function testThatTransactionReturnsFalseWhithDuplicateKey()
+ {
+ $this->assertFalse($this->db->transaction(function (Database $db) {
+ $db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
+ $r1 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ $r2 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
+ return $r1 && $r2;
+ }));
+ }
+
+ public function testGetInstance()
+ {
+ Database::setInstance('main', function () {
+ return new Database(array('driver' => 'sqlite', 'filename' => ':memory:'));
+ });
+
+ $instance1 = Database::getInstance('main');
+ $instance2 = Database::getInstance('main');
+
+ $this->assertInstanceOf('PicoDb\Database', $instance1);
+ $this->assertInstanceOf('PicoDb\Database', $instance2);
+ $this->assertTrue($instance1 === $instance2);
+ }
+
+ /**
+ * @expectedException LogicException
+ */
+ public function testGetMissingInstance()
+ {
+ Database::getInstance('notfound');
+ }
+}
diff --git a/libs/picodb/tests/SqliteDriverTest.php b/libs/picodb/tests/SqliteDriverTest.php
new file mode 100644
index 00000000..9965a39c
--- /dev/null
+++ b/libs/picodb/tests/SqliteDriverTest.php
@@ -0,0 +1,70 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Driver\Sqlite;
+
+class SqliteDriverTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Driver\Sqlite
+ */
+ private $driver;
+
+ public function setUp()
+ {
+ $this->driver = new Sqlite(array('filename' => ':memory:'));
+ }
+
+ /**
+ * @expectedException LogicException
+ */
+ public function testMissingRequiredParameter()
+ {
+ new Sqlite(array());
+ }
+
+ public function testDuplicateKeyError()
+ {
+ $this->assertFalse($this->driver->isDuplicateKeyError(1234));
+ $this->assertTrue($this->driver->isDuplicateKeyError(23000));
+ }
+
+ public function testOperator()
+ {
+ $this->assertEquals('LIKE', $this->driver->getOperator('LIKE'));
+ $this->assertEquals('LIKE', $this->driver->getOperator('ILIKE'));
+ $this->assertEquals('', $this->driver->getOperator('FOO'));
+ }
+
+ public function testSchemaVersion()
+ {
+ $this->assertEquals(0, $this->driver->getSchemaVersion());
+
+ $this->driver->setSchemaVersion(1);
+ $this->assertEquals(1, $this->driver->getSchemaVersion());
+
+ $this->driver->setSchemaVersion(42);
+ $this->assertEquals(42, $this->driver->getSchemaVersion());
+ }
+
+ public function testLastInsertId()
+ {
+ $this->assertEquals(0, $this->driver->getLastId());
+
+ $this->driver->getConnection()->exec('CREATE TABLE foobar (id INTEGER PRIMARY KEY, something TEXT)');
+ $this->driver->getConnection()->exec('INSERT INTO foobar (something) VALUES (1)');
+
+ $this->assertEquals(1, $this->driver->getLastId());
+ }
+
+ public function testEscape()
+ {
+ $this->assertEquals('"foobar"', $this->driver->escape('foobar'));
+ }
+
+ public function testDatabaseVersion()
+ {
+ $this->assertStringStartsWith('3.', $this->driver->getDatabaseVersion());
+ }
+}
diff --git a/libs/picodb/tests/SqliteLobtest.php b/libs/picodb/tests/SqliteLobtest.php
new file mode 100644
index 00000000..d0889655
--- /dev/null
+++ b/libs/picodb/tests/SqliteLobtest.php
@@ -0,0 +1,84 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Database;
+
+class SqliteLobTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new Database(array('driver' => 'sqlite', 'filename' => ':memory:'));
+ $this->db->getConnection()->exec('DROP TABLE IF EXISTS large_objects');
+ $this->db->getConnection()->exec('CREATE TABLE large_objects (id VARCHAR(20), file_content BLOB)');
+ }
+
+ public function testInsert()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test'));
+ $this->assertTrue($result);
+ }
+
+ public function testInsertFromString()
+ {
+ $data = 'test';
+ $result = $this->db->largeObject('large_objects')->insertFromString('file_content', $data, array('id' => 'test'));
+ $this->assertTrue($result);
+ }
+
+ public function testInsertWithOptionalParams()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__);
+ $this->assertTrue($result);
+ }
+
+ public function testFindOneColumnAsStream()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test'));
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test')->findOneColumnAsStream('file_content');
+ $this->assertSame(md5(file_get_contents(__FILE__)), md5($contents));
+ }
+
+ public function testFindOneColumnAsString()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test'));
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__FILE__)), md5($contents));
+ }
+
+ public function testUpdate()
+ {
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test1'));
+ $this->assertTrue($result);
+
+ $result = $this->db->largeObject('large_objects')->insertFromFile('file_content', __FILE__, array('id' => 'test2'));
+ $this->assertTrue($result);
+
+ $result = $this->db->largeObject('large_objects')->eq('id', 'test1')->updateFromFile('file_content', __DIR__.'/../LICENSE');
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test1')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__DIR__.'/../LICENSE')), md5($contents));
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test2')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__FILE__)), md5($contents));
+
+ $result = $this->db->largeObject('large_objects')->updateFromFile('file_content', __DIR__.'/../composer.json');
+ $this->assertTrue($result);
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test1')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__DIR__.'/../composer.json')), md5($contents));
+
+ $contents = $this->db->largeObject('large_objects')->eq('id', 'test2')->findOneColumnAsString('file_content');
+ $this->assertSame(md5(file_get_contents(__DIR__.'/../composer.json')), md5($contents));
+ }
+}
diff --git a/libs/picodb/tests/SqliteSchemaTest.php b/libs/picodb/tests/SqliteSchemaTest.php
new file mode 100644
index 00000000..7522e10d
--- /dev/null
+++ b/libs/picodb/tests/SqliteSchemaTest.php
@@ -0,0 +1,36 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+require_once __DIR__.'/SchemaFixture.php';
+
+class SqliteSchemaTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new PicoDb\Database(array('driver' => 'sqlite', 'filename' => ':memory:'));
+ }
+
+ public function testMigrations()
+ {
+ $this->assertTrue($this->db->schema()->check(2));
+ $this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
+ }
+
+ public function testFailedMigrations()
+ {
+ $this->assertFalse($this->db->schema()->check(3));
+ $this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
+
+ $logs = $this->db->getLogMessages();
+ $this->assertNotEmpty($logs);
+ $this->assertEquals('Running migration \Schema\version_1', $logs[0]);
+ $this->assertEquals('Running migration \Schema\version_2', $logs[1]);
+ $this->assertEquals('Running migration \Schema\version_3', $logs[2]);
+ $this->assertEquals('SQLSTATE[HY000]: General error: 1 near "TABL": syntax error', $logs[3]);
+ }
+}
diff --git a/libs/picodb/tests/SqliteTableTest.php b/libs/picodb/tests/SqliteTableTest.php
new file mode 100644
index 00000000..dae718fa
--- /dev/null
+++ b/libs/picodb/tests/SqliteTableTest.php
@@ -0,0 +1,444 @@
+<?php
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+use PicoDb\Database;
+use PicoDb\Table;
+
+class SqliteTableTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @var PicoDb\Database
+ */
+ private $db;
+
+ public function setUp()
+ {
+ $this->db = new Database(array('driver' => 'sqlite', 'filename' => ':memory:'));
+ }
+
+ public function testSelect()
+ {
+ $this->assertEquals('SELECT 1 FROM "test"', $this->db->table('test')->select(1)->buildSelectQuery());
+ }
+
+ public function testColumns()
+ {
+ $this->assertEquals('SELECT "a", "b" FROM "test"', $this->db->table('test')->columns('a', 'b')->buildSelectQuery());
+ }
+
+ public function testDistinct()
+ {
+ $this->assertEquals('SELECT DISTINCT "a", "b" FROM "test"', $this->db->table('test')->distinct('a', 'b')->buildSelectQuery());
+ }
+
+ public function testGroupBy()
+ {
+ $this->assertEquals('SELECT * FROM "test" GROUP BY "a"', $this->db->table('test')->groupBy('a')->buildSelectQuery());
+ }
+
+ public function testOrderBy()
+ {
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC', $this->db->table('test')->asc('a')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC', $this->db->table('test')->orderBy('a', Table::SORT_ASC)->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC', $this->db->table('test')->desc('a')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC, "b" ASC', $this->db->table('test')->asc('a')->asc('b')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" DESC', $this->db->table('test')->desc('a')->desc('b')->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC, "b" ASC', $this->db->table('test')->orderBy('a')->orderBy('b')->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->orderBy('b', Table::SORT_DESC)->buildSelectQuery());
+
+ $this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" ASC', $this->db->table('test')->desc('a')->asc('b')->buildSelectQuery());
+ }
+
+ public function testLimit()
+ {
+ $this->assertEquals('SELECT * FROM "test" LIMIT 10', $this->db->table('test')->limit(10)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test"', $this->db->table('test')->limit(null)->buildSelectQuery());
+ }
+
+ public function testOffset()
+ {
+ $this->assertEquals('SELECT * FROM "test" OFFSET 0', $this->db->table('test')->offset(0)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" OFFSET 10', $this->db->table('test')->offset(10)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test"', $this->db->table('test')->limit(null)->buildSelectQuery());
+ }
+
+ public function testLimitOffset()
+ {
+ $this->assertEquals('SELECT * FROM "test" LIMIT 2 OFFSET 0', $this->db->table('test')->offset(0)->limit(2)->buildSelectQuery());
+ $this->assertEquals('SELECT * FROM "test" LIMIT 5 OFFSET 10', $this->db->table('test')->offset(10)->limit(5)->buildSelectQuery());
+ }
+
+ public function testSubquery()
+ {
+ $this->assertEquals('SELECT (SELECT 1 FROM "foobar" WHERE 1=1) AS "b" FROM "test"', $this->db->table('test')->subquery('SELECT 1 FROM "foobar" WHERE 1=1', 'b')->buildSelectQuery());
+ }
+
+ public function testConditionEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" = ? AND "b" = ?', $table->eq('a', 2)->eq('b', 'foobar')->buildSelectQuery());
+ $this->assertEquals(array(2, 'foobar'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionNotEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" != ?', $table->neq('a', 2)->buildSelectQuery());
+ $this->assertEquals(array(2), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionIn()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" IN (?, ?)', $table->in('a', array('b', 'c'))->buildSelectQuery());
+ $this->assertEquals(array('b', 'c'), $table->getConditionBuilder()->getValues());
+
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test"', $table->in('a', array())->buildSelectQuery());
+ $this->assertEquals(array(), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM "test" WHERE "a" IN (SELECT "c" FROM "test2" WHERE "d" = ?)',
+ $table->inSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionNotIn()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" NOT IN (?, ?)', $table->notIn('a', array('b', 'c'))->buildSelectQuery());
+ $this->assertEquals(array('b', 'c'), $table->getConditionBuilder()->getValues());
+
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test"', $table->notIn('a', array())->buildSelectQuery());
+ $this->assertEquals(array(), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionNotInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM "test" WHERE "a" NOT IN (SELECT "c" FROM "test2" WHERE "d" = ?)',
+ $table->notInSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLike()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" LIKE ?', $table->like('a', '%foobar%')->buildSelectQuery());
+ $this->assertEquals(array('%foobar%'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionILike()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" LIKE ?', $table->ilike('a', '%foobar%')->buildSelectQuery());
+ $this->assertEquals(array('%foobar%'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionGreaterThan()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" > ?', $table->gt('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionGreaterThanInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM "test" WHERE "a" > (SELECT "c" FROM "test2" WHERE "d" = ?)',
+ $table->gtSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionGreaterThanOrEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" >= ?', $table->gte('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionGreaterThanEqualInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM "test" WHERE "a" >= (SELECT "c" FROM "test2" WHERE "d" = ?)',
+ $table->gteSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLowerThan()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" < ?', $table->lt('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLowerThanInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM "test" WHERE "a" < (SELECT "c" FROM "test2" WHERE "d" = ?)',
+ $table->ltSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLowerThanOrEqual()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" <= ?', $table->lte('a', 5)->buildSelectQuery());
+ $this->assertEquals(array(5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionLowerThanEqualInSubquery()
+ {
+ $table = $this->db->table('test');
+ $subquery = $this->db->table('test2')->columns('c')->eq('d', 'e');
+
+ $this->assertEquals(
+ 'SELECT * FROM "test" WHERE "a" <= (SELECT "c" FROM "test2" WHERE "d" = ?)',
+ $table->lteSubquery('a', $subquery)->buildSelectQuery()
+ );
+
+ $this->assertEquals(array('e'), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testConditionIsNull()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" IS NOT NULL', $table->notNull('a')->buildSelectQuery());
+ $this->assertEquals(array(), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testCustomCondition()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE a=c AND "b" = ?', $table->addCondition('a=c')->eq('b', 4)->buildSelectQuery());
+ $this->assertEquals(array(4), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testOrConditions()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals('SELECT * FROM "test" WHERE "a" IS NOT NULL AND ("b" = ? OR "c" >= ?)', $table->notNull('a')->beginOr()->eq('b', 2)->gte('c', 5)->closeOr()->buildSelectQuery());
+ $this->assertEquals(array(2, 5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testMultipleOrConditions()
+ {
+ $table = $this->db->table('test');
+
+ $this->assertEquals(
+ 'SELECT * FROM "test" WHERE "a" IS NOT NULL AND ("b" = ? OR ("b" != ? OR "c" = ?) OR "c" >= ?)',
+ $table
+ ->notNull('a')
+ ->beginOr()
+ ->eq('b', 2)
+ ->beginOr()
+ ->neq('b', 6)
+ ->eq('c', 3)
+ ->closeOr()
+ ->gte('c', 5)
+ ->closeOr()
+ ->buildSelectQuery()
+ );
+
+ $this->assertEquals(array(2, 6, 3, 5), $table->getConditionBuilder()->getValues());
+ }
+
+ public function testPersist()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar_persist (id INTEGER PRIMARY KEY, a TEXT)'));
+ $this->assertSame(1, $this->db->table('foobar_persist')->persist(array('a' => 'b')));
+ }
+
+ public function testInsertUpdate()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a TEXT)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 'b')));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 'c')));
+
+ $this->assertEquals(array(array('a' => 'b'), array('a' => 'c')), $this->db->table('foobar')->findAll());
+
+ $this->assertEquals(array('b', 'c'), $this->db->table('foobar')->findAllByColumn('a'));
+
+ $this->assertEquals(array('a' => 'b'), $this->db->table('foobar')->findOne());
+
+ $this->assertEquals('b', $this->db->table('foobar')->findOneColumn('a'));
+
+ $this->assertTrue($this->db->table('foobar')->exists());
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'c')->exists());
+ $this->assertFalse($this->db->table('foobar')->eq('a', 'e')->exists());
+
+ $this->assertEquals(2, $this->db->table('foobar')->count());
+ $this->assertEquals(1, $this->db->table('foobar')->eq('a', 'c')->count());
+ $this->assertEquals(0, $this->db->table('foobar')->eq('a', 'e')->count());
+
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'c')->remove());
+ $this->assertFalse($this->db->table('foobar')->eq('a', 'e')->remove());
+
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'b')->update(array('a' => 'test')));
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'lol')->update(array('a' => 'test')));
+
+ $this->assertNotEmpty($this->db->table('foobar')->eq('a', 'test')->findOne());
+ $this->assertNull($this->db->table('foobar')->eq('a', 'lol')->findOne());
+
+ $this->assertTrue($this->db->table('foobar')->eq('a', 'test')->save(array('a' => 'plop')));
+ $this->assertEquals(1, $this->db->table('foobar')->count());
+ }
+
+ public function testSumColumn()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (b REAL, c REAL)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('b' => 2, 'c' => 3.3)));
+
+ $this->assertTrue($this->db->table('foobar')->sumColumn('b', 2.5)->sumColumn('c', 3)->update());
+
+ $this->assertEquals(
+ array('b' => 4.5, 'c' => 6.3),
+ $this->db->table('foobar')->findOne()
+ );
+ }
+
+ public function testCallback()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a TEXT)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 'b')));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 'c')));
+
+ $func = function () {
+ return array('test');
+ };
+
+ $this->assertEquals(array('test'), $this->db->table('foobar')->callback($func)->findAll());
+ $this->assertEquals(array('plop'), $this->db->table('foobar')->callback(array($this, 'myCallback'))->findAll());
+ }
+
+ public function myCallback(array $records)
+ {
+ $this->assertEquals(array(array('a' => 'b'), array('a' => 'c')), $records);
+ return array('plop');
+ }
+
+ public function testSum()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a INTEGER)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 2)));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 5)));
+ $this->assertEquals(7, $this->db->table('foobar')->sum('a'));
+ }
+
+ public function testIncrement()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a INTEGER DEFAULT 0, b INTEGER DEFAULT 0)'));
+ $this->assertTrue($this->db->table('foobar')->insert(array('a' => 2, 'b' => 5)));
+ $this->assertTrue($this->db->table('foobar')->eq('b', 5)->increment('a', 3));
+ $this->assertEquals(5, $this->db->table('foobar')->findOneColumn('a'));
+ }
+
+ public function testLeftJoin()
+ {
+ $this->assertNotFalse($this->db->execute('CREATE TABLE test1 (a INTEGER NOT NULL, foreign_key INTEGER NOT NULL)'));
+ $this->assertNotFalse($this->db->execute('CREATE TABLE test2 (id INTEGER NOT NULL, b INTEGER NOT NULL)'));
+
+ $this->assertTrue($this->db->table('test2')->insert(array('id' => 42, 'b' => 2)));
+ $this->assertTrue($this->db->table('test1')->insert(array('a' => 18, 'foreign_key' => 42)));
+
+ $this->assertEquals(
+ array('a' => 18, 'b' => 2),
+ $this->db->table('test2')->columns('a', 'b')->eq('a', 18)->left('test1', 't1', 'foreign_key', 'test2', 'id')->findOne()
+ );
+
+ $this->assertEquals(
+ array('a' => 18, 'b' => 2),
+ $this->db->table('test2')->columns('a', 'b')->eq('a', 18)->join('test1', 'foreign_key', 'id')->findOne()
+ );
+
+ $this->assertEquals(
+ array('a' => 18, 'b' => 2),
+ $this->db->table('test1')->columns('a', 'b')->join('test2', 'id', 'foreign_key')->findOne()
+ );
+ }
+
+ public function testHashTable()
+ {
+ $this->assertNotFalse($this->db->execute(
+ 'CREATE TABLE toto (
+ column1 TEXT NOT NULL UNIQUE,
+ column2 TEXT default NULL
+ )'
+ ));
+
+ $this->assertTrue($this->db->table('toto')->insert(array('column1' => 'option1', 'column2' => 'value1')));
+ $this->assertTrue($this->db->table('toto')->insert(array('column1' => 'option2', 'column2' => 'value2')));
+ $this->assertTrue($this->db->table('toto')->insert(array('column1' => 'option3', 'column2' => 'value3')));
+
+ $values = array(
+ 'option1' => 'hey',
+ 'option4' => 'ho',
+ );
+
+ $this->assertTrue($this->db->hashtable('toto')->columnKey('column1')->columnValue('column2')->put($values));
+
+ $this->assertEquals(
+ array('option2' => 'value2', 'option4' => 'ho'),
+ $this->db->hashtable('toto')->columnKey('column1')->columnValue('column2')->get('option2', 'option4')
+ );
+
+ $this->assertEquals(
+ array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
+ $this->db->hashtable('toto')->columnKey('column1')->columnValue('column2')->get()
+ );
+
+ $this->assertEquals(
+ array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
+ $this->db->hashtable('toto')->getAll('column1', 'column2')
+ );
+ }
+}
diff --git a/libs/picodb/tests/UrlParserTest.php b/libs/picodb/tests/UrlParserTest.php
new file mode 100644
index 00000000..ede3d3a5
--- /dev/null
+++ b/libs/picodb/tests/UrlParserTest.php
@@ -0,0 +1,46 @@
+<?php
+
+use PicoDb\UrlParser;
+
+require_once __DIR__.'/../../../vendor/autoload.php';
+
+class UrlParserTest extends PHPUnit_Framework_TestCase
+{
+ public function testParseUrl()
+ {
+ $urlParser = UrlParser::getInstance();
+ $this->assertFalse($urlParser->isEnvironmentVariableDefined());
+
+ $settings = $urlParser->getSettings('postgres://user:pass@hostname:6212/db');
+ $this->assertEquals('postgres', $settings['driver']);
+ $this->assertEquals('user', $settings['username']);
+ $this->assertEquals('pass', $settings['password']);
+ $this->assertEquals('hostname', $settings['hostname']);
+ $this->assertEquals('6212', $settings['port']);
+ $this->assertEquals('db', $settings['database']);
+ }
+
+ public function testParseWrongUrl()
+ {
+ $urlParser = new UrlParser();
+ $settings = $urlParser->getSettings('/');
+ $this->assertEmpty($settings['driver']);
+ $this->assertFalse($urlParser->isEnvironmentVariableDefined());
+ }
+
+ public function testGetUrlFromEnvironment()
+ {
+ putenv('DATABASE_URL=postgres://user:pass@hostname:6212/db');
+
+ $urlParser = new UrlParser();
+ $this->assertTrue($urlParser->isEnvironmentVariableDefined());
+
+ $settings = $urlParser->getSettings();
+ $this->assertEquals('postgres', $settings['driver']);
+ $this->assertEquals('user', $settings['username']);
+ $this->assertEquals('pass', $settings['password']);
+ $this->assertEquals('hostname', $settings['hostname']);
+ $this->assertEquals('6212', $settings['port']);
+ $this->assertEquals('db', $settings['database']);
+ }
+}
diff --git a/vendor/aferrandini/phpqrcode/.gitignore b/vendor/aferrandini/phpqrcode/.gitignore
deleted file mode 100644
index 485dee64..00000000
--- a/vendor/aferrandini/phpqrcode/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-.idea
diff --git a/vendor/aferrandini/phpqrcode/VERSION b/vendor/aferrandini/phpqrcode/VERSION
deleted file mode 100755
index e0d3a2ee..00000000
--- a/vendor/aferrandini/phpqrcode/VERSION
+++ /dev/null
@@ -1,2 +0,0 @@
-1.1.5
-2012021604
diff --git a/vendor/aferrandini/phpqrcode/composer.json b/vendor/aferrandini/phpqrcode/composer.json
deleted file mode 100644
index ff793567..00000000
--- a/vendor/aferrandini/phpqrcode/composer.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "aferrandini/phpqrcode",
- "description": "PHPQRCode porting and changed for PHP 5.3 compatibility",
- "keywords": ["php", "qrcode", "barcode"],
- "homepage": "https://github.com/aferrandini/PHPQRCode",
- "type": "library",
- "license": "MIT",
- "authors": [
- {
- "name": "Ariel Ferrandini",
- "email": "arielferrandini@gmail.com",
- "homepage": "http://www.ferrandini.com/"
- }
- ],
- "require": {
- "php": ">=5.3.0"
- },
- "autoload": {
- "psr-0": { "PHPQRCode": "lib/" }
- }
-}
diff --git a/vendor/aferrandini/phpqrcode/readme.md b/vendor/aferrandini/phpqrcode/readme.md
deleted file mode 100755
index e8f2f5ab..00000000
--- a/vendor/aferrandini/phpqrcode/readme.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# PHP QRCode Library
-
-To install this library please follow the next steps:
-
-## Install the library using `composer`:
-
-Add the required module to your `composer.json` file:
-
- {
- "require": {
- ...
- "aferrandini/phpqrcode": "1.0.1"
- ...
- }
- }
-
-Then run the command `composer update`.
-
-
-## Usage
-
-Sample code:
-
- \PHPQRCode\QRcode::png("Test", "/tmp/qrcode.png", 'L', 4, 2);
-
-This code will generate a PNG file on '/tmp/qrcode.png' with a QRCode that contains the word 'Test'.
-
-## Acknowledgements
-
-This library is an import of PHP QR Code by Dominik Dzienia that you can find at http://phpqrcode.sourceforge.net
-
-Based on C libqrencode library (ver. 3.1.1), Copyright (C) 2006-2010 by Kentaro Fukuchi
-http://megaui.net/fukuchi/works/qrencode/index.en.html
-
-QR Code is registered trademarks of DENSO WAVE INCORPORATED in JAPAN and other countries.
-
-Reed-Solomon code encoder is written by Phil Karn, KA9Q. Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index c3410348..07f96725 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -6,7 +6,13 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
+ 'A' => $baseDir . '/libs/jsonrpc/tests/ProcedureHandlerTest.php',
+ 'B' => $baseDir . '/libs/jsonrpc/tests/ProcedureHandlerTest.php',
'Base32\\Base32' => $vendorDir . '/christian-riesen/base32/src/Base32.php',
+ 'C' => $baseDir . '/libs/jsonrpc/tests/ServerProtocolTest.php',
+ 'ClassWithBeforeMethod' => $baseDir . '/libs/jsonrpc/tests/ProcedureHandlerTest.php',
+ 'ClientTest' => $baseDir . '/libs/jsonrpc/tests/ClientTest.php',
+ 'DummyMiddleware' => $baseDir . '/libs/jsonrpc/tests/ServerTest.php',
'Eluceo\\iCal\\Component' => $vendorDir . '/eluceo/ical/src/Eluceo/iCal/Component.php',
'Eluceo\\iCal\\Component\\Alarm' => $vendorDir . '/eluceo/ical/src/Eluceo/iCal/Component/Alarm.php',
'Eluceo\\iCal\\Component\\Calendar' => $vendorDir . '/eluceo/ical/src/Eluceo/iCal/Component/Calendar.php',
@@ -29,35 +35,42 @@ return array(
'Eluceo\\iCal\\Util\\ComponentUtil' => $vendorDir . '/eluceo/ical/src/Eluceo/iCal/Util/ComponentUtil.php',
'Eluceo\\iCal\\Util\\DateUtil' => $vendorDir . '/eluceo/ical/src/Eluceo/iCal/Util/DateUtil.php',
'Eluceo\\iCal\\Util\\PropertyValueUtil' => $vendorDir . '/eluceo/ical/src/Eluceo/iCal/Util/PropertyValueUtil.php',
+ 'FirstMiddleware' => $baseDir . '/libs/jsonrpc/tests/MiddlewareHandlerTest.php',
'Gregwar\\Captcha\\CaptchaBuilder' => $vendorDir . '/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php',
'Gregwar\\Captcha\\CaptchaBuilderInterface' => $vendorDir . '/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilderInterface.php',
'Gregwar\\Captcha\\ImageFileHandler' => $vendorDir . '/gregwar/captcha/src/Gregwar/Captcha/ImageFileHandler.php',
'Gregwar\\Captcha\\PhraseBuilder' => $vendorDir . '/gregwar/captcha/src/Gregwar/Captcha/PhraseBuilder.php',
'Gregwar\\Captcha\\PhraseBuilderInterface' => $vendorDir . '/gregwar/captcha/src/Gregwar/Captcha/PhraseBuilderInterface.php',
- 'JsonRPC\\Client' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Client.php',
- 'JsonRPC\\Exception\\AccessDeniedException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Exception/AccessDeniedException.php',
- 'JsonRPC\\Exception\\AuthenticationFailureException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Exception/AuthenticationFailureException.php',
- 'JsonRPC\\Exception\\ConnectionFailureException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Exception/ConnectionFailureException.php',
- 'JsonRPC\\Exception\\InvalidJsonFormatException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonFormatException.php',
- 'JsonRPC\\Exception\\InvalidJsonRpcFormatException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php',
- 'JsonRPC\\Exception\\ResponseEncodingFailureException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php',
- 'JsonRPC\\Exception\\ResponseException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Exception/ResponseException.php',
- 'JsonRPC\\Exception\\ServerErrorException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Exception/ServerErrorException.php',
- 'JsonRPC\\HttpClient' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/HttpClient.php',
- 'JsonRPC\\MiddlewareHandler' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/MiddlewareHandler.php',
- 'JsonRPC\\MiddlewareInterface' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/MiddlewareInterface.php',
- 'JsonRPC\\ProcedureHandler' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/ProcedureHandler.php',
- 'JsonRPC\\Request\\BatchRequestParser' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Request/BatchRequestParser.php',
- 'JsonRPC\\Request\\RequestBuilder' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Request/RequestBuilder.php',
- 'JsonRPC\\Request\\RequestParser' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Request/RequestParser.php',
- 'JsonRPC\\Response\\ResponseBuilder' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Response/ResponseBuilder.php',
- 'JsonRPC\\Response\\ResponseParser' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Response/ResponseParser.php',
- 'JsonRPC\\Server' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Server.php',
- 'JsonRPC\\Validator\\HostValidator' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Validator/HostValidator.php',
- 'JsonRPC\\Validator\\JsonEncodingValidator' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Validator/JsonEncodingValidator.php',
- 'JsonRPC\\Validator\\JsonFormatValidator' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Validator/JsonFormatValidator.php',
- 'JsonRPC\\Validator\\RpcFormatValidator' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Validator/RpcFormatValidator.php',
- 'JsonRPC\\Validator\\UserValidator' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Validator/UserValidator.php',
+ 'HostValidatorTest' => $baseDir . '/libs/jsonrpc/tests/Validator/HostValidatorTest.php',
+ 'JsonEncodingValidatorTest' => $baseDir . '/libs/jsonrpc/tests/Validator/JsonEncodingValidatorTest.php',
+ 'JsonFormatValidatorTest' => $baseDir . '/libs/jsonrpc/tests/Validator/JsonFormatValidatorTest.php',
+ 'JsonRPC\\Client' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Client.php',
+ 'JsonRPC\\Exception\\AccessDeniedException' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Exception/AccessDeniedException.php',
+ 'JsonRPC\\Exception\\AuthenticationFailureException' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Exception/AuthenticationFailureException.php',
+ 'JsonRPC\\Exception\\ConnectionFailureException' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Exception/ConnectionFailureException.php',
+ 'JsonRPC\\Exception\\InvalidJsonFormatException' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonFormatException.php',
+ 'JsonRPC\\Exception\\InvalidJsonRpcFormatException' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php',
+ 'JsonRPC\\Exception\\ResponseEncodingFailureException' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php',
+ 'JsonRPC\\Exception\\ResponseException' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Exception/ResponseException.php',
+ 'JsonRPC\\Exception\\RpcCallFailedException' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Exception/RpcCallFailedException.php',
+ 'JsonRPC\\Exception\\ServerErrorException' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Exception/ServerErrorException.php',
+ 'JsonRPC\\HttpClient' => $baseDir . '/libs/jsonrpc/src/JsonRPC/HttpClient.php',
+ 'JsonRPC\\HttpClientTest' => $baseDir . '/libs/jsonrpc/tests/HttpClientTest.php',
+ 'JsonRPC\\MiddlewareHandler' => $baseDir . '/libs/jsonrpc/src/JsonRPC/MiddlewareHandler.php',
+ 'JsonRPC\\MiddlewareInterface' => $baseDir . '/libs/jsonrpc/src/JsonRPC/MiddlewareInterface.php',
+ 'JsonRPC\\ProcedureHandler' => $baseDir . '/libs/jsonrpc/src/JsonRPC/ProcedureHandler.php',
+ 'JsonRPC\\Request\\BatchRequestParser' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php',
+ 'JsonRPC\\Request\\RequestBuilder' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Request/RequestBuilder.php',
+ 'JsonRPC\\Request\\RequestParser' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Request/RequestParser.php',
+ 'JsonRPC\\Response\\HeaderMockTest' => $baseDir . '/libs/jsonrpc/tests/Response/HeaderMockTest.php',
+ 'JsonRPC\\Response\\ResponseBuilder' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Response/ResponseBuilder.php',
+ 'JsonRPC\\Response\\ResponseParser' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Response/ResponseParser.php',
+ 'JsonRPC\\Server' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Server.php',
+ 'JsonRPC\\Validator\\HostValidator' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Validator/HostValidator.php',
+ 'JsonRPC\\Validator\\JsonEncodingValidator' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Validator/JsonEncodingValidator.php',
+ 'JsonRPC\\Validator\\JsonFormatValidator' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Validator/JsonFormatValidator.php',
+ 'JsonRPC\\Validator\\RpcFormatValidator' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Validator/RpcFormatValidator.php',
+ 'JsonRPC\\Validator\\UserValidator' => $baseDir . '/libs/jsonrpc/src/JsonRPC/Validator/UserValidator.php',
'Kanboard\\Action\\Base' => $baseDir . '/app/Action/Base.php',
'Kanboard\\Action\\CommentCreation' => $baseDir . '/app/Action/CommentCreation.php',
'Kanboard\\Action\\CommentCreationMoveTaskColumn' => $baseDir . '/app/Action/CommentCreationMoveTaskColumn.php',
@@ -671,48 +684,55 @@ return array(
'Kanboard\\Validator\\TaskLinkValidator' => $baseDir . '/app/Validator/TaskLinkValidator.php',
'Kanboard\\Validator\\TaskValidator' => $baseDir . '/app/Validator/TaskValidator.php',
'Kanboard\\Validator\\UserValidator' => $baseDir . '/app/Validator/UserValidator.php',
+ 'MiddlewareHandlerTest' => $baseDir . '/libs/jsonrpc/tests/MiddlewareHandlerTest.php',
+ 'MyException' => $baseDir . '/libs/jsonrpc/tests/ServerTest.php',
+ 'MysqlDatabaseTest' => $baseDir . '/libs/picodb/tests/MysqlDatabaseTest.php',
+ 'MysqlDriverTest' => $baseDir . '/libs/picodb/tests/MysqlDriverTest.php',
+ 'MysqlLobTest' => $baseDir . '/libs/picodb/tests/MysqlLobTest.php',
+ 'MysqlSchemaTest' => $baseDir . '/libs/picodb/tests/MysqlSchemaTest.php',
+ 'MysqlTableTest' => $baseDir . '/libs/picodb/tests/MysqlTableTest.php',
'Otp\\GoogleAuthenticator' => $vendorDir . '/christian-riesen/otp/src/Otp/GoogleAuthenticator.php',
'Otp\\Otp' => $vendorDir . '/christian-riesen/otp/src/Otp/Otp.php',
'Otp\\OtpInterface' => $vendorDir . '/christian-riesen/otp/src/Otp/OtpInterface.php',
- 'PHPQRCode' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode.php',
- 'PHPQRCode\\Autoloader' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/Autoloader.php',
- 'PHPQRCode\\Constants' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/Constants.php',
- 'PHPQRCode\\FrameFiller' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/FrameFiller.php',
- 'PHPQRCode\\QRbitstream' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRbitstream.php',
- 'PHPQRCode\\QRcode' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRcode.php',
- 'PHPQRCode\\QRencode' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRencode.php',
- 'PHPQRCode\\QRimage' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRimage.php',
- 'PHPQRCode\\QRinput' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRinput.php',
- 'PHPQRCode\\QRinputItem' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRinputItem.php',
- 'PHPQRCode\\QRmask' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRmask.php',
- 'PHPQRCode\\QRrawcode' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRrawcode.php',
- 'PHPQRCode\\QRrs' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRrs.php',
- 'PHPQRCode\\QRrsItem' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRrsItem.php',
- 'PHPQRCode\\QRrsblock' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRrsblock.php',
- 'PHPQRCode\\QRspec' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRspec.php',
- 'PHPQRCode\\QRsplit' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRsplit.php',
- 'PHPQRCode\\QRstr' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRstr.php',
- 'PHPQRCode\\QRtools' => $vendorDir . '/aferrandini/phpqrcode/lib/PHPQRCode/QRtools.php',
+ 'PHPQRCode' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode.php',
+ 'PHPQRCode\\Autoloader' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/Autoloader.php',
+ 'PHPQRCode\\Constants' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/Constants.php',
+ 'PHPQRCode\\FrameFiller' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/FrameFiller.php',
+ 'PHPQRCode\\QRbitstream' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRbitstream.php',
+ 'PHPQRCode\\QRcode' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRcode.php',
+ 'PHPQRCode\\QRencode' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRencode.php',
+ 'PHPQRCode\\QRimage' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRimage.php',
+ 'PHPQRCode\\QRinput' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRinput.php',
+ 'PHPQRCode\\QRinputItem' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRinputItem.php',
+ 'PHPQRCode\\QRmask' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRmask.php',
+ 'PHPQRCode\\QRrawcode' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRrawcode.php',
+ 'PHPQRCode\\QRrs' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRrs.php',
+ 'PHPQRCode\\QRrsItem' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRrsItem.php',
+ 'PHPQRCode\\QRrsblock' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRrsblock.php',
+ 'PHPQRCode\\QRspec' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRspec.php',
+ 'PHPQRCode\\QRsplit' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRsplit.php',
+ 'PHPQRCode\\QRstr' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRstr.php',
+ 'PHPQRCode\\QRtools' => $baseDir . '/libs/phpqrcode/lib/PHPQRCode/QRtools.php',
'Parsedown' => $vendorDir . '/erusev/parsedown/Parsedown.php',
- 'PicoDb\\Builder\\BaseBuilder' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Builder/BaseBuilder.php',
- 'PicoDb\\Builder\\ConditionBuilder' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Builder/ConditionBuilder.php',
- 'PicoDb\\Builder\\InsertBuilder' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Builder/InsertBuilder.php',
- 'PicoDb\\Builder\\OrConditionBuilder' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Builder/OrConditionBuilder.php',
- 'PicoDb\\Builder\\UpdateBuilder' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Builder/UpdateBuilder.php',
- 'PicoDb\\Database' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Database.php',
- 'PicoDb\\DriverFactory' => $vendorDir . '/fguillot/picodb/lib/PicoDb/DriverFactory.php',
- 'PicoDb\\Driver\\Base' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Driver/Base.php',
- 'PicoDb\\Driver\\Mssql' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Driver/Mssql.php',
- 'PicoDb\\Driver\\Mysql' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Driver/Mysql.php',
- 'PicoDb\\Driver\\Postgres' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Driver/Postgres.php',
- 'PicoDb\\Driver\\Sqlite' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Driver/Sqlite.php',
- 'PicoDb\\Hashtable' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Hashtable.php',
- 'PicoDb\\LargeObject' => $vendorDir . '/fguillot/picodb/lib/PicoDb/LargeObject.php',
- 'PicoDb\\SQLException' => $vendorDir . '/fguillot/picodb/lib/PicoDb/SQLException.php',
- 'PicoDb\\Schema' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Schema.php',
- 'PicoDb\\StatementHandler' => $vendorDir . '/fguillot/picodb/lib/PicoDb/StatementHandler.php',
- 'PicoDb\\Table' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Table.php',
- 'PicoDb\\UrlParser' => $vendorDir . '/fguillot/picodb/lib/PicoDb/UrlParser.php',
+ 'PicoDb\\Builder\\BaseBuilder' => $baseDir . '/libs/picodb/lib/PicoDb/Builder/BaseBuilder.php',
+ 'PicoDb\\Builder\\ConditionBuilder' => $baseDir . '/libs/picodb/lib/PicoDb/Builder/ConditionBuilder.php',
+ 'PicoDb\\Builder\\InsertBuilder' => $baseDir . '/libs/picodb/lib/PicoDb/Builder/InsertBuilder.php',
+ 'PicoDb\\Builder\\OrConditionBuilder' => $baseDir . '/libs/picodb/lib/PicoDb/Builder/OrConditionBuilder.php',
+ 'PicoDb\\Builder\\UpdateBuilder' => $baseDir . '/libs/picodb/lib/PicoDb/Builder/UpdateBuilder.php',
+ 'PicoDb\\Database' => $baseDir . '/libs/picodb/lib/PicoDb/Database.php',
+ 'PicoDb\\DriverFactory' => $baseDir . '/libs/picodb/lib/PicoDb/DriverFactory.php',
+ 'PicoDb\\Driver\\Base' => $baseDir . '/libs/picodb/lib/PicoDb/Driver/Base.php',
+ 'PicoDb\\Driver\\Mssql' => $baseDir . '/libs/picodb/lib/PicoDb/Driver/Mssql.php',
+ 'PicoDb\\Driver\\Mysql' => $baseDir . '/libs/picodb/lib/PicoDb/Driver/Mysql.php',
+ 'PicoDb\\Driver\\Postgres' => $baseDir . '/libs/picodb/lib/PicoDb/Driver/Postgres.php',
+ 'PicoDb\\Driver\\Sqlite' => $baseDir . '/libs/picodb/lib/PicoDb/Driver/Sqlite.php',
+ 'PicoDb\\Hashtable' => $baseDir . '/libs/picodb/lib/PicoDb/Hashtable.php',
+ 'PicoDb\\LargeObject' => $baseDir . '/libs/picodb/lib/PicoDb/LargeObject.php',
+ 'PicoDb\\SQLException' => $baseDir . '/libs/picodb/lib/PicoDb/SQLException.php',
+ 'PicoDb\\Schema' => $baseDir . '/libs/picodb/lib/PicoDb/Schema.php',
+ 'PicoDb\\StatementHandler' => $baseDir . '/libs/picodb/lib/PicoDb/StatementHandler.php',
+ 'PicoDb\\Table' => $baseDir . '/libs/picodb/lib/PicoDb/Table.php',
+ 'PicoDb\\UrlParser' => $baseDir . '/libs/picodb/lib/PicoDb/UrlParser.php',
'Pimple\\Container' => $vendorDir . '/pimple/pimple/src/Pimple/Container.php',
'Pimple\\Exception\\ExpectedInvokableException' => $vendorDir . '/pimple/pimple/src/Pimple/Exception/ExpectedInvokableException.php',
'Pimple\\Exception\\FrozenServiceException' => $vendorDir . '/pimple/pimple/src/Pimple/Exception/FrozenServiceException.php',
@@ -731,6 +751,12 @@ return array(
'Pimple\\Tests\\Psr11\\ContainerTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Psr11/ContainerTest.php',
'Pimple\\Tests\\Psr11\\ServiceLocatorTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Psr11/ServiceLocatorTest.php',
'Pimple\\Tests\\ServiceIteratorTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/ServiceIteratorTest.php',
+ 'PostgresDatabaseTest' => $baseDir . '/libs/picodb/tests/PostgresDatabaseTest.php',
+ 'PostgresDriverTest' => $baseDir . '/libs/picodb/tests/PostgresDriverTest.php',
+ 'PostgresLobTest' => $baseDir . '/libs/picodb/tests/PostgresLobTest.php',
+ 'PostgresSchemaTest' => $baseDir . '/libs/picodb/tests/PostgresSchemaTest.php',
+ 'PostgresTableTest' => $baseDir . '/libs/picodb/tests/PostgresTableTest.php',
+ 'ProcedureHandlerTest' => $baseDir . '/libs/jsonrpc/tests/ProcedureHandlerTest.php',
'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php',
'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php',
'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php',
@@ -744,6 +770,13 @@ return array(
'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
+ 'RequestBuilderTest' => $baseDir . '/libs/jsonrpc/tests/Request/RequestBuilderTest.php',
+ 'ResponseBuilderTest' => $baseDir . '/libs/jsonrpc/tests/Response/ResponseBuilderTest.php',
+ 'ResponseParserTest' => $baseDir . '/libs/jsonrpc/tests/Response/ResponseParserTest.php',
+ 'RpcFormatValidatorTest' => $baseDir . '/libs/jsonrpc/tests/Validator/RpcFormatValidatorTest.php',
+ 'SecondMiddleware' => $baseDir . '/libs/jsonrpc/tests/MiddlewareHandlerTest.php',
+ 'ServerProtocolTest' => $baseDir . '/libs/jsonrpc/tests/ServerProtocolTest.php',
+ 'ServerTest' => $baseDir . '/libs/jsonrpc/tests/ServerTest.php',
'SimpleQueue\\Adapter\\AmqpQueueAdapter' => $baseDir . '/libs/SimpleQueue/Adapter/AmqpQueueAdapter.php',
'SimpleQueue\\Adapter\\BeanstalkQueueAdapter' => $baseDir . '/libs/SimpleQueue/Adapter/BeanstalkQueueAdapter.php',
'SimpleQueue\\Exception\\NotSupportedException' => $baseDir . '/libs/SimpleQueue/Exception/NotSupportedException.php',
@@ -772,6 +805,11 @@ return array(
'SimpleValidator\\Validators\\Range' => $baseDir . '/libs/SimpleValidator/Validators/Range.php',
'SimpleValidator\\Validators\\Required' => $baseDir . '/libs/SimpleValidator/Validators/Required.php',
'SimpleValidator\\Validators\\Unique' => $baseDir . '/libs/SimpleValidator/Validators/Unique.php',
+ 'SqliteDatabaseTest' => $baseDir . '/libs/picodb/tests/SqliteDatabaseTest.php',
+ 'SqliteDriverTest' => $baseDir . '/libs/picodb/tests/SqliteDriverTest.php',
+ 'SqliteLobTest' => $baseDir . '/libs/picodb/tests/SqliteLobtest.php',
+ 'SqliteSchemaTest' => $baseDir . '/libs/picodb/tests/SqliteSchemaTest.php',
+ 'SqliteTableTest' => $baseDir . '/libs/picodb/tests/SqliteTableTest.php',
'Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php',
'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php',
'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php',
@@ -901,4 +939,6 @@ return array(
'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php',
'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php',
'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
+ 'UrlParserTest' => $baseDir . '/libs/picodb/tests/UrlParserTest.php',
+ 'UserValidatorTest' => $baseDir . '/libs/jsonrpc/tests/Validator/UserValidatorTest.php',
);
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
index c40ec570..9bc8799c 100644
--- a/vendor/composer/autoload_namespaces.php
+++ b/vendor/composer/autoload_namespaces.php
@@ -7,11 +7,8 @@ $baseDir = dirname($vendorDir);
return array(
'Pimple' => array($vendorDir . '/pimple/pimple/src'),
- 'PicoDb' => array($vendorDir . '/fguillot/picodb/lib'),
'Parsedown' => array($vendorDir . '/erusev/parsedown'),
- 'PHPQRCode' => array($vendorDir . '/aferrandini/phpqrcode/lib'),
'Otp' => array($vendorDir . '/christian-riesen/otp/src'),
- 'JsonRPC' => array($vendorDir . '/fguillot/json-rpc/src'),
'Eluceo\\iCal' => array($vendorDir . '/eluceo/ical/src'),
'' => array($baseDir . '/libs'),
);
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index b9e57895..8cf48666 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -91,18 +91,10 @@ class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e
array (
0 => __DIR__ . '/..' . '/pimple/pimple/src',
),
- 'PicoDb' =>
- array (
- 0 => __DIR__ . '/..' . '/fguillot/picodb/lib',
- ),
'Parsedown' =>
array (
0 => __DIR__ . '/..' . '/erusev/parsedown',
),
- 'PHPQRCode' =>
- array (
- 0 => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib',
- ),
),
'O' =>
array (
@@ -111,13 +103,6 @@ class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e
0 => __DIR__ . '/..' . '/christian-riesen/otp/src',
),
),
- 'J' =>
- array (
- 'JsonRPC' =>
- array (
- 0 => __DIR__ . '/..' . '/fguillot/json-rpc/src',
- ),
- ),
'E' =>
array (
'Eluceo\\iCal' =>
@@ -132,7 +117,13 @@ class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e
);
public static $classMap = array (
+ 'A' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ProcedureHandlerTest.php',
+ 'B' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ProcedureHandlerTest.php',
'Base32\\Base32' => __DIR__ . '/..' . '/christian-riesen/base32/src/Base32.php',
+ 'C' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ServerProtocolTest.php',
+ 'ClassWithBeforeMethod' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ProcedureHandlerTest.php',
+ 'ClientTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ClientTest.php',
+ 'DummyMiddleware' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ServerTest.php',
'Eluceo\\iCal\\Component' => __DIR__ . '/..' . '/eluceo/ical/src/Eluceo/iCal/Component.php',
'Eluceo\\iCal\\Component\\Alarm' => __DIR__ . '/..' . '/eluceo/ical/src/Eluceo/iCal/Component/Alarm.php',
'Eluceo\\iCal\\Component\\Calendar' => __DIR__ . '/..' . '/eluceo/ical/src/Eluceo/iCal/Component/Calendar.php',
@@ -155,35 +146,42 @@ class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e
'Eluceo\\iCal\\Util\\ComponentUtil' => __DIR__ . '/..' . '/eluceo/ical/src/Eluceo/iCal/Util/ComponentUtil.php',
'Eluceo\\iCal\\Util\\DateUtil' => __DIR__ . '/..' . '/eluceo/ical/src/Eluceo/iCal/Util/DateUtil.php',
'Eluceo\\iCal\\Util\\PropertyValueUtil' => __DIR__ . '/..' . '/eluceo/ical/src/Eluceo/iCal/Util/PropertyValueUtil.php',
+ 'FirstMiddleware' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/MiddlewareHandlerTest.php',
'Gregwar\\Captcha\\CaptchaBuilder' => __DIR__ . '/..' . '/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php',
'Gregwar\\Captcha\\CaptchaBuilderInterface' => __DIR__ . '/..' . '/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilderInterface.php',
'Gregwar\\Captcha\\ImageFileHandler' => __DIR__ . '/..' . '/gregwar/captcha/src/Gregwar/Captcha/ImageFileHandler.php',
'Gregwar\\Captcha\\PhraseBuilder' => __DIR__ . '/..' . '/gregwar/captcha/src/Gregwar/Captcha/PhraseBuilder.php',
'Gregwar\\Captcha\\PhraseBuilderInterface' => __DIR__ . '/..' . '/gregwar/captcha/src/Gregwar/Captcha/PhraseBuilderInterface.php',
- 'JsonRPC\\Client' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Client.php',
- 'JsonRPC\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Exception/AccessDeniedException.php',
- 'JsonRPC\\Exception\\AuthenticationFailureException' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Exception/AuthenticationFailureException.php',
- 'JsonRPC\\Exception\\ConnectionFailureException' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Exception/ConnectionFailureException.php',
- 'JsonRPC\\Exception\\InvalidJsonFormatException' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonFormatException.php',
- 'JsonRPC\\Exception\\InvalidJsonRpcFormatException' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php',
- 'JsonRPC\\Exception\\ResponseEncodingFailureException' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php',
- 'JsonRPC\\Exception\\ResponseException' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Exception/ResponseException.php',
- 'JsonRPC\\Exception\\ServerErrorException' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Exception/ServerErrorException.php',
- 'JsonRPC\\HttpClient' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/HttpClient.php',
- 'JsonRPC\\MiddlewareHandler' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/MiddlewareHandler.php',
- 'JsonRPC\\MiddlewareInterface' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/MiddlewareInterface.php',
- 'JsonRPC\\ProcedureHandler' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/ProcedureHandler.php',
- 'JsonRPC\\Request\\BatchRequestParser' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Request/BatchRequestParser.php',
- 'JsonRPC\\Request\\RequestBuilder' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Request/RequestBuilder.php',
- 'JsonRPC\\Request\\RequestParser' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Request/RequestParser.php',
- 'JsonRPC\\Response\\ResponseBuilder' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Response/ResponseBuilder.php',
- 'JsonRPC\\Response\\ResponseParser' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Response/ResponseParser.php',
- 'JsonRPC\\Server' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Server.php',
- 'JsonRPC\\Validator\\HostValidator' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Validator/HostValidator.php',
- 'JsonRPC\\Validator\\JsonEncodingValidator' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Validator/JsonEncodingValidator.php',
- 'JsonRPC\\Validator\\JsonFormatValidator' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Validator/JsonFormatValidator.php',
- 'JsonRPC\\Validator\\RpcFormatValidator' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Validator/RpcFormatValidator.php',
- 'JsonRPC\\Validator\\UserValidator' => __DIR__ . '/..' . '/fguillot/json-rpc/src/JsonRPC/Validator/UserValidator.php',
+ 'HostValidatorTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/Validator/HostValidatorTest.php',
+ 'JsonEncodingValidatorTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/Validator/JsonEncodingValidatorTest.php',
+ 'JsonFormatValidatorTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/Validator/JsonFormatValidatorTest.php',
+ 'JsonRPC\\Client' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Client.php',
+ 'JsonRPC\\Exception\\AccessDeniedException' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Exception/AccessDeniedException.php',
+ 'JsonRPC\\Exception\\AuthenticationFailureException' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Exception/AuthenticationFailureException.php',
+ 'JsonRPC\\Exception\\ConnectionFailureException' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Exception/ConnectionFailureException.php',
+ 'JsonRPC\\Exception\\InvalidJsonFormatException' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonFormatException.php',
+ 'JsonRPC\\Exception\\InvalidJsonRpcFormatException' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Exception/InvalidJsonRpcFormatException.php',
+ 'JsonRPC\\Exception\\ResponseEncodingFailureException' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Exception/ResponseEncodingFailureException.php',
+ 'JsonRPC\\Exception\\ResponseException' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Exception/ResponseException.php',
+ 'JsonRPC\\Exception\\RpcCallFailedException' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Exception/RpcCallFailedException.php',
+ 'JsonRPC\\Exception\\ServerErrorException' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Exception/ServerErrorException.php',
+ 'JsonRPC\\HttpClient' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/HttpClient.php',
+ 'JsonRPC\\HttpClientTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/HttpClientTest.php',
+ 'JsonRPC\\MiddlewareHandler' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/MiddlewareHandler.php',
+ 'JsonRPC\\MiddlewareInterface' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/MiddlewareInterface.php',
+ 'JsonRPC\\ProcedureHandler' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/ProcedureHandler.php',
+ 'JsonRPC\\Request\\BatchRequestParser' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Request/BatchRequestParser.php',
+ 'JsonRPC\\Request\\RequestBuilder' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Request/RequestBuilder.php',
+ 'JsonRPC\\Request\\RequestParser' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Request/RequestParser.php',
+ 'JsonRPC\\Response\\HeaderMockTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/Response/HeaderMockTest.php',
+ 'JsonRPC\\Response\\ResponseBuilder' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Response/ResponseBuilder.php',
+ 'JsonRPC\\Response\\ResponseParser' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Response/ResponseParser.php',
+ 'JsonRPC\\Server' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Server.php',
+ 'JsonRPC\\Validator\\HostValidator' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Validator/HostValidator.php',
+ 'JsonRPC\\Validator\\JsonEncodingValidator' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Validator/JsonEncodingValidator.php',
+ 'JsonRPC\\Validator\\JsonFormatValidator' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Validator/JsonFormatValidator.php',
+ 'JsonRPC\\Validator\\RpcFormatValidator' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Validator/RpcFormatValidator.php',
+ 'JsonRPC\\Validator\\UserValidator' => __DIR__ . '/../..' . '/libs/jsonrpc/src/JsonRPC/Validator/UserValidator.php',
'Kanboard\\Action\\Base' => __DIR__ . '/../..' . '/app/Action/Base.php',
'Kanboard\\Action\\CommentCreation' => __DIR__ . '/../..' . '/app/Action/CommentCreation.php',
'Kanboard\\Action\\CommentCreationMoveTaskColumn' => __DIR__ . '/../..' . '/app/Action/CommentCreationMoveTaskColumn.php',
@@ -797,48 +795,55 @@ class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e
'Kanboard\\Validator\\TaskLinkValidator' => __DIR__ . '/../..' . '/app/Validator/TaskLinkValidator.php',
'Kanboard\\Validator\\TaskValidator' => __DIR__ . '/../..' . '/app/Validator/TaskValidator.php',
'Kanboard\\Validator\\UserValidator' => __DIR__ . '/../..' . '/app/Validator/UserValidator.php',
+ 'MiddlewareHandlerTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/MiddlewareHandlerTest.php',
+ 'MyException' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ServerTest.php',
+ 'MysqlDatabaseTest' => __DIR__ . '/../..' . '/libs/picodb/tests/MysqlDatabaseTest.php',
+ 'MysqlDriverTest' => __DIR__ . '/../..' . '/libs/picodb/tests/MysqlDriverTest.php',
+ 'MysqlLobTest' => __DIR__ . '/../..' . '/libs/picodb/tests/MysqlLobTest.php',
+ 'MysqlSchemaTest' => __DIR__ . '/../..' . '/libs/picodb/tests/MysqlSchemaTest.php',
+ 'MysqlTableTest' => __DIR__ . '/../..' . '/libs/picodb/tests/MysqlTableTest.php',
'Otp\\GoogleAuthenticator' => __DIR__ . '/..' . '/christian-riesen/otp/src/Otp/GoogleAuthenticator.php',
'Otp\\Otp' => __DIR__ . '/..' . '/christian-riesen/otp/src/Otp/Otp.php',
'Otp\\OtpInterface' => __DIR__ . '/..' . '/christian-riesen/otp/src/Otp/OtpInterface.php',
- 'PHPQRCode' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode.php',
- 'PHPQRCode\\Autoloader' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/Autoloader.php',
- 'PHPQRCode\\Constants' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/Constants.php',
- 'PHPQRCode\\FrameFiller' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/FrameFiller.php',
- 'PHPQRCode\\QRbitstream' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRbitstream.php',
- 'PHPQRCode\\QRcode' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRcode.php',
- 'PHPQRCode\\QRencode' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRencode.php',
- 'PHPQRCode\\QRimage' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRimage.php',
- 'PHPQRCode\\QRinput' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRinput.php',
- 'PHPQRCode\\QRinputItem' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRinputItem.php',
- 'PHPQRCode\\QRmask' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRmask.php',
- 'PHPQRCode\\QRrawcode' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRrawcode.php',
- 'PHPQRCode\\QRrs' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRrs.php',
- 'PHPQRCode\\QRrsItem' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRrsItem.php',
- 'PHPQRCode\\QRrsblock' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRrsblock.php',
- 'PHPQRCode\\QRspec' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRspec.php',
- 'PHPQRCode\\QRsplit' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRsplit.php',
- 'PHPQRCode\\QRstr' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRstr.php',
- 'PHPQRCode\\QRtools' => __DIR__ . '/..' . '/aferrandini/phpqrcode/lib/PHPQRCode/QRtools.php',
+ 'PHPQRCode' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode.php',
+ 'PHPQRCode\\Autoloader' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/Autoloader.php',
+ 'PHPQRCode\\Constants' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/Constants.php',
+ 'PHPQRCode\\FrameFiller' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/FrameFiller.php',
+ 'PHPQRCode\\QRbitstream' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRbitstream.php',
+ 'PHPQRCode\\QRcode' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRcode.php',
+ 'PHPQRCode\\QRencode' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRencode.php',
+ 'PHPQRCode\\QRimage' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRimage.php',
+ 'PHPQRCode\\QRinput' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRinput.php',
+ 'PHPQRCode\\QRinputItem' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRinputItem.php',
+ 'PHPQRCode\\QRmask' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRmask.php',
+ 'PHPQRCode\\QRrawcode' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRrawcode.php',
+ 'PHPQRCode\\QRrs' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRrs.php',
+ 'PHPQRCode\\QRrsItem' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRrsItem.php',
+ 'PHPQRCode\\QRrsblock' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRrsblock.php',
+ 'PHPQRCode\\QRspec' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRspec.php',
+ 'PHPQRCode\\QRsplit' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRsplit.php',
+ 'PHPQRCode\\QRstr' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRstr.php',
+ 'PHPQRCode\\QRtools' => __DIR__ . '/../..' . '/libs/phpqrcode/lib/PHPQRCode/QRtools.php',
'Parsedown' => __DIR__ . '/..' . '/erusev/parsedown/Parsedown.php',
- 'PicoDb\\Builder\\BaseBuilder' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Builder/BaseBuilder.php',
- 'PicoDb\\Builder\\ConditionBuilder' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Builder/ConditionBuilder.php',
- 'PicoDb\\Builder\\InsertBuilder' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Builder/InsertBuilder.php',
- 'PicoDb\\Builder\\OrConditionBuilder' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Builder/OrConditionBuilder.php',
- 'PicoDb\\Builder\\UpdateBuilder' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Builder/UpdateBuilder.php',
- 'PicoDb\\Database' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Database.php',
- 'PicoDb\\DriverFactory' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/DriverFactory.php',
- 'PicoDb\\Driver\\Base' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Driver/Base.php',
- 'PicoDb\\Driver\\Mssql' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Driver/Mssql.php',
- 'PicoDb\\Driver\\Mysql' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Driver/Mysql.php',
- 'PicoDb\\Driver\\Postgres' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Driver/Postgres.php',
- 'PicoDb\\Driver\\Sqlite' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Driver/Sqlite.php',
- 'PicoDb\\Hashtable' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Hashtable.php',
- 'PicoDb\\LargeObject' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/LargeObject.php',
- 'PicoDb\\SQLException' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/SQLException.php',
- 'PicoDb\\Schema' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Schema.php',
- 'PicoDb\\StatementHandler' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/StatementHandler.php',
- 'PicoDb\\Table' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Table.php',
- 'PicoDb\\UrlParser' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/UrlParser.php',
+ 'PicoDb\\Builder\\BaseBuilder' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Builder/BaseBuilder.php',
+ 'PicoDb\\Builder\\ConditionBuilder' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Builder/ConditionBuilder.php',
+ 'PicoDb\\Builder\\InsertBuilder' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Builder/InsertBuilder.php',
+ 'PicoDb\\Builder\\OrConditionBuilder' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Builder/OrConditionBuilder.php',
+ 'PicoDb\\Builder\\UpdateBuilder' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Builder/UpdateBuilder.php',
+ 'PicoDb\\Database' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Database.php',
+ 'PicoDb\\DriverFactory' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/DriverFactory.php',
+ 'PicoDb\\Driver\\Base' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Driver/Base.php',
+ 'PicoDb\\Driver\\Mssql' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Driver/Mssql.php',
+ 'PicoDb\\Driver\\Mysql' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Driver/Mysql.php',
+ 'PicoDb\\Driver\\Postgres' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Driver/Postgres.php',
+ 'PicoDb\\Driver\\Sqlite' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Driver/Sqlite.php',
+ 'PicoDb\\Hashtable' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Hashtable.php',
+ 'PicoDb\\LargeObject' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/LargeObject.php',
+ 'PicoDb\\SQLException' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/SQLException.php',
+ 'PicoDb\\Schema' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Schema.php',
+ 'PicoDb\\StatementHandler' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/StatementHandler.php',
+ 'PicoDb\\Table' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/Table.php',
+ 'PicoDb\\UrlParser' => __DIR__ . '/../..' . '/libs/picodb/lib/PicoDb/UrlParser.php',
'Pimple\\Container' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Container.php',
'Pimple\\Exception\\ExpectedInvokableException' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Exception/ExpectedInvokableException.php',
'Pimple\\Exception\\FrozenServiceException' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Exception/FrozenServiceException.php',
@@ -857,6 +862,12 @@ class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e
'Pimple\\Tests\\Psr11\\ContainerTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Psr11/ContainerTest.php',
'Pimple\\Tests\\Psr11\\ServiceLocatorTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Psr11/ServiceLocatorTest.php',
'Pimple\\Tests\\ServiceIteratorTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/ServiceIteratorTest.php',
+ 'PostgresDatabaseTest' => __DIR__ . '/../..' . '/libs/picodb/tests/PostgresDatabaseTest.php',
+ 'PostgresDriverTest' => __DIR__ . '/../..' . '/libs/picodb/tests/PostgresDriverTest.php',
+ 'PostgresLobTest' => __DIR__ . '/../..' . '/libs/picodb/tests/PostgresLobTest.php',
+ 'PostgresSchemaTest' => __DIR__ . '/../..' . '/libs/picodb/tests/PostgresSchemaTest.php',
+ 'PostgresTableTest' => __DIR__ . '/../..' . '/libs/picodb/tests/PostgresTableTest.php',
+ 'ProcedureHandlerTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ProcedureHandlerTest.php',
'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php',
'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php',
'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php',
@@ -870,6 +881,13 @@ class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e
'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php',
'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
+ 'RequestBuilderTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/Request/RequestBuilderTest.php',
+ 'ResponseBuilderTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/Response/ResponseBuilderTest.php',
+ 'ResponseParserTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/Response/ResponseParserTest.php',
+ 'RpcFormatValidatorTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/Validator/RpcFormatValidatorTest.php',
+ 'SecondMiddleware' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/MiddlewareHandlerTest.php',
+ 'ServerProtocolTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ServerProtocolTest.php',
+ 'ServerTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/ServerTest.php',
'SimpleQueue\\Adapter\\AmqpQueueAdapter' => __DIR__ . '/../..' . '/libs/SimpleQueue/Adapter/AmqpQueueAdapter.php',
'SimpleQueue\\Adapter\\BeanstalkQueueAdapter' => __DIR__ . '/../..' . '/libs/SimpleQueue/Adapter/BeanstalkQueueAdapter.php',
'SimpleQueue\\Exception\\NotSupportedException' => __DIR__ . '/../..' . '/libs/SimpleQueue/Exception/NotSupportedException.php',
@@ -898,6 +916,11 @@ class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e
'SimpleValidator\\Validators\\Range' => __DIR__ . '/../..' . '/libs/SimpleValidator/Validators/Range.php',
'SimpleValidator\\Validators\\Required' => __DIR__ . '/../..' . '/libs/SimpleValidator/Validators/Required.php',
'SimpleValidator\\Validators\\Unique' => __DIR__ . '/../..' . '/libs/SimpleValidator/Validators/Unique.php',
+ 'SqliteDatabaseTest' => __DIR__ . '/../..' . '/libs/picodb/tests/SqliteDatabaseTest.php',
+ 'SqliteDriverTest' => __DIR__ . '/../..' . '/libs/picodb/tests/SqliteDriverTest.php',
+ 'SqliteLobTest' => __DIR__ . '/../..' . '/libs/picodb/tests/SqliteLobtest.php',
+ 'SqliteSchemaTest' => __DIR__ . '/../..' . '/libs/picodb/tests/SqliteSchemaTest.php',
+ 'SqliteTableTest' => __DIR__ . '/../..' . '/libs/picodb/tests/SqliteTableTest.php',
'Symfony\\Component\\Console\\Application' => __DIR__ . '/..' . '/symfony/console/Application.php',
'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => __DIR__ . '/..' . '/symfony/console/CommandLoader/CommandLoaderInterface.php',
'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/ContainerCommandLoader.php',
@@ -1027,6 +1050,8 @@ class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e
'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SortableIterator.php',
'Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php',
'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php',
+ 'UrlParserTest' => __DIR__ . '/../..' . '/libs/picodb/tests/UrlParserTest.php',
+ 'UserValidatorTest' => __DIR__ . '/../..' . '/libs/jsonrpc/tests/Validator/UserValidatorTest.php',
);
public static function getInitializer(ClassLoader $loader)
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 92bd01a7..304f25db 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1,52 +1,5 @@
[
{
- "name": "aferrandini/phpqrcode",
- "version": "1.0.1",
- "version_normalized": "1.0.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/aferrandini/PHPQRCode.git",
- "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/aferrandini/PHPQRCode/zipball/3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46",
- "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "time": "2013-07-08T09:39:08+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-0": {
- "PHPQRCode": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ariel Ferrandini",
- "email": "arielferrandini@gmail.com",
- "homepage": "http://www.ferrandini.com/",
- "role": "Developer"
- }
- ],
- "description": "PHPQRCode porting and changed for PHP 5.3 compatibility",
- "homepage": "https://github.com/aferrandini/PHPQRCode",
- "keywords": [
- "barcode",
- "php",
- "qrcode"
- ],
- "abandoned": "endroid/qr-code"
- },
- {
"name": "christian-riesen/base32",
"version": "1.3.1",
"version_normalized": "1.3.1.0",
@@ -211,47 +164,6 @@
]
},
{
- "name": "fguillot/json-rpc",
- "version": "v1.2.1",
- "version_normalized": "1.2.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/fguillot/JsonRPC.git",
- "reference": "d491bb549bfa11aff4c37abcea2ffb28c9523f69"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/fguillot/JsonRPC/zipball/d491bb549bfa11aff4c37abcea2ffb28c9523f69",
- "reference": "d491bb549bfa11aff4c37abcea2ffb28c9523f69",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.4"
- },
- "require-dev": {
- "phpunit/phpunit": "4.8.*"
- },
- "time": "2016-06-25T23:11:10+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-0": {
- "JsonRPC": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Frédéric Guillot"
- }
- ],
- "description": "Simple Json-RPC client/server library that just works",
- "homepage": "https://github.com/fguillot/JsonRPC"
- },
- {
"name": "psr/log",
"version": "1.0.2",
"version_normalized": "1.0.2.0",
@@ -565,67 +477,6 @@
]
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "v1.7.0",
- "version_normalized": "1.7.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b",
- "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
- },
- "time": "2018-01-30T19:27:44+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.7-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ]
- },
- {
"name": "symfony/debug",
"version": "v3.4.2",
"version_normalized": "3.4.2.0",
@@ -820,32 +671,33 @@
"homepage": "https://symfony.com"
},
{
- "name": "fguillot/picodb",
- "version": "v1.0.18",
- "version_normalized": "1.0.18.0",
+ "name": "erusev/parsedown",
+ "version": "1.7.1",
+ "version_normalized": "1.7.1.0",
"source": {
"type": "git",
- "url": "https://github.com/fguillot/picoDb.git",
- "reference": "4df08a3cc3c4a39e6bb329872f5d020fe135f805"
+ "url": "https://github.com/erusev/parsedown.git",
+ "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fguillot/picoDb/zipball/4df08a3cc3c4a39e6bb329872f5d020fe135f805",
- "reference": "4df08a3cc3c4a39e6bb329872f5d020fe135f805",
+ "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1",
+ "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1",
"shasum": ""
},
"require": {
+ "ext-mbstring": "*",
"php": ">=5.3.0"
},
"require-dev": {
- "phpunit/phpunit": "4.8.*"
+ "phpunit/phpunit": "^4.8.35"
},
- "time": "2018-03-05T22:39:16+00:00",
+ "time": "2018-03-08T01:11:30+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-0": {
- "PicoDb": "lib/"
+ "Parsedown": ""
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -854,42 +706,54 @@
],
"authors": [
{
- "name": "Frédéric Guillot",
- "homepage": "https://github.com/fguillot/"
+ "name": "Emanuil Rusev",
+ "email": "hello@erusev.com",
+ "homepage": "http://erusev.com"
}
],
- "description": "Minimalist database query builder",
- "homepage": "https://github.com/fguillot/picoDb"
+ "description": "Parser for Markdown.",
+ "homepage": "http://parsedown.org",
+ "keywords": [
+ "markdown",
+ "parser"
+ ]
},
{
- "name": "erusev/parsedown",
- "version": "1.7.1",
- "version_normalized": "1.7.1.0",
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.8.0",
+ "version_normalized": "1.8.0.0",
"source": {
"type": "git",
- "url": "https://github.com/erusev/parsedown.git",
- "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1"
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "3296adf6a6454a050679cde90f95350ad604b171"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1",
- "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
+ "reference": "3296adf6a6454a050679cde90f95350ad604b171",
"shasum": ""
},
"require": {
- "ext-mbstring": "*",
- "php": ">=5.3.0"
+ "php": ">=5.3.3"
},
- "require-dev": {
- "phpunit/phpunit": "^4.8.35"
+ "suggest": {
+ "ext-mbstring": "For best performance"
},
- "time": "2018-03-08T01:11:30+00:00",
+ "time": "2018-04-26T10:06:28+00:00",
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.8-dev"
+ }
+ },
"installation-source": "dist",
"autoload": {
- "psr-0": {
- "Parsedown": ""
- }
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -897,16 +761,22 @@
],
"authors": [
{
- "name": "Emanuil Rusev",
- "email": "hello@erusev.com",
- "homepage": "http://erusev.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Parser for Markdown.",
- "homepage": "http://parsedown.org",
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
"keywords": [
- "markdown",
- "parser"
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
]
},
{
diff --git a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/HostValidator.php b/vendor/fguillot/json-rpc/src/JsonRPC/Validator/HostValidator.php
deleted file mode 100644
index 7f8c0a04..00000000
--- a/vendor/fguillot/json-rpc/src/JsonRPC/Validator/HostValidator.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-namespace JsonRPC\Validator;
-
-use JsonRPC\Exception\AccessDeniedException;
-
-/**
- * Class HostValidator
- *
- * @package JsonRPC\Validator
- * @author Frederic Guillot
- */
-class HostValidator
-{
- /**
- * Validate
- *
- * @static
- * @access public
- * @param array $hosts
- * @param string $remoteAddress
- * @throws AccessDeniedException
- */
- public static function validate(array $hosts, $remoteAddress)
- {
- if (! empty($hosts) && ! in_array($remoteAddress, $hosts)) {
- throw new AccessDeniedException('Access Forbidden');
- }
- }
-}
diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php
index 67cf9ab8..4bd326e5 100644
--- a/vendor/symfony/polyfill-mbstring/Mbstring.php
+++ b/vendor/symfony/polyfill-mbstring/Mbstring.php
@@ -78,7 +78,7 @@ final class Mbstring
public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
{
- if (is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) {
+ if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) {
$fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
} else {
$fromEncoding = self::getEncoding($fromEncoding);
@@ -140,16 +140,16 @@ final class Mbstring
public static function mb_decode_numericentity($s, $convmap, $encoding = null)
{
- if (null !== $s && !is_scalar($s) && !(is_object($s) && method_exists($s, '__toString'))) {
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.gettype($s).' given', E_USER_WARNING);
return null;
}
- if (!is_array($convmap) || !$convmap) {
+ if (!\is_array($convmap) || !$convmap) {
return false;
}
- if (null !== $encoding && !is_scalar($encoding)) {
+ if (null !== $encoding && !\is_scalar($encoding)) {
trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.gettype($s).' given', E_USER_WARNING);
return ''; // Instead of null (cf. mb_encode_numericentity).
}
@@ -170,7 +170,7 @@ final class Mbstring
$s = iconv($encoding, 'UTF-8//IGNORE', $s);
}
- $cnt = floor(count($convmap) / 4) * 4;
+ $cnt = floor(\count($convmap) / 4) * 4;
for ($i = 0; $i < $cnt; $i += 4) {
// collector_decode_htmlnumericentity ignores $convmap[$i + 3]
@@ -197,21 +197,21 @@ final class Mbstring
public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
{
- if (null !== $s && !is_scalar($s) && !(is_object($s) && method_exists($s, '__toString'))) {
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.gettype($s).' given', E_USER_WARNING);
return null;
}
- if (!is_array($convmap) || !$convmap) {
+ if (!\is_array($convmap) || !$convmap) {
return false;
}
- if (null !== $encoding && !is_scalar($encoding)) {
+ if (null !== $encoding && !\is_scalar($encoding)) {
trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.gettype($s).' given', E_USER_WARNING);
return null; // Instead of '' (cf. mb_decode_numericentity).
}
- if (null !== $is_hex && !is_scalar($is_hex)) {
+ if (null !== $is_hex && !\is_scalar($is_hex)) {
trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.gettype($s).' given', E_USER_WARNING);
return null;
}
@@ -234,9 +234,9 @@ final class Mbstring
static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
- $cnt = floor(count($convmap) / 4) * 4;
+ $cnt = floor(\count($convmap) / 4) * 4;
$i = 0;
- $len = strlen($s);
+ $len = \strlen($s);
$result = '';
while ($i < $len) {
@@ -305,7 +305,7 @@ final class Mbstring
static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
$i = 0;
- $len = strlen($s);
+ $len = \strlen($s);
while ($i < $len) {
$ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
@@ -314,7 +314,7 @@ final class Mbstring
if (isset($map[$uchr])) {
$uchr = $map[$uchr];
- $nlen = strlen($uchr);
+ $nlen = \strlen($uchr);
if ($nlen == $ulen) {
$nlen = $i;
@@ -404,7 +404,7 @@ final class Mbstring
if (null === $encodingList) {
$encodingList = self::$encodingList;
} else {
- if (!is_array($encodingList)) {
+ if (!\is_array($encodingList)) {
$encodingList = array_map('trim', explode(',', $encodingList));
}
$encodingList = array_map('strtoupper', $encodingList);
@@ -441,7 +441,7 @@ final class Mbstring
return self::$encodingList;
}
- if (!is_array($encodingList)) {
+ if (!\is_array($encodingList)) {
$encodingList = array_map('trim', explode(',', $encodingList));
}
$encodingList = array_map('strtoupper', $encodingList);
@@ -467,7 +467,7 @@ final class Mbstring
{
$encoding = self::getEncoding($encoding);
if ('CP850' === $encoding || 'ASCII' === $encoding) {
- return strlen($s);
+ return \strlen($s);
}
return @iconv_strlen($s, $encoding);
@@ -679,13 +679,13 @@ final class Mbstring
public static function mb_chr($code, $encoding = null)
{
if (0x80 > $code %= 0x200000) {
- $s = chr($code);
+ $s = \chr($code);
} elseif (0x800 > $code) {
- $s = chr(0xC0 | $code >> 6).chr(0x80 | $code & 0x3F);
+ $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F);
} elseif (0x10000 > $code) {
- $s = chr(0xE0 | $code >> 12).chr(0x80 | $code >> 6 & 0x3F).chr(0x80 | $code & 0x3F);
+ $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
} else {
- $s = chr(0xF0 | $code >> 18).chr(0x80 | $code >> 12 & 0x3F).chr(0x80 | $code >> 6 & 0x3F).chr(0x80 | $code & 0x3F);
+ $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
}
if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
@@ -735,7 +735,7 @@ final class Mbstring
while (isset($m[$i])) {
if (0x80 > $m[$i]) {
- $entities .= chr($m[$i++]);
+ $entities .= \chr($m[$i++]);
continue;
}
if (0xF0 <= $m[$i]) {
diff --git a/vendor/symfony/polyfill-mbstring/composer.json b/vendor/symfony/polyfill-mbstring/composer.json
index 4febcdd5..49b720dd 100644
--- a/vendor/symfony/polyfill-mbstring/composer.json
+++ b/vendor/symfony/polyfill-mbstring/composer.json
@@ -28,7 +28,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "1.7-dev"
+ "dev-master": "1.8-dev"
}
}
}