├── .gitignore
├── .scrutinizer.yml
├── .travis.yml
├── CHANGELOG.md
├── LICENSE
├── README.md
├── build
├── phalcon.sh
└── phpunit.phar
├── composer.json
├── composer.phar
├── phpunit.xml.dist
├── phpunit
├── bootstrap.php
├── log
│ ├── coverage.php
│ ├── coverage.xml
│ └── coverage
│ │ ├── Helpers
│ │ ├── Format.php.html
│ │ ├── Message.php.html
│ │ ├── dashboard.html
│ │ └── index.html
│ │ ├── Uploader.php.html
│ │ ├── Validator.php.html
│ │ ├── css
│ │ ├── bootstrap.min.css
│ │ ├── nv.d3.css
│ │ └── style.css
│ │ ├── dashboard.html
│ │ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ └── glyphicons-halflings-regular.woff
│ │ ├── index.html
│ │ └── js
│ │ ├── bootstrap.min.js
│ │ ├── d3.min.js
│ │ ├── holder.js
│ │ ├── html5shiv.min.js
│ │ ├── jquery.min.js
│ │ ├── nv.d3.min.js
│ │ └── respond.min.js
└── src
│ └── Uploader
│ ├── Helpers
│ ├── FormatTest.php
│ └── MessageTest.php
│ ├── UploaderTest.php
│ └── ValidatorTest.php
├── src
└── Uploader
│ ├── Helpers
│ ├── Format.php
│ └── Message.php
│ ├── Uploader.php
│ └── Validator.php
└── vendor
├── autoload.php
└── composer
├── ClassLoader.php
├── autoload_classmap.php
├── autoload_namespaces.php
├── autoload_psr4.php
└── autoload_real.php
/.gitignore:
--------------------------------------------------------------------------------
1 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm
2 |
3 | *.iml
4 |
5 | ## Directory-based project format:
6 | .idea/
7 | # if you remove the above rule, at least ignore the following:
8 |
9 | # User-specific stuff:
10 | # .idea/workspace.xml
11 | # .idea/tasks.xml
12 | # .idea/dictionaries
13 |
14 | # Sensitive or high-churn files:
15 | # .idea/dataSources.ids
16 | # .idea/dataSources.xml
17 | # .idea/sqlDataSources.xml
18 | # .idea/dynamic.xml
19 | # .idea/uiDesigner.xml
20 |
21 | # Gradle:
22 | # .idea/gradle.xml
23 | # .idea/libraries
24 |
25 | # Mongo Explorer plugin:
26 | # .idea/mongoSettings.xml
27 |
28 | ## File-based project format:
29 | *.ipr
30 | *.iws
31 |
32 | ## Plugin-specific files:
33 |
34 | # IntelliJ
35 | out/
36 |
37 | # mpeltonen/sbt-idea plugin
38 | .idea_modules/
39 |
40 | # JIRA plugin
41 | atlassian-ide-plugin.xml
42 |
43 | # Crashlytics plugin (for Android Studio and IntelliJ)
44 | com_crashlytics_export_strings.xml
45 | crashlytics.properties
46 | crashlytics-build.properties
47 | composer.lock
48 | /nbproject/private/
--------------------------------------------------------------------------------
/.scrutinizer.yml:
--------------------------------------------------------------------------------
1 | build:
2 |
3 | environment:
4 | php:
5 | version: "5.4.41" # Common versions: 5.4.28, 5.5.12, or hhvm
6 | ini:
7 | 'date.timezone': 'UTC'
8 | redis: false
9 |
10 | dependencies:
11 |
12 | before:
13 | - composer install --prefer-dist -o
14 | - git clone -q --depth=1 https://github.com/phalcon/cphalcon.git -b master
15 | - cd cphalcon/ext; export CFLAGS="-g3 -O1 -fno-delete-null-pointer-checks -Wall"; phpize && ./configure --enable-phalcon && make -j4 && sudo make install && sed -i '$ a \\n[Phalcon]\nextension=phalcon.so\n' /home/scrutinizer/.phpenv/versions/5.4.41/etc/php.ini
16 | - php -m | grep -i Phalcon
17 |
18 | filter:
19 | paths: [src/*]
20 | excluded_paths: [build/*, phpunit/*, vendor/*]
21 |
22 | tools:
23 | php_sim: true
24 | php_pdepend:
25 | enabled: true
26 | command: pdepend
27 | suffixes:
28 | - php
29 | excluded_dirs:
30 | - vendor
31 | - phpunit
32 |
33 | php_code_coverage: true
34 |
35 | php_analyzer:
36 | enabled: true
37 | filter:
38 | excluded_paths: [build/*, phpunit/*, vendor/*]
39 | extensions:
40 | - php
41 |
42 | sensiolabs_security_checker: true
43 | php_code_sniffer:
44 | enabled: true
45 | config:
46 | standard: PSR2
47 | extensions:
48 | - php
49 | filter:
50 | excluded_paths: [build/*, phpunit/*, vendor/*]
51 |
52 | php_cs_fixer:
53 | enabled: true
54 | extensions:
55 | - php
56 | config:
57 | level: all
58 |
59 | checks:
60 | php:
61 | code_rating: true
62 | duplication: false
63 | verify_property_names: true
64 | verify_argument_usable_as_reference: true
65 | verify_access_scope_valid: true
66 | variable_existence: true
67 | use_statement_alias_conflict: true
68 | symfony_request_injection: true
69 | sql_injection_vulnerabilities: true
70 | security_vulnerabilities: true
71 | require_php_tag_first: true
72 | precedence_in_conditions: true
73 | precedence_mistakes: true
74 | parameter_non_unique: true
75 | no_eval: true
76 | no_non_implemented_abstract_methods: true
77 | no_duplicate_arguments: true
78 | missing_arguments: true
79 | instanceof_class_exists: true
80 | foreach_traversable: true
81 | closure_use_not_conflicting: true
82 | closure_use_modifiable: true
83 | catch_class_exists: true
84 | argument_type_checks: true
85 | assignment_of_null_return: true
86 | useless_calls: true
87 | use_self_instead_of_fqcn: true
88 | uppercase_constants: true
89 | unused_variables: true
90 | unused_properties: true
91 | unused_parameters: true
92 | unused_methods: true
93 | too_many_arguments: true
94 | switch_fallthrough_commented: true
95 | return_doc_comments: true
96 | return_doc_comment_if_not_inferrable: true
97 | php5_style_constructor: true
98 | phpunit_assertions: true
99 | parameter_doc_comments: true
100 | param_doc_comment_if_not_inferrable: true
101 | overriding_private_members: true
102 | one_class_per_file: true
103 | non_commented_empty_catch_block: true
104 | no_unnecessary_if: true
105 | no_unnecessary_function_call_in_for_loop: true
106 | no_unnecessary_final_modifier: true
107 | no_property_on_interface: true
108 | method_calls_on_non_object: true
109 | foreach_usable_as_reference: true
110 | fix_use_statements:
111 | remove_unused: false
112 | preserve_multiple: false
113 | preserve_blanklines: false
114 | order_alphabetically: false
115 | encourage_shallow_comparison: true
116 | deprecated_code_usage: true
117 | avoid_unnecessary_concatenation: true
118 | avoid_corrupting_byteorder_marks: true
119 | avoid_conflicting_incrementers: true
120 | unreachable_code: true
121 | spacing_of_function_arguments: true
122 | spacing_around_non_conditional_operators: true
123 | spacing_around_conditional_operators: true
124 | space_after_cast: true
125 | single_namespace_per_use: true
126 | simplify_boolean_return: true
127 | side_effects_or_types: true
128 | require_scope_for_properties: true
129 | require_scope_for_methods: true
130 | require_braces_around_control_structures: true
131 | remove_trailing_whitespace: true
132 | remove_php_closing_tag: true
133 | remove_extra_empty_lines: true
134 | psr2_control_structure_declaration: true
135 | psr2_class_declaration: true
136 | properties_in_camelcaps: true
137 | prefer_unix_line_ending: true
138 | no_trait_type_hints: true
139 | no_underscore_prefix_in_methods: true
140 | no_underscore_prefix_in_properties: true
141 | no_short_variable_names:
142 | minimum: '1'
143 | no_short_open_tag: true
144 | no_short_method_names:
145 | minimum: '3'
146 | no_mixed_inline_html: true
147 | no_long_variable_names:
148 | maximum: '20'
149 | no_goto: true
150 | no_global_keyword: true
151 | no_exit: true
152 | no_empty_statements: true
153 | no_debug_code: true
154 | no_commented_out_code: true
155 | line_length:
156 | max_length: '200'
157 | fix_php_opening_tag: true
158 | fix_linefeed: true
159 | fix_line_ending: true
160 | fix_identation_4spaces: true
161 | fix_doc_comments: true
162 | classes_in_camel_caps: true
163 | avoid_useless_overridden_methods: true
164 | avoid_todo_comments: true
165 | avoid_tab_indentation: true
166 | avoid_superglobals: true
167 | avoid_perl_style_comments: true
168 | avoid_entity_manager_injection: true
169 | prefer_sapi_constant: true
170 | more_specific_types_in_doc_comments: true
171 | avoid_usage_of_logical_operators: true
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | # Required to run your project under the correct environment.
2 | # see http://about.travis-ci.org/docs/user/languages/php/ for more hints
3 | language: php
4 |
5 | # list any PHP version you want to test against
6 | php:
7 | # aliased to a recent 5.5.x version
8 | - 5.4
9 | # aliased to a recent 5.5.x version
10 | - 5.5
11 | # aliased to a recent 5.6.x version
12 | - 5.6
13 |
14 | # omitting "script:" will default to phpunit
15 | before_script:
16 | - composer self-update
17 | - phpenv rehash
18 | - composer install --dev --no-interaction -o
19 | - sh ./build/phalcon.sh
20 | - php -m | grep -i Phalcon
21 |
22 | script:
23 | - mkdir -p build/logs
24 | - phpunit --coverage-clover build/logs/clover.xml
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | #### [v 1.4-beta] 2015-05-28
2 | - ability to download files to a dynamically created directory (by [Mahdi-Mohammadi](https://github.com/Mahdi-Mohammadi))
3 |
4 | #### [v 1.3-beta] 2015-05-07
5 | - it support Phalcon 2.0
6 |
7 | #### [v 1.2-beta] 2015-05-07
8 | - ability to use closure (anonimous function) for generate uploaded file name
9 |
10 | #### [v 1.1-beta] 2015-02-23
11 | - ability to delete files after downloading ($uploader->truncate())
12 |
13 | #### [v 1.0-beta] 2015-01-10
14 | - added validator (sizes, extensions, mime types, directory upload)
15 | - added filters (sanitize filename pre save, hash filename)
16 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Stanislav
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Phalcon File Uploader
2 |
3 | [](https://scrutinizer-ci.com/g/stanislav-web/phalcon-uploader/?branch=master) [](https://scrutinizer-ci.com/g/stanislav-web/phalcon-uploader/?branch=master) [](https://packagist.org/packages/stanislav-web/phalcon-uploader) [](https://packagist.org/packages/stanislav-web/phalcon-uploader)
4 |
5 | ## Description
6 | Handling and downloading files for Phalcon projects. Allowed multiple files, filters etc.... _(Currently under TDD)_
7 |
8 | ## Change Log
9 |
10 | #### [v 1.4-beta] 2015-05-28
11 | - ability to download files to a dynamically created directory (by [Mahdi-Mohammadi](https://github.com/Mahdi-Mohammadi))
12 |
13 | #### [v 1.3-beta] 2015-05-07
14 | - it support Phalcon 2.0
15 |
16 | #### [v 1.2-beta] 2015-05-07
17 | - ability to use closure (anonimous function) for generate uploaded file name
18 |
19 | #### [v 1.1-beta] 2015-02-23
20 | - ability to delete files after downloading ($uploader->truncate())
21 |
22 | #### [v 1.0-beta] 2015-01-10
23 | - added validator (sizes, extensions, mime types, directory upload)
24 | - added filters (sanitize filename pre save, hash filename)
25 |
26 | ## Compatible
27 | - PSR-0, PSR-1, PSR-2, PSR-4 Standards
28 |
29 | ## System requirements
30 | - PHP 5.4.x >
31 | - Phalcon extension 1.3.x
32 |
33 | ## Install
34 | First update your dependencies through composer. Add to your composer.json:
35 | ```php
36 | "require": {
37 | "stanislav-web/phalcon-uploader": "1.*",
38 | }
39 | ```
40 | Then run to update dependency and autoloader
41 | ```python
42 | php composer.phar update
43 | php composer.phar install
44 | ```
45 | or just
46 | ```
47 | php composer.phar require stanislav-web/phalcon-uploader dev-master
48 | ```
49 | _(Do not forget to include the composer autoloader)_
50 |
51 | Or manual require in your loader service
52 | ```php
53 | $loader->registerNamespaces([
54 | 'Uploader\Uploader' => 'path to src'
55 | ]);
56 | ```
57 | You can create an injectable service
58 | ```php
59 | $di->set('uploader', '\Uploader\Uploader');
60 | ```
61 | ## Usage
62 |
63 | #### Simple usage
64 |
65 | ```php
66 | request->hasFiles() !== false) {
69 |
70 | // get uploader service
71 | $uploader = $this->di->get('uploader');
72 |
73 | // setting up uloader rules
74 | $uploader->setRules([
75 | 'directory' => '/files',
76 | //or 'dynamic' => '/files/'.$part.'/'.$userId, // added v1.4-beta
77 | ]);
78 |
79 | // or use constructor if you don't use service
80 | $uploader = new \Uploader\Uploader(([
81 | 'directory' => '/files',
82 | //or 'dynamic' => '/files/'.$part.'/'.$userId, // added v1.4-beta
83 | ]);
84 |
85 | }
86 | ```
87 |
88 | #### Filters
89 |
90 | ```php
91 | request->hasFiles() !== false) {
94 |
95 | // get uploader service or \Uploader\Uploader
96 | $uploader = $this->di->get('uploader');
97 |
98 | // setting up uloader rules
99 | $uploader->setRules([
100 | 'directory' => '/files',
101 | //or 'dynamic' => '/files/'.$part.'/'.$userId, // added v1.4-beta
102 | 'minsize' => 1000, // bytes
103 | 'maxsize' => 1000000,// bytes
104 | 'mimes' => [ // any allowed mime types
105 | 'image/gif',
106 | 'image/jpeg',
107 | 'image/png',
108 | ],
109 | 'extensions' => [ // any allowed extensions
110 | 'gif',
111 | 'jpeg',
112 | 'jpg',
113 | 'png',
114 | ],
115 |
116 | 'sanitize' => true // escape file & translate to latin
117 | 'hash' => 'md5' // save file as hash (default md5) you can use ANY function to handle filename
118 | ]);
119 | }
120 | ```
121 |
122 | #### Full Handle
123 |
124 | ```php
125 | request->hasFiles() !== false) {
128 |
129 | // get uploader service or \Uploader\Uploader
130 | $uploader = $this->di->get('uploader');
131 |
132 | // setting up uloader rules
133 | $uploader->setRules([
134 | 'directory' => '/files',
135 | //or 'dynamic' => '/files/'.$part.'/'.$userId, // added v1.4-beta
136 | 'minsize' => 1000, // bytes
137 | 'maxsize' => 1000000,// bytes
138 | 'mimes' => [ // any allowed mime types
139 | 'image/gif',
140 | 'image/jpeg',
141 | 'image/png',
142 | ],
143 | 'extensions' => [ // any allowed extensions
144 | 'gif',
145 | 'jpeg',
146 | 'jpg',
147 | 'png',
148 | ],
149 |
150 | 'sanitize' => true
151 | 'hash' => 'md5'
152 | ]);
153 |
154 | if($uploader->isValid() === true) {
155 |
156 | $uploader->move(); // upload files array result
157 |
158 | $uploader->getInfo() // var dump to see upload files
159 |
160 | }
161 | else {
162 | $uploader->getErrors(); // var_dump errors
163 | }
164 | }
165 |
166 | // you always can remove all files uploaded by one iteration
167 | $uploader->truncate(); // added 1.1
168 | ```
169 |
170 | ## Unit Test
171 | Also available in /phpunit directory. Run command to start
172 | ```php
173 | php build/phpunit.phar --configuration phpunit.xml.dist --coverage-text
174 | ```
175 |
176 | Read logs from phpunit/log
177 |
178 | ##[Change Log](https://github.com/stanislav-web/phalcon-uploader/blob/master/CHANGELOG.md "Change Log")
179 |
180 | ##[Issues](https://github.com/stanislav-web/phalcon-uploader/issues "Issues")
181 |
182 | [](https://packagist.org/packages/stanislav-web/phalcon-searcher)
183 |
--------------------------------------------------------------------------------
/build/phalcon.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | git clone -q --depth=1 https://github.com/phalcon/cphalcon.git -b master
4 | cd cphalcon/ext; export CFLAGS="-g3 -O1 -fno-delete-null-pointer-checks -Wall"; phpize && ./configure --enable-phalcon && make -j4 && sudo make install && phpenv config-add ../unit-tests/ci/phalcon.ini
--------------------------------------------------------------------------------
/build/phpunit.phar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stanislav-web/phalcon-uploader/3e46aba5d6f51b52b7830eae21c0d3fe1e524c90/build/phpunit.phar
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stanislav-web/phalcon-uploader",
3 | "description": "Phalcon files uploader. Handling and downloading files for Phalcon projects. Allowed multiple files download, filters etc...",
4 | "type": "library",
5 | "keywords" : [
6 | "phalcon",
7 | "phalcon uploader",
8 | "phalcon upload",
9 | "phalcon upload files",
10 | "uploader"
11 | ],
12 | "support": {
13 | "issues": "https://github.com/stanislav-web/phalcon-uploader/issues"
14 | },
15 | "minimum-stability": "dev",
16 | "homepage" : "https://github.com/stanislav-web/phalcon-uploader",
17 | "license" : "MIT",
18 | "authors" : [{
19 | "name": "Stanislav WEB",
20 | "email": "stanisov@gmail.com",
21 | "homepage": "http://reds.com",
22 | "role": "Developer"
23 | }],
24 |
25 | "require" : {
26 | "php" : ">=5.4.0"
27 | },
28 |
29 | "autoload": {
30 | "psr-4": {
31 | "Uploader\\": "src/Uploader"
32 | },
33 | "classmap": ["phpunit/src/Uploader"]
34 | },
35 | "extra": {
36 | "branch-alias": {
37 | "dev-master": "1.*-dev"
38 | }
39 | },
40 | "autoload-dev": {
41 | "psr-4": {
42 | "Test\\Uploader\\": "phpunit/src/Uploader"
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/composer.phar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stanislav-web/phalcon-uploader/3e46aba5d6f51b52b7830eae21c0d3fe1e524c90/composer.phar
--------------------------------------------------------------------------------
/phpunit.xml.dist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 |
21 |
22 |
23 |
24 | ./phpunit
25 |
26 |
27 |
28 |
29 |
30 |
31 | ./build
32 | ./vendor
33 | ./phpunit/bootstrap.php
34 |
35 |
36 | ./src
37 |
38 |
39 |
40 |
41 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/phpunit/bootstrap.php:
--------------------------------------------------------------------------------
1 | setData(array (
4 | '/var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Helpers/Format.php' =>
5 | array (
6 | 47 =>
7 | array (
8 | ),
9 | 48 =>
10 | array (
11 | ),
12 | 49 =>
13 | array (
14 | ),
15 | 50 => NULL,
16 | 62 =>
17 | array (
18 | ),
19 | 64 =>
20 | array (
21 | ),
22 | 65 =>
23 | array (
24 | ),
25 | 67 =>
26 | array (
27 | ),
28 | 68 =>
29 | array (
30 | ),
31 | 69 =>
32 | array (
33 | ),
34 | 70 =>
35 | array (
36 | ),
37 | 71 =>
38 | array (
39 | ),
40 | 73 =>
41 | array (
42 | ),
43 | 75 =>
44 | array (
45 | ),
46 | 77 =>
47 | array (
48 | ),
49 | 78 =>
50 | array (
51 | ),
52 | 79 =>
53 | array (
54 | ),
55 | 81 =>
56 | array (
57 | ),
58 | 83 =>
59 | array (
60 | ),
61 | 84 =>
62 | array (
63 | ),
64 | 85 =>
65 | array (
66 | ),
67 | 87 =>
68 | array (
69 | ),
70 | 88 => NULL,
71 | ),
72 | '/var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Helpers/Message.php' =>
73 | array (
74 | 39 =>
75 | array (
76 | ),
77 | 40 =>
78 | array (
79 | ),
80 | 41 => NULL,
81 | 42 =>
82 | array (
83 | ),
84 | ),
85 | '/var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Validator.php' =>
86 | array (
87 | 36 =>
88 | array (
89 | ),
90 | 37 =>
91 | array (
92 | ),
93 | 38 =>
94 | array (
95 | ),
96 | 42 =>
97 | array (
98 | ),
99 | 44 =>
100 | array (
101 | ),
102 | 45 =>
103 | array (
104 | ),
105 | 46 => NULL,
106 | 48 =>
107 | array (
108 | ),
109 | 49 => NULL,
110 | 62 =>
111 | array (
112 | ),
113 | 63 =>
114 | array (
115 | ),
116 | 64 =>
117 | array (
118 | ),
119 | 68 =>
120 | array (
121 | ),
122 | 70 =>
123 | array (
124 | ),
125 | 71 =>
126 | array (
127 | ),
128 | 72 => NULL,
129 | 74 =>
130 | array (
131 | ),
132 | 75 => NULL,
133 | 88 =>
134 | array (
135 | ),
136 | 89 =>
137 | array (
138 | ),
139 | 90 =>
140 | array (
141 | ),
142 | 94 =>
143 | array (
144 | ),
145 | 96 =>
146 | array (
147 | ),
148 | 98 =>
149 | array (
150 | ),
151 | 99 => NULL,
152 | 101 =>
153 | array (
154 | ),
155 | 102 => NULL,
156 | 115 =>
157 | array (
158 | ),
159 | 116 =>
160 | array (
161 | ),
162 | 117 =>
163 | array (
164 | ),
165 | 121 =>
166 | array (
167 | ),
168 | 123 =>
169 | array (
170 | ),
171 | 125 =>
172 | array (
173 | ),
174 | 126 => NULL,
175 | 128 =>
176 | array (
177 | ),
178 | 129 => NULL,
179 | 142 =>
180 | array (
181 | ),
182 | 143 =>
183 | array (
184 | ),
185 | 144 =>
186 | array (
187 | ),
188 | 148 =>
189 | array (
190 | ),
191 | 150 =>
192 | array (
193 | ),
194 | 151 =>
195 | array (
196 | ),
197 | 152 => NULL,
198 | 154 =>
199 | array (
200 | ),
201 | 156 =>
202 | array (
203 | ),
204 | 157 =>
205 | array (
206 | ),
207 | 158 => NULL,
208 | 160 =>
209 | array (
210 | ),
211 | 161 => NULL,
212 | ),
213 | '/var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Uploader.php' =>
214 | array (
215 | 67 =>
216 | array (
217 | 0 => 'Test\\Uploader\\UploaderTest::testConstructor',
218 | ),
219 | 69 =>
220 | array (
221 | ),
222 | 71 =>
223 | array (
224 | ),
225 | 74 =>
226 | array (
227 | 0 => 'Test\\Uploader\\UploaderTest::testConstructor',
228 | ),
229 | 77 =>
230 | array (
231 | 0 => 'Test\\Uploader\\UploaderTest::testConstructor',
232 | ),
233 | 78 =>
234 | array (
235 | 0 => 'Test\\Uploader\\UploaderTest::testConstructor',
236 | ),
237 | 87 =>
238 | array (
239 | ),
240 | 88 => NULL,
241 | 99 =>
242 | array (
243 | ),
244 | 102 =>
245 | array (
246 | ),
247 | 103 =>
248 | array (
249 | ),
250 | 114 =>
251 | array (
252 | ),
253 | 116 =>
254 | array (
255 | ),
256 | 118 =>
257 | array (
258 | ),
259 | 119 =>
260 | array (
261 | ),
262 | 121 =>
263 | array (
264 | ),
265 | 123 =>
266 | array (
267 | ),
268 | 125 =>
269 | array (
270 | ),
271 | 126 => NULL,
272 | 136 =>
273 | array (
274 | ),
275 | 138 =>
276 | array (
277 | ),
278 | 142 =>
279 | array (
280 | ),
281 | 146 =>
282 | array (
283 | ),
284 | 148 =>
285 | array (
286 | ),
287 | 149 =>
288 | array (
289 | ),
290 | 150 =>
291 | array (
292 | ),
293 | 151 =>
294 | array (
295 | ),
296 | 152 =>
297 | array (
298 | ),
299 | 153 =>
300 | array (
301 | ),
302 | 155 =>
303 | array (
304 | ),
305 | 157 =>
306 | array (
307 | ),
308 | 158 => NULL,
309 | 169 =>
310 | array (
311 | ),
312 | 171 =>
313 | array (
314 | ),
315 | 172 =>
316 | array (
317 | ),
318 | 173 =>
319 | array (
320 | ),
321 | 175 =>
322 | array (
323 | ),
324 | 176 =>
325 | array (
326 | ),
327 | 177 =>
328 | array (
329 | ),
330 | 178 =>
331 | array (
332 | ),
333 | 180 =>
334 | array (
335 | ),
336 | 181 =>
337 | array (
338 | ),
339 | 183 =>
340 | array (
341 | ),
342 | 184 =>
343 | array (
344 | ),
345 | 185 =>
346 | array (
347 | ),
348 | 187 =>
349 | array (
350 | ),
351 | 190 =>
352 | array (
353 | ),
354 | 192 =>
355 | array (
356 | ),
357 | 194 =>
358 | array (
359 | ),
360 | 195 =>
361 | array (
362 | ),
363 | 196 =>
364 | array (
365 | ),
366 | 197 =>
367 | array (
368 | ),
369 | 198 =>
370 | array (
371 | ),
372 | 199 =>
373 | array (
374 | ),
375 | 200 =>
376 | array (
377 | ),
378 | 202 =>
379 | array (
380 | ),
381 | 203 => NULL,
382 | 213 =>
383 | array (
384 | ),
385 | 215 => NULL,
386 | 224 =>
387 | array (
388 | ),
389 | 226 => NULL,
390 | ),
391 | ));
392 | $coverage->setTests(array (
393 | 'Test\\Uploader\\Helpers\\FormatTest::testBytes' => 0,
394 | 'Test\\Uploader\\Helpers\\MessageTest::testGet' => 0,
395 | 'Test\\Uploader\\UploaderTest::testConstructor' => 0,
396 | ));
397 |
398 | $filter = $coverage->filter();
399 | $filter->setBlacklistedFiles(array (
400 | ));
401 | $filter->setWhitelistedFiles(array (
402 | '/var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Helpers/Format.php' => true,
403 | '/var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Helpers/Message.php' => true,
404 | '/var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Uploader.php' => true,
405 | '/var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Validator.php' => true,
406 | ));
407 |
408 | return $coverage;
--------------------------------------------------------------------------------
/phpunit/log/coverage.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/phpunit/log/coverage/Helpers/Message.php.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Code Coverage for /var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Helpers/Message.php
6 |
7 |
8 |
9 |
13 |
14 |
15 |
29 |
30 |
31 |
32 |
33 | |
34 | Code Coverage |
35 |
36 |
37 | |
38 | Classes and Traits |
39 | Functions and Methods |
40 | Lines |
41 |
42 |
43 |
44 |
45 | Total |
46 |
47 |
48 | 0.00% covered (danger)
49 |
50 |
51 | |
52 | 0.00% |
53 | 0 / 1 |
54 |
55 |
56 | 0.00% covered (danger)
57 |
58 |
59 | |
60 | 0.00% |
61 | 0 / 1 |
62 | CRAP |
63 |
64 |
65 | 0.00% covered (danger)
66 |
67 |
68 | |
69 | 0.00% |
70 | 0 / 3 |
71 |
72 |
73 |
74 | Message |
75 |
76 |
77 | 0.00% covered (danger)
78 |
79 |
80 | |
81 | 0.00% |
82 | 0 / 1 |
83 |
84 |
85 | 0.00% covered (danger)
86 |
87 |
88 | |
89 | 0.00% |
90 | 0 / 1 |
91 | 6 |
92 |
93 |
94 | 0.00% covered (danger)
95 |
96 |
97 | |
98 | 0.00% |
99 | 0 / 3 |
100 |
101 |
102 |
103 | get($key) |
104 |
105 |
106 | 0.00% covered (danger)
107 |
108 |
109 | |
110 | 0.00% |
111 | 0 / 1 |
112 | 6 |
113 |
114 |
115 | 0.00% covered (danger)
116 |
117 |
118 | |
119 | 0.00% |
120 | 0 / 3 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 | | <?php |
129 | | namespace Uploader\Helpers; |
130 | | |
131 | | |
132 | | |
133 | | |
134 | | |
135 | | |
136 | | |
137 | | |
138 | | |
139 | | |
140 | | |
141 | | class Message |
142 | | { |
143 | | |
144 | | |
145 | | |
146 | | |
147 | | |
148 | | |
149 | | private static $messages = [ |
150 | | 'INVALID_MIN_SIZE' => 'The %s file is small to download. The minimum allowable %s', |
151 | | 'INVALID_MAX_SIZE' => 'The %s file is big to download. The maximum allowable %s', |
152 | | 'INVALID_EXTENSION' => 'File %s has invalid extension. Allowable only: %s', |
153 | | 'INVALID_MIME_TYPES' => 'File %s has invalid mime type. Allowable only: %s', |
154 | | 'INVALID_UPLOAD_DIR' => 'The specified directory %s is not a directory download', |
155 | | 'INVALID_PERMISSION_DIR' => 'The specified directory %s is not writable', |
156 | | ]; |
157 | | |
158 | | |
159 | | |
160 | | |
161 | | |
162 | | |
163 | | |
164 | | public static function get($key) { |
165 | | |
166 | | if(isset(self::$messages[$key]) === true) { |
167 | | return self::$messages[$key]; |
168 | | } |
169 | | } |
170 | | } |
171 |
172 |
173 |
174 |
187 |
188 |
189 |
190 |
191 |
214 |
215 |
216 |
--------------------------------------------------------------------------------
/phpunit/log/coverage/Helpers/dashboard.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Dashboard for /var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Helpers
6 |
7 |
8 |
9 |
10 |
14 |
15 |
16 |
30 |
31 |
32 |
33 |
Classes
34 |
35 |
36 |
37 |
38 |
Coverage Distribution
39 |
40 |
41 |
42 |
43 |
44 |
Complexity
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
Insufficient Coverage
53 |
68 |
69 |
70 |
Project Risks
71 |
86 |
87 |
88 |
89 |
90 |
Methods
91 |
92 |
93 |
94 |
95 |
Coverage Distribution
96 |
97 |
98 |
99 |
100 |
101 |
Complexity
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
Insufficient Coverage
110 |
126 |
127 |
128 |
Project Risks
129 |
144 |
145 |
146 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
297 |
298 |
299 |
--------------------------------------------------------------------------------
/phpunit/log/coverage/Helpers/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Code Coverage for /var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader/Helpers
6 |
7 |
8 |
9 |
13 |
14 |
15 |
29 |
30 |
31 |
32 |
33 | |
34 | Code Coverage |
35 |
36 |
37 | |
38 | Lines |
39 | Functions and Methods |
40 | Classes and Traits |
41 |
42 |
43 |
44 |
45 | Total |
46 |
47 |
48 | 0.00% covered (danger)
49 |
50 |
51 | |
52 | 0.00% |
53 | 0 / 24 |
54 |
55 |
56 | 0.00% covered (danger)
57 |
58 |
59 | |
60 | 0.00% |
61 | 0 / 3 |
62 |
63 |
64 | 0.00% covered (danger)
65 |
66 |
67 | |
68 | 0.00% |
69 | 0 / 2 |
70 |
71 |
72 |
73 | Format.php |
74 |
75 |
76 | 0.00% covered (danger)
77 |
78 |
79 | |
80 | 0.00% |
81 | 0 / 21 |
82 |
83 |
84 | 0.00% covered (danger)
85 |
86 |
87 | |
88 | 0.00% |
89 | 0 / 2 |
90 |
91 |
92 | 0.00% covered (danger)
93 |
94 |
95 | |
96 | 0.00% |
97 | 0 / 1 |
98 |
99 |
100 |
101 | Message.php |
102 |
103 |
104 | 0.00% covered (danger)
105 |
106 |
107 | |
108 | 0.00% |
109 | 0 / 3 |
110 |
111 |
112 | 0.00% covered (danger)
113 |
114 |
115 | |
116 | 0.00% |
117 | 0 / 1 |
118 |
119 |
120 | 0.00% covered (danger)
121 |
122 |
123 | |
124 | 0.00% |
125 | 0 / 1 |
126 |
127 |
128 |
129 |
130 |
131 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
--------------------------------------------------------------------------------
/phpunit/log/coverage/css/nv.d3.css:
--------------------------------------------------------------------------------
1 |
2 | /********************
3 | * HTML CSS
4 | */
5 |
6 |
7 | .chartWrap {
8 | margin: 0;
9 | padding: 0;
10 | overflow: hidden;
11 | }
12 |
13 | /********************
14 | Box shadow and border radius styling
15 | */
16 | .nvtooltip.with-3d-shadow, .with-3d-shadow .nvtooltip {
17 | -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
18 | -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
19 | box-shadow: 0 5px 10px rgba(0,0,0,.2);
20 |
21 | -webkit-border-radius: 6px;
22 | -moz-border-radius: 6px;
23 | border-radius: 6px;
24 | }
25 |
26 | /********************
27 | * TOOLTIP CSS
28 | */
29 |
30 | .nvtooltip {
31 | position: absolute;
32 | background-color: rgba(255,255,255,1.0);
33 | padding: 1px;
34 | border: 1px solid rgba(0,0,0,.2);
35 | z-index: 10000;
36 |
37 | font-family: Arial;
38 | font-size: 13px;
39 | text-align: left;
40 | pointer-events: none;
41 |
42 | white-space: nowrap;
43 |
44 | -webkit-touch-callout: none;
45 | -webkit-user-select: none;
46 | -khtml-user-select: none;
47 | -moz-user-select: none;
48 | -ms-user-select: none;
49 | user-select: none;
50 | }
51 |
52 | /*Give tooltips that old fade in transition by
53 | putting a "with-transitions" class on the container div.
54 | */
55 | .nvtooltip.with-transitions, .with-transitions .nvtooltip {
56 | transition: opacity 250ms linear;
57 | -moz-transition: opacity 250ms linear;
58 | -webkit-transition: opacity 250ms linear;
59 |
60 | transition-delay: 250ms;
61 | -moz-transition-delay: 250ms;
62 | -webkit-transition-delay: 250ms;
63 | }
64 |
65 | .nvtooltip.x-nvtooltip,
66 | .nvtooltip.y-nvtooltip {
67 | padding: 8px;
68 | }
69 |
70 | .nvtooltip h3 {
71 | margin: 0;
72 | padding: 4px 14px;
73 | line-height: 18px;
74 | font-weight: normal;
75 | background-color: rgba(247,247,247,0.75);
76 | text-align: center;
77 |
78 | border-bottom: 1px solid #ebebeb;
79 |
80 | -webkit-border-radius: 5px 5px 0 0;
81 | -moz-border-radius: 5px 5px 0 0;
82 | border-radius: 5px 5px 0 0;
83 | }
84 |
85 | .nvtooltip p {
86 | margin: 0;
87 | padding: 5px 14px;
88 | text-align: center;
89 | }
90 |
91 | .nvtooltip span {
92 | display: inline-block;
93 | margin: 2px 0;
94 | }
95 |
96 | .nvtooltip table {
97 | margin: 6px;
98 | border-spacing:0;
99 | }
100 |
101 |
102 | .nvtooltip table td {
103 | padding: 2px 9px 2px 0;
104 | vertical-align: middle;
105 | }
106 |
107 | .nvtooltip table td.key {
108 | font-weight:normal;
109 | }
110 | .nvtooltip table td.value {
111 | text-align: right;
112 | font-weight: bold;
113 | }
114 |
115 | .nvtooltip table tr.highlight td {
116 | padding: 1px 9px 1px 0;
117 | border-bottom-style: solid;
118 | border-bottom-width: 1px;
119 | border-top-style: solid;
120 | border-top-width: 1px;
121 | }
122 |
123 | .nvtooltip table td.legend-color-guide div {
124 | width: 8px;
125 | height: 8px;
126 | vertical-align: middle;
127 | }
128 |
129 | .nvtooltip .footer {
130 | padding: 3px;
131 | text-align: center;
132 | }
133 |
134 |
135 | .nvtooltip-pending-removal {
136 | position: absolute;
137 | pointer-events: none;
138 | }
139 |
140 |
141 | /********************
142 | * SVG CSS
143 | */
144 |
145 |
146 | svg {
147 | -webkit-touch-callout: none;
148 | -webkit-user-select: none;
149 | -khtml-user-select: none;
150 | -moz-user-select: none;
151 | -ms-user-select: none;
152 | user-select: none;
153 | /* Trying to get SVG to act like a greedy block in all browsers */
154 | display: block;
155 | width:100%;
156 | height:100%;
157 | }
158 |
159 |
160 | svg text {
161 | font: normal 12px Arial;
162 | }
163 |
164 | svg .title {
165 | font: bold 14px Arial;
166 | }
167 |
168 | .nvd3 .nv-background {
169 | fill: white;
170 | fill-opacity: 0;
171 | /*
172 | pointer-events: none;
173 | */
174 | }
175 |
176 | .nvd3.nv-noData {
177 | font-size: 18px;
178 | font-weight: bold;
179 | }
180 |
181 |
182 | /**********
183 | * Brush
184 | */
185 |
186 | .nv-brush .extent {
187 | fill-opacity: .125;
188 | shape-rendering: crispEdges;
189 | }
190 |
191 |
192 |
193 | /**********
194 | * Legend
195 | */
196 |
197 | .nvd3 .nv-legend .nv-series {
198 | cursor: pointer;
199 | }
200 |
201 | .nvd3 .nv-legend .disabled circle {
202 | fill-opacity: 0;
203 | }
204 |
205 |
206 |
207 | /**********
208 | * Axes
209 | */
210 | .nvd3 .nv-axis {
211 | pointer-events:none;
212 | }
213 |
214 | .nvd3 .nv-axis path {
215 | fill: none;
216 | stroke: #000;
217 | stroke-opacity: .75;
218 | shape-rendering: crispEdges;
219 | }
220 |
221 | .nvd3 .nv-axis path.domain {
222 | stroke-opacity: .75;
223 | }
224 |
225 | .nvd3 .nv-axis.nv-x path.domain {
226 | stroke-opacity: 0;
227 | }
228 |
229 | .nvd3 .nv-axis line {
230 | fill: none;
231 | stroke: #e5e5e5;
232 | shape-rendering: crispEdges;
233 | }
234 |
235 | .nvd3 .nv-axis .zero line,
236 | /*this selector may not be necessary*/ .nvd3 .nv-axis line.zero {
237 | stroke-opacity: .75;
238 | }
239 |
240 | .nvd3 .nv-axis .nv-axisMaxMin text {
241 | font-weight: bold;
242 | }
243 |
244 | .nvd3 .x .nv-axis .nv-axisMaxMin text,
245 | .nvd3 .x2 .nv-axis .nv-axisMaxMin text,
246 | .nvd3 .x3 .nv-axis .nv-axisMaxMin text {
247 | text-anchor: middle
248 | }
249 |
250 |
251 |
252 | /**********
253 | * Brush
254 | */
255 |
256 | .nv-brush .resize path {
257 | fill: #eee;
258 | stroke: #666;
259 | }
260 |
261 |
262 |
263 | /**********
264 | * Bars
265 | */
266 |
267 | .nvd3 .nv-bars .negative rect {
268 | zfill: brown;
269 | }
270 |
271 | .nvd3 .nv-bars rect {
272 | zfill: steelblue;
273 | fill-opacity: .75;
274 |
275 | transition: fill-opacity 250ms linear;
276 | -moz-transition: fill-opacity 250ms linear;
277 | -webkit-transition: fill-opacity 250ms linear;
278 | }
279 |
280 | .nvd3 .nv-bars rect.hover {
281 | fill-opacity: 1;
282 | }
283 |
284 | .nvd3 .nv-bars .hover rect {
285 | fill: lightblue;
286 | }
287 |
288 | .nvd3 .nv-bars text {
289 | fill: rgba(0,0,0,0);
290 | }
291 |
292 | .nvd3 .nv-bars .hover text {
293 | fill: rgba(0,0,0,1);
294 | }
295 |
296 |
297 | /**********
298 | * Bars
299 | */
300 |
301 | .nvd3 .nv-multibar .nv-groups rect,
302 | .nvd3 .nv-multibarHorizontal .nv-groups rect,
303 | .nvd3 .nv-discretebar .nv-groups rect {
304 | stroke-opacity: 0;
305 |
306 | transition: fill-opacity 250ms linear;
307 | -moz-transition: fill-opacity 250ms linear;
308 | -webkit-transition: fill-opacity 250ms linear;
309 | }
310 |
311 | .nvd3 .nv-multibar .nv-groups rect:hover,
312 | .nvd3 .nv-multibarHorizontal .nv-groups rect:hover,
313 | .nvd3 .nv-discretebar .nv-groups rect:hover {
314 | fill-opacity: 1;
315 | }
316 |
317 | .nvd3 .nv-discretebar .nv-groups text,
318 | .nvd3 .nv-multibarHorizontal .nv-groups text {
319 | font-weight: bold;
320 | fill: rgba(0,0,0,1);
321 | stroke: rgba(0,0,0,0);
322 | }
323 |
324 | /***********
325 | * Pie Chart
326 | */
327 |
328 | .nvd3.nv-pie path {
329 | stroke-opacity: 0;
330 | transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
331 | -moz-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
332 | -webkit-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
333 |
334 | }
335 |
336 | .nvd3.nv-pie .nv-slice text {
337 | stroke: #000;
338 | stroke-width: 0;
339 | }
340 |
341 | .nvd3.nv-pie path {
342 | stroke: #fff;
343 | stroke-width: 1px;
344 | stroke-opacity: 1;
345 | }
346 |
347 | .nvd3.nv-pie .hover path {
348 | fill-opacity: .7;
349 | }
350 | .nvd3.nv-pie .nv-label {
351 | pointer-events: none;
352 | }
353 | .nvd3.nv-pie .nv-label rect {
354 | fill-opacity: 0;
355 | stroke-opacity: 0;
356 | }
357 |
358 | /**********
359 | * Lines
360 | */
361 |
362 | .nvd3 .nv-groups path.nv-line {
363 | fill: none;
364 | stroke-width: 1.5px;
365 | /*
366 | stroke-linecap: round;
367 | shape-rendering: geometricPrecision;
368 |
369 | transition: stroke-width 250ms linear;
370 | -moz-transition: stroke-width 250ms linear;
371 | -webkit-transition: stroke-width 250ms linear;
372 |
373 | transition-delay: 250ms
374 | -moz-transition-delay: 250ms;
375 | -webkit-transition-delay: 250ms;
376 | */
377 | }
378 |
379 | .nvd3 .nv-groups path.nv-line.nv-thin-line {
380 | stroke-width: 1px;
381 | }
382 |
383 |
384 | .nvd3 .nv-groups path.nv-area {
385 | stroke: none;
386 | /*
387 | stroke-linecap: round;
388 | shape-rendering: geometricPrecision;
389 |
390 | stroke-width: 2.5px;
391 | transition: stroke-width 250ms linear;
392 | -moz-transition: stroke-width 250ms linear;
393 | -webkit-transition: stroke-width 250ms linear;
394 |
395 | transition-delay: 250ms
396 | -moz-transition-delay: 250ms;
397 | -webkit-transition-delay: 250ms;
398 | */
399 | }
400 |
401 | .nvd3 .nv-line.hover path {
402 | stroke-width: 6px;
403 | }
404 |
405 | /*
406 | .nvd3.scatter .groups .point {
407 | fill-opacity: 0.1;
408 | stroke-opacity: 0.1;
409 | }
410 | */
411 |
412 | .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point {
413 | fill-opacity: 0;
414 | stroke-opacity: 0;
415 | }
416 |
417 | .nvd3.nv-scatter.nv-single-point .nv-groups .nv-point {
418 | fill-opacity: .5 !important;
419 | stroke-opacity: .5 !important;
420 | }
421 |
422 |
423 | .with-transitions .nvd3 .nv-groups .nv-point {
424 | transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
425 | -moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
426 | -webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
427 |
428 | }
429 |
430 | .nvd3.nv-scatter .nv-groups .nv-point.hover,
431 | .nvd3 .nv-groups .nv-point.hover {
432 | stroke-width: 7px;
433 | fill-opacity: .95 !important;
434 | stroke-opacity: .95 !important;
435 | }
436 |
437 |
438 | .nvd3 .nv-point-paths path {
439 | stroke: #aaa;
440 | stroke-opacity: 0;
441 | fill: #eee;
442 | fill-opacity: 0;
443 | }
444 |
445 |
446 |
447 | .nvd3 .nv-indexLine {
448 | cursor: ew-resize;
449 | }
450 |
451 |
452 | /**********
453 | * Distribution
454 | */
455 |
456 | .nvd3 .nv-distribution {
457 | pointer-events: none;
458 | }
459 |
460 |
461 |
462 | /**********
463 | * Scatter
464 | */
465 |
466 | /* **Attempting to remove this for useVoronoi(false), need to see if it's required anywhere
467 | .nvd3 .nv-groups .nv-point {
468 | pointer-events: none;
469 | }
470 | */
471 |
472 | .nvd3 .nv-groups .nv-point.hover {
473 | stroke-width: 20px;
474 | stroke-opacity: .5;
475 | }
476 |
477 | .nvd3 .nv-scatter .nv-point.hover {
478 | fill-opacity: 1;
479 | }
480 |
481 | /*
482 | .nv-group.hover .nv-point {
483 | fill-opacity: 1;
484 | }
485 | */
486 |
487 |
488 | /**********
489 | * Stacked Area
490 | */
491 |
492 | .nvd3.nv-stackedarea path.nv-area {
493 | fill-opacity: .7;
494 | /*
495 | stroke-opacity: .65;
496 | fill-opacity: 1;
497 | */
498 | stroke-opacity: 0;
499 |
500 | transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
501 | -moz-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
502 | -webkit-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
503 |
504 | /*
505 | transition-delay: 500ms;
506 | -moz-transition-delay: 500ms;
507 | -webkit-transition-delay: 500ms;
508 | */
509 |
510 | }
511 |
512 | .nvd3.nv-stackedarea path.nv-area.hover {
513 | fill-opacity: .9;
514 | /*
515 | stroke-opacity: .85;
516 | */
517 | }
518 | /*
519 | .d3stackedarea .groups path {
520 | stroke-opacity: 0;
521 | }
522 | */
523 |
524 |
525 |
526 | .nvd3.nv-stackedarea .nv-groups .nv-point {
527 | stroke-opacity: 0;
528 | fill-opacity: 0;
529 | }
530 |
531 | /*
532 | .nvd3.nv-stackedarea .nv-groups .nv-point.hover {
533 | stroke-width: 20px;
534 | stroke-opacity: .75;
535 | fill-opacity: 1;
536 | }*/
537 |
538 |
539 |
540 | /**********
541 | * Line Plus Bar
542 | */
543 |
544 | .nvd3.nv-linePlusBar .nv-bar rect {
545 | fill-opacity: .75;
546 | }
547 |
548 | .nvd3.nv-linePlusBar .nv-bar rect:hover {
549 | fill-opacity: 1;
550 | }
551 |
552 |
553 | /**********
554 | * Bullet
555 | */
556 |
557 | .nvd3.nv-bullet { font: 10px sans-serif; }
558 | .nvd3.nv-bullet .nv-measure { fill-opacity: .8; }
559 | .nvd3.nv-bullet .nv-measure:hover { fill-opacity: 1; }
560 | .nvd3.nv-bullet .nv-marker { stroke: #000; stroke-width: 2px; }
561 | .nvd3.nv-bullet .nv-markerTriangle { stroke: #000; fill: #fff; stroke-width: 1.5px; }
562 | .nvd3.nv-bullet .nv-tick line { stroke: #666; stroke-width: .5px; }
563 | .nvd3.nv-bullet .nv-range.nv-s0 { fill: #eee; }
564 | .nvd3.nv-bullet .nv-range.nv-s1 { fill: #ddd; }
565 | .nvd3.nv-bullet .nv-range.nv-s2 { fill: #ccc; }
566 | .nvd3.nv-bullet .nv-title { font-size: 14px; font-weight: bold; }
567 | .nvd3.nv-bullet .nv-subtitle { fill: #999; }
568 |
569 |
570 | .nvd3.nv-bullet .nv-range {
571 | fill: #bababa;
572 | fill-opacity: .4;
573 | }
574 | .nvd3.nv-bullet .nv-range:hover {
575 | fill-opacity: .7;
576 | }
577 |
578 |
579 |
580 | /**********
581 | * Sparkline
582 | */
583 |
584 | .nvd3.nv-sparkline path {
585 | fill: none;
586 | }
587 |
588 | .nvd3.nv-sparklineplus g.nv-hoverValue {
589 | pointer-events: none;
590 | }
591 |
592 | .nvd3.nv-sparklineplus .nv-hoverValue line {
593 | stroke: #333;
594 | stroke-width: 1.5px;
595 | }
596 |
597 | .nvd3.nv-sparklineplus,
598 | .nvd3.nv-sparklineplus g {
599 | pointer-events: all;
600 | }
601 |
602 | .nvd3 .nv-hoverArea {
603 | fill-opacity: 0;
604 | stroke-opacity: 0;
605 | }
606 |
607 | .nvd3.nv-sparklineplus .nv-xValue,
608 | .nvd3.nv-sparklineplus .nv-yValue {
609 | /*
610 | stroke: #666;
611 | */
612 | stroke-width: 0;
613 | font-size: .9em;
614 | font-weight: normal;
615 | }
616 |
617 | .nvd3.nv-sparklineplus .nv-yValue {
618 | stroke: #f66;
619 | }
620 |
621 | .nvd3.nv-sparklineplus .nv-maxValue {
622 | stroke: #2ca02c;
623 | fill: #2ca02c;
624 | }
625 |
626 | .nvd3.nv-sparklineplus .nv-minValue {
627 | stroke: #d62728;
628 | fill: #d62728;
629 | }
630 |
631 | .nvd3.nv-sparklineplus .nv-currentValue {
632 | /*
633 | stroke: #444;
634 | fill: #000;
635 | */
636 | font-weight: bold;
637 | font-size: 1.1em;
638 | }
639 |
640 | /**********
641 | * historical stock
642 | */
643 |
644 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick {
645 | stroke-width: 2px;
646 | }
647 |
648 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover {
649 | stroke-width: 4px;
650 | }
651 |
652 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive {
653 | stroke: #2ca02c;
654 | }
655 |
656 | .nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative {
657 | stroke: #d62728;
658 | }
659 |
660 | .nvd3.nv-historicalStockChart .nv-axis .nv-axislabel {
661 | font-weight: bold;
662 | }
663 |
664 | .nvd3.nv-historicalStockChart .nv-dragTarget {
665 | fill-opacity: 0;
666 | stroke: none;
667 | cursor: move;
668 | }
669 |
670 | .nvd3 .nv-brush .extent {
671 | /*
672 | cursor: ew-resize !important;
673 | */
674 | fill-opacity: 0 !important;
675 | }
676 |
677 | .nvd3 .nv-brushBackground rect {
678 | stroke: #000;
679 | stroke-width: .4;
680 | fill: #fff;
681 | fill-opacity: .7;
682 | }
683 |
684 |
685 |
686 | /**********
687 | * Indented Tree
688 | */
689 |
690 |
691 | /**
692 | * TODO: the following 3 selectors are based on classes used in the example. I should either make them standard and leave them here, or move to a CSS file not included in the library
693 | */
694 | .nvd3.nv-indentedtree .name {
695 | margin-left: 5px;
696 | }
697 |
698 | .nvd3.nv-indentedtree .clickable {
699 | color: #08C;
700 | cursor: pointer;
701 | }
702 |
703 | .nvd3.nv-indentedtree span.clickable:hover {
704 | color: #005580;
705 | text-decoration: underline;
706 | }
707 |
708 |
709 | .nvd3.nv-indentedtree .nv-childrenCount {
710 | display: inline-block;
711 | margin-left: 5px;
712 | }
713 |
714 | .nvd3.nv-indentedtree .nv-treeicon {
715 | cursor: pointer;
716 | /*
717 | cursor: n-resize;
718 | */
719 | }
720 |
721 | .nvd3.nv-indentedtree .nv-treeicon.nv-folded {
722 | cursor: pointer;
723 | /*
724 | cursor: s-resize;
725 | */
726 | }
727 |
728 | /**********
729 | * Parallel Coordinates
730 | */
731 |
732 | .nvd3 .background path {
733 | fill: none;
734 | stroke: #ccc;
735 | stroke-opacity: .4;
736 | shape-rendering: crispEdges;
737 | }
738 |
739 | .nvd3 .foreground path {
740 | fill: none;
741 | stroke: steelblue;
742 | stroke-opacity: .7;
743 | }
744 |
745 | .nvd3 .brush .extent {
746 | fill-opacity: .3;
747 | stroke: #fff;
748 | shape-rendering: crispEdges;
749 | }
750 |
751 | .nvd3 .axis line, .axis path {
752 | fill: none;
753 | stroke: #000;
754 | shape-rendering: crispEdges;
755 | }
756 |
757 | .nvd3 .axis text {
758 | text-shadow: 0 1px 0 #fff;
759 | }
760 |
761 | /****
762 | Interactive Layer
763 | */
764 | .nvd3 .nv-interactiveGuideLine {
765 | pointer-events:none;
766 | }
767 | .nvd3 line.nv-guideline {
768 | stroke: #ccc;
769 | }
--------------------------------------------------------------------------------
/phpunit/log/coverage/css/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 10px;
3 | }
4 |
5 | .popover {
6 | max-width: none;
7 | }
8 |
9 | .glyphicon {
10 | margin-right:.25em;
11 | }
12 |
13 | .table-bordered>thead>tr>td {
14 | border-bottom-width: 1px;
15 | }
16 |
17 | .table tbody>tr>td, .table thead>tr>td {
18 | padding-top: 3px;
19 | padding-bottom: 3px;
20 | }
21 |
22 | .table-condensed tbody>tr>td {
23 | padding-top: 0;
24 | padding-bottom: 0;
25 | }
26 |
27 | .table .progress {
28 | margin-bottom: inherit;
29 | }
30 |
31 | .table-borderless th, .table-borderless td {
32 | border: 0 !important;
33 | }
34 |
35 | .table tbody td.success, li.success, span.success {
36 | background-color: #dff0d8;
37 | }
38 |
39 | .table tbody tr.danger, .table tbody td.danger, li.danger, span.danger {
40 | background-color: #f2dede;
41 | }
42 |
43 | .table tbody td.warning, li.warning, span.warning {
44 | background-color: #fcf8e3;
45 | }
46 |
47 | .table tbody td.info {
48 | background-color: #d9edf7;
49 | }
50 |
51 | td.big {
52 | width: 117px;
53 | }
54 |
55 | td.small {
56 | }
57 |
58 | td.codeLine {
59 | font-family: monospace;
60 | white-space: pre;
61 | }
62 |
63 | td span.comment {
64 | color: #888a85;
65 | }
66 |
67 | td span.default {
68 | color: #2e3436;
69 | }
70 |
71 | td span.html {
72 | color: #888a85;
73 | }
74 |
75 | td span.keyword {
76 | color: #2e3436;
77 | font-weight: bold;
78 | }
79 |
80 | pre span.string {
81 | color: #2e3436;
82 | }
83 |
84 | span.success, span.warning, span.danger {
85 | margin-right: 2px;
86 | padding-left: 10px;
87 | padding-right: 10px;
88 | text-align: center;
89 | }
90 |
91 | #classCoverageDistribution, #classComplexity {
92 | height: 200px;
93 | width: 475px;
94 | }
95 |
96 | #toplink {
97 | position: fixed;
98 | left: 5px;
99 | bottom: 5px;
100 | outline: 0;
101 | }
102 |
103 | svg text {
104 | font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif;
105 | font-size: 11px;
106 | color: #666;
107 | fill: #666;
108 | }
109 |
110 | .scrollbox {
111 | height:245px;
112 | overflow-x:hidden;
113 | overflow-y:scroll;
114 | }
--------------------------------------------------------------------------------
/phpunit/log/coverage/dashboard.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Dashboard for /var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader
6 |
7 |
8 |
9 |
10 |
14 |
15 |
16 |
29 |
30 |
31 |
32 |
Classes
33 |
34 |
35 |
36 |
37 |
Coverage Distribution
38 |
39 |
40 |
41 |
42 |
43 |
Complexity
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
Insufficient Coverage
52 |
69 |
70 |
71 |
Project Risks
72 |
89 |
90 |
91 |
92 |
93 |
Methods
94 |
95 |
96 |
97 |
98 |
Coverage Distribution
99 |
100 |
101 |
102 |
103 |
104 |
Complexity
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
Insufficient Coverage
113 |
142 |
143 |
144 |
Project Risks
145 |
169 |
170 |
171 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
322 |
323 |
324 |
--------------------------------------------------------------------------------
/phpunit/log/coverage/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stanislav-web/phalcon-uploader/3e46aba5d6f51b52b7830eae21c0d3fe1e524c90/phpunit/log/coverage/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/phpunit/log/coverage/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stanislav-web/phalcon-uploader/3e46aba5d6f51b52b7830eae21c0d3fe1e524c90/phpunit/log/coverage/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/phpunit/log/coverage/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stanislav-web/phalcon-uploader/3e46aba5d6f51b52b7830eae21c0d3fe1e524c90/phpunit/log/coverage/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/phpunit/log/coverage/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Code Coverage for /var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader
6 |
7 |
8 |
9 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | - /var/www/phalcon-devtools/phalcon.local/vendor/stanislav-web/phalcon-uploader/src/Uploader
21 | - (Dashboard)
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | |
33 | Code Coverage |
34 |
35 |
36 | |
37 | Lines |
38 | Functions and Methods |
39 | Classes and Traits |
40 |
41 |
42 |
43 |
44 | Total |
45 |
46 |
47 | 3.42% covered (danger)
48 |
49 |
50 | |
51 | 3.42% |
52 | 4 / 117 |
53 |
54 |
55 | 0.00% covered (danger)
56 |
57 |
58 | |
59 | 0.00% |
60 | 0 / 16 |
61 |
62 |
63 | 0.00% covered (danger)
64 |
65 |
66 | |
67 | 0.00% |
68 | 0 / 4 |
69 |
70 |
71 |
72 | Helpers |
73 |
74 |
75 | 0.00% covered (danger)
76 |
77 |
78 | |
79 | 0.00% |
80 | 0 / 24 |
81 |
82 |
83 | 0.00% covered (danger)
84 |
85 |
86 | |
87 | 0.00% |
88 | 0 / 3 |
89 |
90 |
91 | 0.00% covered (danger)
92 |
93 |
94 | |
95 | 0.00% |
96 | 0 / 2 |
97 |
98 |
99 |
100 | Uploader.php |
101 |
102 |
103 | 7.27% covered (danger)
104 |
105 |
106 | |
107 | 7.27% |
108 | 4 / 55 |
109 |
110 |
111 | 0.00% covered (danger)
112 |
113 |
114 | |
115 | 0.00% |
116 | 0 / 8 |
117 |
118 |
119 | 0.00% covered (danger)
120 |
121 |
122 | |
123 | 0.00% |
124 | 0 / 1 |
125 |
126 |
127 |
128 | Validator.php |
129 |
130 |
131 | 0.00% covered (danger)
132 |
133 |
134 | |
135 | 0.00% |
136 | 0 / 38 |
137 |
138 |
139 | 0.00% covered (danger)
140 |
141 |
142 | |
143 | 0.00% |
144 | 0 / 5 |
145 |
146 |
147 | 0.00% covered (danger)
148 |
149 |
150 | |
151 | 0.00% |
152 | 0 / 1 |
153 |
154 |
155 |
156 |
157 |
158 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
--------------------------------------------------------------------------------
/phpunit/log/coverage/js/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.0 (http://getbootstrap.com)
3 | * Copyright 2011-2014 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.0",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus","focus"==b.type)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.0",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.0",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.checkScrollbar=function(){this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){if(document.body.clientWidth>=window.innerWidth)return 0;var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.0",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-mp.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.0",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)
7 | }(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
--------------------------------------------------------------------------------
/phpunit/log/coverage/js/html5shiv.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
3 | */
4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
--------------------------------------------------------------------------------
/phpunit/log/coverage/js/respond.min.js:
--------------------------------------------------------------------------------
1 | /*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
2 | * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
3 | * */
4 |
5 | !function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b=5.4.28
11 | * @author Stanislav WEB | Lugansk
12 | *
13 | */
14 | class FormatTest extends \PHPUnit_Framework_TestCase
15 | {
16 | /**
17 | * Format class object
18 | *
19 | * @var Format
20 | */
21 | private $format;
22 |
23 | /**
24 | * ReflectionClass
25 | *
26 | * @var \ReflectionClass
27 | */
28 | private $reflection;
29 |
30 | /**
31 | * Initialize testing object
32 | *
33 | * @uses Format
34 | * @uses \ReflectionClass
35 | */
36 | public function setUp()
37 | {
38 | $this->reflection = new \ReflectionClass('Uploader\Helpers\Format');
39 | $this->format = new Format();
40 | }
41 | /**
42 | * Kill testing object
43 | *
44 | * @uses Uploader
45 | */
46 | public function tearDown()
47 | {
48 | $this->format = null;
49 | }
50 |
51 | /**
52 | * Call protected/private method of a class.
53 | *
54 | * @param object &$object Instantiated object that we will run method on.
55 | * @param string $methodName Method name to call
56 | * @param array $parameters Array of parameters to pass into method.
57 | * @example
58 | * $this->invokeMethod($user, 'cryptPassword', array('passwordToCrypt'));
59 | *
60 | * @return mixed Method return.
61 | */
62 | protected function invokeMethod(&$object, $methodName, array $parameters = array())
63 | {
64 | $method = $this->reflection->getMethod($methodName);
65 | $method->setAccessible(true);
66 | return $method->invokeArgs($object, $parameters);
67 | }
68 | /**
69 | * Setup accessible any private (protected) property
70 | *
71 | * @param $name
72 | * @return \ReflectionMethod
73 | */
74 | protected function getProperty($name)
75 | {
76 | $prop = $this->reflection->getProperty($name);
77 | $prop->setAccessible(true);
78 | return $prop;
79 | }
80 |
81 | /**
82 | * @covers Uploader\Helpers\Format::bytes()
83 | */
84 | public function testBytes() {
85 |
86 | }
87 |
88 | }
--------------------------------------------------------------------------------
/phpunit/src/Uploader/Helpers/MessageTest.php:
--------------------------------------------------------------------------------
1 | =5.4.28
11 | * @author Stanislav WEB | Lugansk
12 | *
13 | */
14 | class MessageTest extends \PHPUnit_Framework_TestCase
15 | {
16 | /**
17 | * Format class object
18 | *
19 | * @var Message
20 | */
21 | private $message;
22 |
23 | /**
24 | * ReflectionClass
25 | *
26 | * @var \ReflectionClass
27 | */
28 | private $reflection;
29 |
30 | /**
31 | * Initialize testing object
32 | *
33 | * @uses Format
34 | * @uses \ReflectionClass
35 | */
36 | public function setUp()
37 | {
38 | $this->reflection = new \ReflectionClass('Uploader\Helpers\Message');
39 | $this->message = new Message();
40 | }
41 | /**
42 | * Kill testing object
43 | *
44 | * @uses Uploader
45 | */
46 | public function tearDown()
47 | {
48 | $this->message = null;
49 | }
50 |
51 | /**
52 | * Call protected/private method of a class.
53 | *
54 | * @param object &$object Instantiated object that we will run method on.
55 | * @param string $methodName Method name to call
56 | * @param array $parameters Array of parameters to pass into method.
57 | * @example
58 | * $this->invokeMethod($user, 'cryptPassword', array('passwordToCrypt'));
59 | *
60 | * @return mixed Method return.
61 | */
62 | protected function invokeMethod(&$object, $methodName, array $parameters = array())
63 | {
64 | $method = $this->reflection->getMethod($methodName);
65 | $method->setAccessible(true);
66 | return $method->invokeArgs($object, $parameters);
67 | }
68 | /**
69 | * Setup accessible any private (protected) property
70 | *
71 | * @param $name
72 | * @return \ReflectionMethod
73 | */
74 | protected function getProperty($name)
75 | {
76 | $prop = $this->reflection->getProperty($name);
77 | $prop->setAccessible(true);
78 | return $prop;
79 | }
80 |
81 | /**
82 | * @covers Uploader\Helpers\Message::get()
83 | */
84 | public function testGet() {
85 |
86 | }
87 |
88 | }
--------------------------------------------------------------------------------
/phpunit/src/Uploader/UploaderTest.php:
--------------------------------------------------------------------------------
1 | =5.4.28
11 | * @author Stanislav WEB | Lugansk
12 | *
13 | */
14 | class UploaderTest extends \PHPUnit_Framework_TestCase
15 | {
16 | /**
17 | * Uploader class object
18 | *
19 | * @var Uploader
20 | */
21 | private $uploader;
22 |
23 | /**
24 | * ReflectionClass
25 | *
26 | * @var \ReflectionClass
27 | */
28 | private $reflection;
29 |
30 | /**
31 | * Initialize testing object
32 | *
33 | * @uses Uploader
34 | * @uses \ReflectionClass
35 | */
36 | public function setUp()
37 | {
38 | $this->reflection = new \ReflectionClass('Uploader\Uploader');
39 | $this->uploader = new Uploader();
40 | }
41 | /**
42 | * Kill testing object
43 | *
44 | * @uses Uploader
45 | */
46 | public function tearDown()
47 | {
48 | $this->uploader = null;
49 | }
50 |
51 | /**
52 | * Call protected/private method of a class.
53 | *
54 | * @param object &$object Instantiated object that we will run method on.
55 | * @param string $methodName Method name to call
56 | * @param array $parameters Array of parameters to pass into method.
57 | * @example
58 | * $this->invokeMethod($user, 'cryptPassword', array('passwordToCrypt'));
59 | *
60 | * @return mixed Method return.
61 | */
62 | protected function invokeMethod(&$object, $methodName, array $parameters = array())
63 | {
64 | $method = $this->reflection->getMethod($methodName);
65 | $method->setAccessible(true);
66 | return $method->invokeArgs($object, $parameters);
67 | }
68 | /**
69 | * Setup accessible any private (protected) property
70 | *
71 | * @param $name
72 | * @return \ReflectionMethod
73 | */
74 | protected function getProperty($name)
75 | {
76 | $prop = $this->reflection->getProperty($name);
77 | $prop->setAccessible(true);
78 | return $prop;
79 | }
80 |
81 | /**
82 | * @covers Uploader\Uploader::__construct()
83 | */
84 | public function testConstructor() {
85 |
86 | }
87 | }
--------------------------------------------------------------------------------
/phpunit/src/Uploader/ValidatorTest.php:
--------------------------------------------------------------------------------
1 | =5.4.28
11 | * @author Stanislav WEB | Lugansk
12 | *
13 | */
14 | class ValidatorTest extends \PHPUnit_Framework_TestCase
15 | {
16 | /**
17 | * Validator class object
18 | *
19 | * @var Validator
20 | */
21 | private $validator;
22 |
23 | /**
24 | * ReflectionClass
25 | *
26 | * @var \ReflectionClass
27 | */
28 | private $reflection;
29 |
30 | /**
31 | * Initialize testing object
32 | *
33 | * @uses Validator
34 | * @uses \ReflectionClass
35 | */
36 | public function setUp()
37 | {
38 | $this->reflection = new \ReflectionClass('Uploader\Validator');
39 | $this->validator = new Validator();
40 | }
41 | /**
42 | * Kill testing object
43 | *
44 | * @uses Uploader
45 | */
46 | public function tearDown()
47 | {
48 | $this->validator = null;
49 | }
50 |
51 | /**
52 | * Call protected/private method of a class.
53 | *
54 | * @param object &$object Instantiated object that we will run method on.
55 | * @param string $methodName Method name to call
56 | * @param array $parameters Array of parameters to pass into method.
57 | * @example
58 | * $this->invokeMethod($user, 'cryptPassword', array('passwordToCrypt'));
59 | *
60 | * @return mixed Method return.
61 | */
62 | protected function invokeMethod(&$object, $methodName, array $parameters = array())
63 | {
64 | $method = $this->reflection->getMethod($methodName);
65 | $method->setAccessible(true);
66 | return $method->invokeArgs($object, $parameters);
67 | }
68 | /**
69 | * Setup accessible any private (protected) property
70 | *
71 | * @param $name
72 | * @return \ReflectionMethod
73 | */
74 | protected function getProperty($name)
75 | {
76 | $prop = $this->reflection->getProperty($name);
77 | $prop->setAccessible(true);
78 | return $prop;
79 | }
80 |
81 | /**
82 | * @covers Uploader\Validator::checkMinsize()
83 | */
84 | public function testMinsize() {
85 |
86 | }
87 | }
--------------------------------------------------------------------------------
/src/Uploader/Helpers/Format.php:
--------------------------------------------------------------------------------
1 | =5.4
10 | * @version 1.0
11 | * @author Stanislav WEB | Lugansk
12 | * @copyright Stanislav WEB
13 | */
14 | class Format
15 | {
16 | /**
17 | * Cyrillic symbols
18 | *
19 | * @var array
20 | */
21 | static private $cyr = array(
22 | 'Щ', 'Ш', 'Ч', 'Ц', 'Ю', 'Я', 'Ж', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О',
23 | 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ь', 'Ы', 'Ъ', 'Э', 'Є', 'Ї', 'І',
24 | 'щ', 'ш', 'ч', 'ц', 'ю', 'я', 'ж', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о',
25 | 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ь', 'ы', 'ъ', 'э', 'є', 'ї', 'і');
26 |
27 | /**
28 | * Latin symbols
29 | *
30 | * @var array
31 | */
32 | static private $lat = array(
33 | 'Shh', 'Sh', 'Ch', 'C', 'Ju', 'Ja', 'Zh', 'A', 'B', 'V', 'G', 'D', 'Je', 'Jo', 'Z', 'I', 'J', 'K', 'L', 'M',
34 | 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'Kh', 'Y', 'Y', '', 'E', 'Je', 'Ji', 'I',
35 | 'shh', 'sh', 'ch', 'c', 'ju', 'ja', 'zh', 'a', 'b', 'v', 'g', 'd', 'je', 'jo', 'z', 'i', 'j', 'k', 'l', 'm',
36 | 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'kh', 'y', 'y', '', 'e', 'je', 'ji', 'i');
37 |
38 | /**
39 | * Format byte code to human understand
40 | *
41 | * @param int $bytes number of bytes
42 | * @param int $precision after comma numbers
43 | * @return string
44 | */
45 | public static function bytes($bytes, $precision = 2)
46 | {
47 | $size = array('bytes', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb');
48 | $factor = floor((strlen($bytes) - 1) / 3);
49 | return sprintf("%.{$precision}f", $bytes / pow(1024, $factor)) . ' ' . @$size[$factor];
50 | }
51 |
52 | /**
53 | * Transliterate cyrillic to latin
54 | *
55 | * @param string $string original string
56 | * @param string $separator word separator
57 | * @param boolean $clean to lower & all non understand symbols remove
58 | * @return string
59 | */
60 | public static function toLatin($string, $separator = '', $clean = false)
61 | {
62 | $cyrillicCount = count(self::$cyr);
63 |
64 | for ($i = 0; $i < $cyrillicCount; $i++) {
65 | $string = str_replace(self::$cyr[$i], self::$lat[$i], $string);
66 | }
67 |
68 | $string = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]e/", "\${1}e", $string);
69 | $string = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]/", "\${1}y", $string);
70 | $string = preg_replace("/([eyuioaEYUIOA]+)[Kk]h/", "\${1}h", $string);
71 | $string = preg_replace("/^kh/", "h", $string);
72 | $string = preg_replace("/^Kh/", "H", $string);
73 |
74 | $string = trim($string);
75 |
76 | if (empty($separator) === false) {
77 |
78 | $string = str_replace(' ', $separator, $string);
79 | $string = preg_replace('/['.$separator.']{2,}/', '', $string);
80 | }
81 |
82 | if ($clean !== false) {
83 |
84 | $string = strtolower($string);
85 | $string = preg_replace('/[^-_a-z0-9.]+/', '', $string);
86 | }
87 |
88 | return $string;
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/src/Uploader/Helpers/Message.php:
--------------------------------------------------------------------------------
1 | =5.4
10 | * @version 1.0
11 | * @author Stanislav WEB | Lugansk
12 | * @copyright Stanislav WEB
13 | */
14 | class Message
15 | {
16 | /**
17 | * Error messages collect
18 | *
19 | * @access private
20 | * @var array
21 | */
22 | private static $messages = [
23 | 'INVALID_MIN_SIZE' => 'The %s file is small to download. The minimum allowable %s',
24 | 'INVALID_MAX_SIZE' => 'The %s file is big to download. The maximum allowable %s',
25 | 'INVALID_EXTENSION' => 'File %s has invalid extension. Allowable only: %s',
26 | 'INVALID_MIME_TYPES' => 'File %s has invalid mime type. Allowable only: %s',
27 | 'INVALID_UPLOAD_DIR' => 'The specified directory %s is not a directory download',
28 | 'INVALID_PERMISSION_DIR' => 'The specified directory %s is not writable',
29 | ];
30 |
31 | /**
32 | * Get message
33 | *
34 | * @param string $key
35 | * @return mixed
36 | */
37 | public static function get($key)
38 | {
39 | if (isset(self::$messages[$key]) === true) {
40 | return self::$messages[$key];
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/Uploader/Uploader.php:
--------------------------------------------------------------------------------
1 | =5.4
12 | * @version 1.0
13 | * @author Stanislav WEB | Lugansk
14 | * @copyright Stanislav WEB
15 | */
16 | class Uploader {
17 |
18 | /**
19 | * Request
20 | *
21 | * @var \Phalcon\Http\Request $rules
22 | */
23 | private $request;
24 |
25 | /**
26 | * File
27 | *
28 | * @var \Phalcon\Http\Request\File $files
29 | */
30 | private $files;
31 |
32 | /**
33 | * Validation Rules
34 | *
35 | * @var array $rules
36 | */
37 | private $rules = [];
38 |
39 | /**
40 | * Uploaded files array
41 | *
42 | * @var array $info
43 | */
44 | private $info;
45 |
46 | /**
47 | * Validator
48 | *
49 | * @var \Uploader\Validator
50 | */
51 | private $validator;
52 |
53 | /**
54 | * Initialize rules
55 | *
56 | * @param array $rules
57 | */
58 | public function __construct($rules = [])
59 | {
60 | if (empty($rules) === false) {
61 | $this->setRules($rules);
62 | }
63 |
64 | // get validator
65 | $this->validator = new Validator();
66 | // get current request
67 | $this->request = new Request();
68 | }
69 |
70 | /**
71 | * Setting up rules for uploaded files
72 | *
73 | * @param array $rules
74 | * @return Uploader
75 | */
76 | public function setRules(array $rules)
77 | {
78 | foreach ($rules as $key => $values) {
79 |
80 | if ((is_array($values) === true && empty($values) === false) || is_callable($values)) {
81 | $this->rules[$key] = $values;
82 | } else {
83 | $this->rules[$key] = trim($values);
84 | }
85 | }
86 |
87 | return $this;
88 | }
89 |
90 | /**
91 | * Check if upload files are valid
92 | *
93 | * @return bool
94 | */
95 | public function isValid()
96 | {
97 | // get files for upload
98 | $this->files = $this->request->getUploadedFiles();
99 |
100 | if (sizeof($this->files) > 0) {
101 |
102 | // do any actions if files exists
103 |
104 | foreach ($this->files as $n => $file) {
105 |
106 | // apply all the validation rules for each file
107 |
108 | foreach ($this->rules as $key => $rule) {
109 |
110 | if (method_exists($this->validator, 'check' . ucfirst($key)) === true) {
111 | $this->validator->{'check' . ucfirst($key)}($file, $rule);
112 | }
113 | }
114 | }
115 | }
116 |
117 | $errors = $this->getErrors();
118 |
119 | return (empty($errors) === true) ? true : false;
120 | }
121 |
122 | /**
123 | * Check if upload files are valid
124 | *
125 | * @return void
126 | */
127 | public function move()
128 | {
129 | // do any actions if files exists
130 |
131 | foreach ($this->files as $n => $file) {
132 |
133 | $filename = $file->getName();
134 |
135 | if (isset($this->rules['hash']) === true) {
136 | if (empty($this->rules['hash']) === true) {
137 | $this->rules['hash'] = 'md5';
138 | }
139 |
140 | if (!is_string($this->rules['hash']) === true) {
141 | $filename = call_user_func($this->rules['hash']) . '.' . $file->getExtension();
142 | } else {
143 | $filename = $this->rules['hash']($filename) . '.' . $file->getExtension();
144 | }
145 | }
146 |
147 | if (isset($this->rules['sanitize']) === true) {
148 | $filename = Format::toLatin($filename, '', true);
149 | }
150 |
151 | if (isset($this->rules['directory'])) {
152 | $tmp = rtrim($this->rules['directory'], '/') . DIRECTORY_SEPARATOR . $filename;
153 | } else {
154 | $tmp = rtrim($this->rules['dynamic'], '/') . DIRECTORY_SEPARATOR . $filename;
155 |
156 | }
157 |
158 | // move file to target directory
159 | $isUploaded = $file->moveTo($tmp);
160 |
161 | if ($isUploaded === true) {
162 | $this->info[] = [
163 | 'path' => $tmp,
164 | 'directory' => dirname($tmp),
165 | 'filename' => $filename,
166 | 'size' => $file->getSize(),
167 | 'extension' => $file->getExtension(),
168 | ];
169 | }
170 | }
171 |
172 | return $this->getInfo();
173 | }
174 |
175 | /**
176 | * Return errors messages
177 | *
178 | * @return array
179 | */
180 | public function getErrors()
181 | {
182 | // error container
183 | return $this->validator->errors;
184 | }
185 |
186 | /**
187 | * Get uploaded files info
188 | *
189 | * @return \Phalcon\Session\Adapter\Files
190 | */
191 | public function getInfo()
192 | {
193 | // error container
194 | return $this->info;
195 | }
196 |
197 | /**
198 | * Truncate uploaded files
199 | */
200 | public function truncate()
201 | {
202 | if (empty($this->info) === false) {
203 | foreach ($this->info as $n => $file) {
204 | if (file_exists($file['path'])) {
205 | unlink($file['path']);
206 | }
207 | }
208 | }
209 | }
210 | }
211 |
--------------------------------------------------------------------------------
/src/Uploader/Validator.php:
--------------------------------------------------------------------------------
1 | =5.4
12 | * @version 1.0
13 | * @author Stanislav WEB | Lugansk
14 | * @copyright Stanislav WEB
15 | */
16 | class Validator
17 | {
18 |
19 | /**
20 | * Error message container
21 | * @var array $rules
22 | */
23 | public $errors = [];
24 |
25 | /**
26 | * Check minimum file size
27 | *
28 | * @param \Phalcon\Http\Request\File $file
29 | * @param $value
30 | * @return bool
31 | */
32 | public function checkMinsize(\Phalcon\Http\Request\File $file, $value)
33 | {
34 | // conversion to the desired format
35 |
36 | if (is_array($value) === true) {
37 | $value = $value[key($value)];
38 | }
39 |
40 | // check
41 |
42 | if ($file->getSize() < (int) $value) {
43 |
44 | $this->errors[] = sprintf(Message::get('INVALID_MIN_SIZE'), $file->getName(), Format::bytes($value));
45 | return false;
46 | }
47 |
48 | return true;
49 | }
50 |
51 | /**
52 | * Check maximum file size
53 | *
54 | * @param \Phalcon\Http\Request\File $file
55 | * @param mixed $value
56 | * @return bool
57 | */
58 | public function checkMaxsize(\Phalcon\Http\Request\File $file, $value)
59 | {
60 | //conversion to the desired format
61 |
62 | if (is_array($value) === true) {
63 | $value = $value[key($value)];
64 | }
65 |
66 | // check
67 |
68 | if ($file->getSize() > (int) $value) {
69 |
70 | $this->errors[] = sprintf(Message::get('INVALID_MAX_SIZE'), $file->getName(), Format::bytes($value));
71 | return false;
72 | }
73 |
74 | return true;
75 | }
76 |
77 | /**
78 | * Check file allowed extensions
79 | *
80 | * @param \Phalcon\Http\Request\File $file
81 | * @param mixed $value
82 | * @return bool
83 | */
84 | public function checkExtensions(\Phalcon\Http\Request\File $file, $value)
85 | {
86 | //conversion to the desired format
87 |
88 | if (is_array($value) === false) {
89 | $value = [$value];
90 | }
91 |
92 | // check
93 |
94 | if (in_array(strtolower($file->getExtension()), $value) === false) {
95 |
96 | $this->errors[] = sprintf(Message::get('INVALID_EXTENSION'), $file->getName(), implode(',', $value));
97 |
98 | return false;
99 | }
100 |
101 | return true;
102 | }
103 |
104 | /**
105 | * Check file allowed extensions
106 | *
107 | * @param \Phalcon\Http\Request\File $file
108 | * @param mixed $value
109 | * @return bool
110 | */
111 | public function checkMimes(\Phalcon\Http\Request\File $file, $value)
112 | {
113 | //conversion to the desired format
114 |
115 | if (is_array($value) === false) {
116 | $value = [$value];
117 | }
118 |
119 | if (in_array($file->getRealType(), $value) === false) {
120 |
121 | $this->errors[] = sprintf(Message::get('INVALID_MIME_TYPES'), $file->getName(), implode(',', $value));
122 |
123 | return false;
124 | }
125 |
126 | return true;
127 | }
128 |
129 | /**
130 | * Check upload directory
131 | *
132 | * @param null|\Phalcon\Http\Request\File $file
133 | * @param mixed $value
134 | * @param $value
135 | * @return bool
136 | */
137 | public function checkDirectory(\Phalcon\Http\Request\File $file = null, $value)
138 | {
139 | // conversion to the desired format
140 |
141 | if (is_array($value) === true) {
142 | $value = $value[key($value)];
143 | }
144 |
145 | if (file_exists($value) === false) {
146 |
147 | $this->errors[] = sprintf(Message::get('INVALID_UPLOAD_DIR'), $value);
148 | return false;
149 | }
150 |
151 | if (is_writable($value) === false) {
152 |
153 | $this->errors[] = sprintf(Message::get('INVALID_PERMISSION_DIR'), $value);
154 | return false;
155 | }
156 |
157 | return true;
158 | }
159 |
160 | /**
161 | * Create Directory if not exist
162 | *
163 | * @param null|\Phalcon\Http\Request\File $file
164 | * @param string $directory
165 | * @param int $permission
166 | * @version v1.4
167 | * @author Mahdi-Mohammadi
168 | * @return bool
169 | */
170 | public function checkDynamic(\Phalcon\Http\Request\File $file = null, $directory, $permission = 0777)
171 | {
172 | if (is_dir($directory) === false && file_exists($directory) === false) {
173 | mkdir(rtrim($directory,'/') . DIRECTORY_SEPARATOR, $permission, true);
174 | }
175 |
176 | return true;
177 | }
178 | }
179 |
--------------------------------------------------------------------------------
/vendor/autoload.php:
--------------------------------------------------------------------------------
1 |
7 | * Jordi Boggiano
8 | *
9 | * For the full copyright and license information, please view the LICENSE
10 | * file that was distributed with this source code.
11 | */
12 |
13 | namespace Composer\Autoload;
14 |
15 | /**
16 | * ClassLoader implements a PSR-0 class loader
17 | *
18 | * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
19 | *
20 | * $loader = new \Composer\Autoload\ClassLoader();
21 | *
22 | * // register classes with namespaces
23 | * $loader->add('Symfony\Component', __DIR__.'/component');
24 | * $loader->add('Symfony', __DIR__.'/framework');
25 | *
26 | * // activate the autoloader
27 | * $loader->register();
28 | *
29 | * // to enable searching the include path (eg. for PEAR packages)
30 | * $loader->setUseIncludePath(true);
31 | *
32 | * In this example, if you try to use a class in the Symfony\Component
33 | * namespace or one of its children (Symfony\Component\Console for instance),
34 | * the autoloader will first look for the class under the component/
35 | * directory, and it will then fallback to the framework/ directory if not
36 | * found before giving up.
37 | *
38 | * This class is loosely based on the Symfony UniversalClassLoader.
39 | *
40 | * @author Fabien Potencier
41 | * @author Jordi Boggiano
42 | */
43 | class ClassLoader
44 | {
45 | // PSR-4
46 | private $prefixLengthsPsr4 = array();
47 | private $prefixDirsPsr4 = array();
48 | private $fallbackDirsPsr4 = array();
49 |
50 | // PSR-0
51 | private $prefixesPsr0 = array();
52 | private $fallbackDirsPsr0 = array();
53 |
54 | private $useIncludePath = false;
55 | private $classMap = array();
56 |
57 | public function getPrefixes()
58 | {
59 | if (!empty($this->prefixesPsr0)) {
60 | return call_user_func_array('array_merge', $this->prefixesPsr0);
61 | }
62 |
63 | return array();
64 | }
65 |
66 | public function getPrefixesPsr4()
67 | {
68 | return $this->prefixDirsPsr4;
69 | }
70 |
71 | public function getFallbackDirs()
72 | {
73 | return $this->fallbackDirsPsr0;
74 | }
75 |
76 | public function getFallbackDirsPsr4()
77 | {
78 | return $this->fallbackDirsPsr4;
79 | }
80 |
81 | public function getClassMap()
82 | {
83 | return $this->classMap;
84 | }
85 |
86 | /**
87 | * @param array $classMap Class to filename map
88 | */
89 | public function addClassMap(array $classMap)
90 | {
91 | if ($this->classMap) {
92 | $this->classMap = array_merge($this->classMap, $classMap);
93 | } else {
94 | $this->classMap = $classMap;
95 | }
96 | }
97 |
98 | /**
99 | * Registers a set of PSR-0 directories for a given prefix, either
100 | * appending or prepending to the ones previously set for this prefix.
101 | *
102 | * @param string $prefix The prefix
103 | * @param array|string $paths The PSR-0 root directories
104 | * @param bool $prepend Whether to prepend the directories
105 | */
106 | public function add($prefix, $paths, $prepend = false)
107 | {
108 | if (!$prefix) {
109 | if ($prepend) {
110 | $this->fallbackDirsPsr0 = array_merge(
111 | (array) $paths,
112 | $this->fallbackDirsPsr0
113 | );
114 | } else {
115 | $this->fallbackDirsPsr0 = array_merge(
116 | $this->fallbackDirsPsr0,
117 | (array) $paths
118 | );
119 | }
120 |
121 | return;
122 | }
123 |
124 | $first = $prefix[0];
125 | if (!isset($this->prefixesPsr0[$first][$prefix])) {
126 | $this->prefixesPsr0[$first][$prefix] = (array) $paths;
127 |
128 | return;
129 | }
130 | if ($prepend) {
131 | $this->prefixesPsr0[$first][$prefix] = array_merge(
132 | (array) $paths,
133 | $this->prefixesPsr0[$first][$prefix]
134 | );
135 | } else {
136 | $this->prefixesPsr0[$first][$prefix] = array_merge(
137 | $this->prefixesPsr0[$first][$prefix],
138 | (array) $paths
139 | );
140 | }
141 | }
142 |
143 | /**
144 | * Registers a set of PSR-4 directories for a given namespace, either
145 | * appending or prepending to the ones previously set for this namespace.
146 | *
147 | * @param string $prefix The prefix/namespace, with trailing '\\'
148 | * @param array|string $paths The PSR-0 base directories
149 | * @param bool $prepend Whether to prepend the directories
150 | *
151 | * @throws \InvalidArgumentException
152 | */
153 | public function addPsr4($prefix, $paths, $prepend = false)
154 | {
155 | if (!$prefix) {
156 | // Register directories for the root namespace.
157 | if ($prepend) {
158 | $this->fallbackDirsPsr4 = array_merge(
159 | (array) $paths,
160 | $this->fallbackDirsPsr4
161 | );
162 | } else {
163 | $this->fallbackDirsPsr4 = array_merge(
164 | $this->fallbackDirsPsr4,
165 | (array) $paths
166 | );
167 | }
168 | } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
169 | // Register directories for a new namespace.
170 | $length = strlen($prefix);
171 | if ('\\' !== $prefix[$length - 1]) {
172 | throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
173 | }
174 | $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
175 | $this->prefixDirsPsr4[$prefix] = (array) $paths;
176 | } elseif ($prepend) {
177 | // Prepend directories for an already registered namespace.
178 | $this->prefixDirsPsr4[$prefix] = array_merge(
179 | (array) $paths,
180 | $this->prefixDirsPsr4[$prefix]
181 | );
182 | } else {
183 | // Append directories for an already registered namespace.
184 | $this->prefixDirsPsr4[$prefix] = array_merge(
185 | $this->prefixDirsPsr4[$prefix],
186 | (array) $paths
187 | );
188 | }
189 | }
190 |
191 | /**
192 | * Registers a set of PSR-0 directories for a given prefix,
193 | * replacing any others previously set for this prefix.
194 | *
195 | * @param string $prefix The prefix
196 | * @param array|string $paths The PSR-0 base directories
197 | */
198 | public function set($prefix, $paths)
199 | {
200 | if (!$prefix) {
201 | $this->fallbackDirsPsr0 = (array) $paths;
202 | } else {
203 | $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
204 | }
205 | }
206 |
207 | /**
208 | * Registers a set of PSR-4 directories for a given namespace,
209 | * replacing any others previously set for this namespace.
210 | *
211 | * @param string $prefix The prefix/namespace, with trailing '\\'
212 | * @param array|string $paths The PSR-4 base directories
213 | *
214 | * @throws \InvalidArgumentException
215 | */
216 | public function setPsr4($prefix, $paths)
217 | {
218 | if (!$prefix) {
219 | $this->fallbackDirsPsr4 = (array) $paths;
220 | } else {
221 | $length = strlen($prefix);
222 | if ('\\' !== $prefix[$length - 1]) {
223 | throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
224 | }
225 | $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
226 | $this->prefixDirsPsr4[$prefix] = (array) $paths;
227 | }
228 | }
229 |
230 | /**
231 | * Turns on searching the include path for class files.
232 | *
233 | * @param bool $useIncludePath
234 | */
235 | public function setUseIncludePath($useIncludePath)
236 | {
237 | $this->useIncludePath = $useIncludePath;
238 | }
239 |
240 | /**
241 | * Can be used to check if the autoloader uses the include path to check
242 | * for classes.
243 | *
244 | * @return bool
245 | */
246 | public function getUseIncludePath()
247 | {
248 | return $this->useIncludePath;
249 | }
250 |
251 | /**
252 | * Registers this instance as an autoloader.
253 | *
254 | * @param bool $prepend Whether to prepend the autoloader or not
255 | */
256 | public function register($prepend = false)
257 | {
258 | spl_autoload_register(array($this, 'loadClass'), true, $prepend);
259 | }
260 |
261 | /**
262 | * Unregisters this instance as an autoloader.
263 | */
264 | public function unregister()
265 | {
266 | spl_autoload_unregister(array($this, 'loadClass'));
267 | }
268 |
269 | /**
270 | * Loads the given class or interface.
271 | *
272 | * @param string $class The name of the class
273 | * @return bool|null True if loaded, null otherwise
274 | */
275 | public function loadClass($class)
276 | {
277 | if ($file = $this->findFile($class)) {
278 | includeFile($file);
279 |
280 | return true;
281 | }
282 | }
283 |
284 | /**
285 | * Finds the path to the file where the class is defined.
286 | *
287 | * @param string $class The name of the class
288 | *
289 | * @return string|false The path if found, false otherwise
290 | */
291 | public function findFile($class)
292 | {
293 | // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
294 | if ('\\' == $class[0]) {
295 | $class = substr($class, 1);
296 | }
297 |
298 | // class map lookup
299 | if (isset($this->classMap[$class])) {
300 | return $this->classMap[$class];
301 | }
302 |
303 | $file = $this->findFileWithExtension($class, '.php');
304 |
305 | // Search for Hack files if we are running on HHVM
306 | if ($file === null && defined('HHVM_VERSION')) {
307 | $file = $this->findFileWithExtension($class, '.hh');
308 | }
309 |
310 | if ($file === null) {
311 | // Remember that this class does not exist.
312 | return $this->classMap[$class] = false;
313 | }
314 |
315 | return $file;
316 | }
317 |
318 | private function findFileWithExtension($class, $ext)
319 | {
320 | // PSR-4 lookup
321 | $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
322 |
323 | $first = $class[0];
324 | if (isset($this->prefixLengthsPsr4[$first])) {
325 | foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
326 | if (0 === strpos($class, $prefix)) {
327 | foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
328 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
329 | return $file;
330 | }
331 | }
332 | }
333 | }
334 | }
335 |
336 | // PSR-4 fallback dirs
337 | foreach ($this->fallbackDirsPsr4 as $dir) {
338 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
339 | return $file;
340 | }
341 | }
342 |
343 | // PSR-0 lookup
344 | if (false !== $pos = strrpos($class, '\\')) {
345 | // namespaced class name
346 | $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
347 | . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
348 | } else {
349 | // PEAR-like class name
350 | $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
351 | }
352 |
353 | if (isset($this->prefixesPsr0[$first])) {
354 | foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
355 | if (0 === strpos($class, $prefix)) {
356 | foreach ($dirs as $dir) {
357 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
358 | return $file;
359 | }
360 | }
361 | }
362 | }
363 | }
364 |
365 | // PSR-0 fallback dirs
366 | foreach ($this->fallbackDirsPsr0 as $dir) {
367 | if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
368 | return $file;
369 | }
370 | }
371 |
372 | // PSR-0 include paths.
373 | if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
374 | return $file;
375 | }
376 | }
377 | }
378 |
379 | /**
380 | * Scope isolated include.
381 | *
382 | * Prevents access to $this/self from included files.
383 | */
384 | function includeFile($file)
385 | {
386 | include $file;
387 | }
388 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_classmap.php:
--------------------------------------------------------------------------------
1 | $baseDir . '/phpunit/src/Uploader/Helpers/FormatTest.php',
10 | 'Test\\Uploader\\Helpers\\MessageTest' => $baseDir . '/phpunit/src/Uploader/Helpers/MessageTest.php',
11 | 'Test\\Uploader\\UploaderTest' => $baseDir . '/phpunit/src/Uploader/UploaderTest.php',
12 | 'Test\\Uploader\\ValidatorTest' => $baseDir . '/phpunit/src/Uploader/ValidatorTest.php',
13 | 'Uploader\\Helpers\\Format' => $baseDir . '/src/Uploader/Helpers/Format.php',
14 | 'Uploader\\Helpers\\Message' => $baseDir . '/src/Uploader/Helpers/Message.php',
15 | 'Uploader\\Uploader' => $baseDir . '/src/Uploader/Uploader.php',
16 | 'Uploader\\Validator' => $baseDir . '/src/Uploader/Validator.php',
17 | );
18 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_namespaces.php:
--------------------------------------------------------------------------------
1 | array($baseDir . '/src/Uploader'),
10 | 'Test\\Uploader\\' => array($baseDir . '/phpunit/src/Uploader'),
11 | );
12 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_real.php:
--------------------------------------------------------------------------------
1 | $path) {
28 | $loader->set($namespace, $path);
29 | }
30 |
31 | $map = require __DIR__ . '/autoload_psr4.php';
32 | foreach ($map as $namespace => $path) {
33 | $loader->setPsr4($namespace, $path);
34 | }
35 |
36 | $classMap = require __DIR__ . '/autoload_classmap.php';
37 | if ($classMap) {
38 | $loader->addClassMap($classMap);
39 | }
40 |
41 | $loader->register(true);
42 |
43 | return $loader;
44 | }
45 | }
46 |
47 | function composerRequire281d4222ce45947a36696868176ae7c4($file)
48 | {
49 | require $file;
50 | }
51 |
--------------------------------------------------------------------------------