diff --git a/.all-contributorsrc b/.all-contributorsrc
index 2b182a2476..97801eafa9 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -2333,6 +2333,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "tbrconnect",
+ "name": "tbrconnect",
+ "avatar_url": "https://avatars.githubusercontent.com/u/11973217?v=4",
+ "profile": "https://github.com/tbrconnect",
+ "contributions": [
+ "code"
+ ]
}
]
}
diff --git a/Dockerfile.alpine b/Dockerfile.alpine
index 64cac8df22..6b52b74f9a 100644
--- a/Dockerfile.alpine
+++ b/Dockerfile.alpine
@@ -1,4 +1,4 @@
-FROM alpine:3.12
+FROM alpine:3.13
# Apache + PHP
RUN apk add --no-cache \
apache2 \
diff --git a/README.md b/README.md
index 0b7f4c3dec..5c5e40fad6 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
![Build Status](https://app.chipperci.com/projects/0e5f8979-31eb-4ee6-9abf-050b76ab0383/status/master) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/snipe-it/localized.svg)](https://crowdin.com/project/snipe-it) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/snipe/snipe-it?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Docker Pulls](https://img.shields.io/docker/pulls/snipe/snipe-it.svg)](https://hub.docker.com/r/snipe/snipe-it/) [![Twitter Follow](https://img.shields.io/twitter/follow/snipeitapp.svg?style=social)](https://twitter.com/snipeitapp) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/553ce52037fc43ea99149785afcfe641)](https://www.codacy.com/app/snipe/snipe-it?utm_source=github.com&utm_medium=referral&utm_content=snipe/snipe-it&utm_campaign=Badge_Grade)
-[![All Contributors](https://img.shields.io/badge/all_contributors-256-orange.svg?style=flat-square)](#contributors)
+[![All Contributors](https://img.shields.io/badge/all_contributors-257-orange.svg?style=flat-square)](#contributors)
## Snipe-IT - Open Source Asset Management System
@@ -125,7 +125,7 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken
| [
Kevin KΓΆllmann](https://www.kevinkoellmann.de)
[π»](https://github.com/snipe/snipe-it/commits?author=koelle25 "Code") | [
sw-mreyes](https://github.com/sw-mreyes)
[π»](https://github.com/snipe/snipe-it/commits?author=sw-mreyes "Code") | [
Joel Pittet](https://pittet.ca)
[π»](https://github.com/snipe/snipe-it/commits?author=joelpittet "Code") | [
Eli Young](https://elyscape.com)
[π»](https://github.com/snipe/snipe-it/commits?author=elyscape "Code") | [
Raell Dottin](https://github.com/raelldottin)
[π»](https://github.com/snipe/snipe-it/commits?author=raelldottin "Code") | [
Tom Misilo](https://github.com/misilot)
[π»](https://github.com/snipe/snipe-it/commits?author=misilot "Code") | [
David Davenne](http://david.davenne.be)
[π»](https://github.com/snipe/snipe-it/commits?author=JuustoMestari "Code") |
| [
Mark Stenglein](https://markstenglein.com)
[π»](https://github.com/snipe/snipe-it/commits?author=ocelotsloth "Code") | [
ajsy](https://github.com/ajsy)
[π»](https://github.com/snipe/snipe-it/commits?author=ajsy "Code") | [
Jan Kiesewetter](https://github.com/t3easy)
[π»](https://github.com/snipe/snipe-it/commits?author=t3easy "Code") | [
Tetrachloromethane250](https://github.com/Tetrachloromethane250)
[π»](https://github.com/snipe/snipe-it/commits?author=Tetrachloromethane250 "Code") | [
Lars Kajes](https://www.kajes.se/)
[π»](https://github.com/snipe/snipe-it/commits?author=kajes "Code") | [
Joly0](https://github.com/Joly0)
[π»](https://github.com/snipe/snipe-it/commits?author=Joly0 "Code") | [
theburger](https://github.com/limeless)
[π»](https://github.com/snipe/snipe-it/commits?author=limeless "Code") |
| [
David Valin Alonso](https://github.com/deivishome)
[π»](https://github.com/snipe/snipe-it/commits?author=deivishome "Code") | [
andreaci](https://github.com/andreaci)
[π»](https://github.com/snipe/snipe-it/commits?author=andreaci "Code") | [
Jelle Sebreghts](http://www.jellesebreghts.be)
[π»](https://github.com/snipe/snipe-it/commits?author=Jelle-S "Code") | [
Michael Pietsch](https://github.com/Skywalker-11)
| [
Masudul Haque Shihab](https://github.com/sh1hab)
[π»](https://github.com/snipe/snipe-it/commits?author=sh1hab "Code") | [
Supapong Areeprasertkul](http://www.freedomdive.com/)
[π»](https://github.com/snipe/snipe-it/commits?author=zybersup "Code") | [
Peter Sarossy](https://github.com/psarossy)
[π»](https://github.com/snipe/snipe-it/commits?author=psarossy "Code") |
-| [
Renee Margaret McConahy](https://github.com/nepella)
[π»](https://github.com/snipe/snipe-it/commits?author=nepella "Code") | [
JohnnyPicnic](https://github.com/JohnnyPicnic)
[π»](https://github.com/snipe/snipe-it/commits?author=JohnnyPicnic "Code") | [
markbrule](https://github.com/markbrule)
[π»](https://github.com/snipe/snipe-it/commits?author=markbrule "Code") | [
Mike Campbell](https://github.com/mikecmpbll)
[π»](https://github.com/snipe/snipe-it/commits?author=mikecmpbll "Code") |
+| [
Renee Margaret McConahy](https://github.com/nepella)
[π»](https://github.com/snipe/snipe-it/commits?author=nepella "Code") | [
JohnnyPicnic](https://github.com/JohnnyPicnic)
[π»](https://github.com/snipe/snipe-it/commits?author=JohnnyPicnic "Code") | [
markbrule](https://github.com/markbrule)
[π»](https://github.com/snipe/snipe-it/commits?author=markbrule "Code") | [
Mike Campbell](https://github.com/mikecmpbll)
[π»](https://github.com/snipe/snipe-it/commits?author=mikecmpbll "Code") | [
tbrconnect](https://github.com/tbrconnect)
[π»](https://github.com/snipe/snipe-it/commits?author=tbrconnect "Code") |
This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
diff --git a/app/Console/Commands/ResetDemoSettings.php b/app/Console/Commands/ResetDemoSettings.php
index 89fd5a5acb..6808b125c8 100644
--- a/app/Console/Commands/ResetDemoSettings.php
+++ b/app/Console/Commands/ResetDemoSettings.php
@@ -81,6 +81,8 @@ class ResetDemoSettings extends Command
$user->save();
}
+ \Storage::disk('local_public')->put('snipe-logo.png', file_get_contents(public_path('img/demo/snipe-logo.png')));
+ \Storage::disk('local_public')->put('snipe-logo-lg.png', file_get_contents(public_path('img/demo/snipe-logo-lg.png')));
}
diff --git a/app/Console/Commands/RestoreFromBackup.php b/app/Console/Commands/RestoreFromBackup.php
new file mode 100644
index 0000000000..5d9042a046
--- /dev/null
+++ b/app/Console/Commands/RestoreFromBackup.php
@@ -0,0 +1,249 @@
+argument('filename');
+
+ if (!$filename) {
+ return $this->error("Missing required filename");
+ }
+
+ if (!$this->option('force') && !$this->confirm('Are you sure you wish to restore from the given backup file? This can lead to MASSIVE DATA LOSS!')) {
+ return $this->error("Data loss not confirmed");
+ }
+
+ if (config('database.default') != 'mysql') {
+ return $this->error("DB_CONNECTION must be MySQL in order to perform a restore. Detected: ".config('database.default'));
+ }
+
+ $za = new ZipArchive();
+
+ $errcode = $za->open($filename, ZipArchive::RDONLY);
+ if ($errcode !== true) {
+ $errors = [
+ ZipArchive::ER_EXISTS => "File already exists.",
+ ZipArchive::ER_INCONS => "Zip archive inconsistent.",
+ ZipArchive::ER_INVAL => "Invalid argument.",
+ ZipArchive::ER_MEMORY => "Malloc failure.",
+ ZipArchive::ER_NOENT => "No such file.",
+ ZipArchive::ER_NOZIP => "Not a zip archive.",
+ ZipArchive::ER_OPEN => "Can't open file.",
+ ZipArchive::ER_READ => "Read error.",
+ ZipArchive::ER_SEEK => "Seek error."
+ ];
+
+ return $this->error("Could not access file: ".$filename." - ".array_key_exists($errcode,$errors) ? $errors[$errcode] : " Unknown reason: $errcode");
+ }
+
+
+ $private_dirs = [
+ 'storage/private_uploads/assets',
+ 'storage/private_uploads/audits',
+ 'storage/private_uploads/imports',
+ 'storage/private_uploads/assetmodels',
+ 'storage/private_uploads/users',
+ 'storage/private_uploads/licenses',
+ 'storage/private_uploads/signatures' // We probably don't want this in the first place.
+ ];
+ $private_files = [
+ 'storage/oauth-private.key',
+ 'storage/oauth-public.key'
+ ];
+ $public_dirs = [
+ 'public/uploads/companies',
+ 'public/uploads/components',
+ 'public/uploads/categories',
+ 'public/uploads/manufacturers',
+ 'public/uploads/barcodes', // don't want this neither
+ 'public/uploads/consumables',
+ 'public/uploads/departments',
+ 'public/uploads/avatars',
+ 'public/uploads/suppliers',
+ 'public/uploads/assets', //wait, what?!
+ 'public/uploads/locations',
+ 'public/uploads/accessories',
+ 'public/uploads/models',
+ ];
+
+ $public_files = [
+ 'public/uploads/logo.png'
+ ];
+
+ $all_files = $private_dirs + $public_dirs;
+
+ $sqlfiles = [];
+ $sqlfile_indices = [];
+
+ $interesting_files = [];
+
+ for ($i=0; $i<$za->numFiles;$i++) {
+ $stat_results = $za->statIndex($i);
+ // echo "index: $i\n";
+ // print_r($stat_results);
+
+ $raw_path = $stat_results['name'];
+ // skip macOS resource fork files (?!?!?!)
+ if(strpos($raw_path,"__MACOSX")!==false && strpos($raw_path,"._") !== false) {
+ //print "SKIPPING macOS Resource fork file: $raw_path\n";
+ continue;
+ }
+ if(strpos($raw_path,'\\')!==false) { //found a backslash, swap it to forward-slash
+ $raw_path = strtr($raw_path,'\\','/');
+ //print "Translating file: ".$stat_results['name']." to: ".$raw_path."\n";
+ }
+
+ if(@pathinfo($raw_path)['extension'] == "sql") {
+ print "Found a sql file!\n";
+ $sqlfiles[] = $raw_path;
+ $sqlfile_indices[] = $i;
+ }
+
+ foreach($private_dirs+$public_dirs as $dir) {
+ $last_pos = strrpos($raw_path,$dir.'/');
+ if($last_pos !== false ) {
+ //print("INTERESTING - last_pos is $last_pos when searching $raw_path for $dir - last_pos+strlen(\$dir) is: ".($last_pos+strlen($dir))." and strlen(\$rawpath) is: ".strlen($raw_path)."\n");
+ print("We would copy $raw_path to $dir.\n"); //FIXME append to a path?
+ $interesting_files[$raw_path] = ['dest' =>$dir, 'index' => $i];
+ if($last_pos + strlen($dir) +1 == strlen($raw_path)) {
+ // we don't care about that; we just want files with the appropriate prefix
+ //print("FOUND THE EXACT DIRECTORY: $dir AT: $raw_path!!!\n");
+ }
+ }
+ }
+ foreach($private_files+$public_files as $file) {
+ $last_pos = strrpos($raw_path,$file); // no trailing slash!
+ if($last_pos !== false ) {
+ //print("INTERESTING - last_pos is $last_pos when searching $raw_path for $file - last_pos+strlen(\$file) is: ".($last_pos+strlen($file))." and strlen(\$rawpath) is: ".strlen($raw_path)."\n");
+ if($last_pos + strlen($file) == strlen($raw_path)) { //again, no trailing slash
+ print("FOUND THE EXACT FILE: $file AT: $raw_path!!!\n"); //we *do* care about this, though.
+ $interesting_files[$raw_path] = ['dest' => dirname($file),'index' => $i];
+ }
+ }
+
+ }
+ }
+
+ // print_r($interesting_files);exit(-1);
+
+ if( count($sqlfiles) != 1) {
+ return $this->error("There should be exactly *one* sql backup file found, found: ".( count($sqlfiles) == 0 ? "None" : implode(", ",$sqlfiles)));
+ }
+
+ if( strpos($sqlfiles[0], "db-dumps") === false ) {
+ //return $this->error("SQL backup file is missing 'db-dumps' component of full pathname: ".$sqlfiles[0]);
+ //older Snipe-IT installs don't have the db-dumps subdirectory component
+ }
+
+ //how to invoke the restore?
+ $pipes = [];
+
+ // FIXME - absolutely can *NOT* be hardcoding paths like this!!!!!!! But I don't know how to do it right? (Maybe get the user's ENV and append the MYSQL_PWD to it?)
+ $env_vars = getenv();
+ $env_vars['MYSQL_PWD'] = config("database.connections.mysql.password");
+ $proc_results = proc_open("mysql -h ".escapeshellarg(config('database.connections.mysql.host'))." -u ".escapeshellarg(config('database.connections.mysql.username'))." ".escapeshellarg(config('database.connections.mysql.database')), // yanked -p since we pass via ENV
+ [0 => ['pipe','r'],1 => ['pipe','w'],2 => ['pipe','w']],
+ $pipes,
+ null,
+ $env_vars); // this is not super-duper awesome-secure, but definitely more secure than showing it on the CLI, or dropping temporary files with passwords in them.
+ if($proc_results === false) {
+ return $this->error("Unable to invoke mysql via CLI");
+ }
+
+ // $this->info("Stdout says? ".fgets($pipes[1])); //FIXME: I think we might need to set non-blocking mode to use this properly?
+ // $this->info("Stderr says? ".fgets($pipes[2])); //FIXME: ditto, same.
+ // should we read stdout?
+ // fwrite($pipes[0],config("database.connections.mysql.password")."\n"); //this doesn't work :(
+
+ //$sql_contents = fopen($sqlfiles[0], "r"); //NOPE! This isn't a real file yet, silly-billy!
+
+ $sql_stat = $za->statIndex($sqlfile_indices[0]);
+ $this->info("SQL Stat is: ".print_r($sql_stat,true));
+ $sql_contents = $za->getStream($sql_stat['name']);
+ if ($sql_contents === false) {
+ $stdout = fgets($pipes[1]);
+ $this->info($stdout);
+ $stderr = fgets($pipes[2]);
+ $this->info($stderr);
+ return false;
+ }
+
+ while(($buffer = fgets($sql_contents)) !== false ) {
+ //$this->info("Buffer is: '$buffer'");
+ $bytes_written = fwrite($pipes[0],$buffer);
+ if($bytes_written === false) {
+ $stdout = fgets($pipes[1]);
+ $this->info($stdout);
+ $stderr = fgets($pipes[2]);
+ $this->info($stderr);
+ return false;
+ }
+ }
+ fclose($pipes[0]);
+ fclose($sql_contents);
+ fclose($pipes[1]);
+ fclose($pipes[2]);
+ //wait, have to do fclose() on all pipes first?
+ $close_results = proc_close($proc_results);
+ if($close_results != 0) {
+ return $this->error("There may have been a problem with the database import: Error number ".$close_results);
+ }
+
+ //and now copy the files over too (right?)
+ //FIXME - we don't prune the filesystem space yet!!!!
+ foreach($interesting_files AS $pretty_file_name => $file_details) {
+ $ugly_file_name = $za->statIndex($file_details['index'])['name'];
+ $fp = $za->getStream($ugly_file_name);
+ $this->info("Weird problem, here are file details? ".print_r($file_details,true));
+ $migrated_file = fopen($file_details['dest']."/".basename($pretty_file_name),"w");
+ while(($buffer = fgets($fp))!== false) {
+ fwrite($migrated_file,$buffer);
+ }
+ fclose($migrated_file);
+ fclose($fp);
+ $this->info("Wrote $ugly_file_name to $pretty_file_name");
+ }
+
+ }
+}
diff --git a/app/Http/Controllers/Api/LicenseSeatsController.php b/app/Http/Controllers/Api/LicenseSeatsController.php
index 05cdd98951..f86856718d 100644
--- a/app/Http/Controllers/Api/LicenseSeatsController.php
+++ b/app/Http/Controllers/Api/LicenseSeatsController.php
@@ -17,6 +17,8 @@ class LicenseSeatsController extends Controller
/**
* Display a listing of the resource.
*
+ * @param \Illuminate\Http\Request $request
+ * @param int $licenseId
* @return \Illuminate\Http\Response
*/
public function index(Request $request, $licenseId)
@@ -53,7 +55,8 @@ class LicenseSeatsController extends Controller
/**
* Display the specified resource.
*
- * @param int $id
+ * @param int $licenseId
+ * @param int $seatId
* @return \Illuminate\Http\Response
*/
public function show($licenseId, $seatId)
diff --git a/app/Http/Middleware/SecurityHeaders.php b/app/Http/Middleware/SecurityHeaders.php
index 4a75d6ec29..8a3800ffe6 100644
--- a/app/Http/Middleware/SecurityHeaders.php
+++ b/app/Http/Middleware/SecurityHeaders.php
@@ -99,7 +99,7 @@ class SecurityHeaders
// We have to exclude debug mode here because debugbar pulls from a CDN or two
// and it will break things.
- if ((config('app.debug')!='true') || (config('app.enable_csp')=='true')) {
+ if ((config('app.debug')!='true') && (config('app.enable_csp')=='true')) {
$csp_policy[] = "default-src 'self'";
$csp_policy[] = "style-src 'self' 'unsafe-inline'";
$csp_policy[] = "script-src 'self' 'unsafe-inline' 'unsafe-eval'";
diff --git a/app/Models/Location.php b/app/Models/Location.php
index dc8aa6a043..1f48f96e77 100755
--- a/app/Models/Location.php
+++ b/app/Models/Location.php
@@ -23,7 +23,7 @@ class Location extends SnipeModel
protected $rules = array(
'name' => 'required|min:2|max:255|unique_undeleted',
'city' => 'min:2|max:255|nullable',
- 'country' => 'min:2|max:2|nullable',
+ 'country' => 'min:2|max:255|nullable',
'address' => 'max:80|nullable',
'address2' => 'max:80|nullable',
'zip' => 'min:3|max:10|nullable',
diff --git a/app/Services/LdapAd.php b/app/Services/LdapAd.php
index 925927d1fe..4bfef3d3ed 100644
--- a/app/Services/LdapAd.php
+++ b/app/Services/LdapAd.php
@@ -135,7 +135,7 @@ class LdapAd extends LdapAdConfiguration
$bind_as_user = true;
}
- if ($this->ldap->auth()->attempt($login_username, $password, $bind_as_user) === false) {
+ if (($this->ldap) && ($this->ldap->auth()->attempt($login_username, $password, $bind_as_user) === false)) {
throw new Exception('Unable to validate user credentials!');
}
diff --git a/config/version.php b/config/version.php
index 2b06619fef..14f20c7a76 100644
--- a/config/version.php
+++ b/config/version.php
@@ -6,5 +6,5 @@ return array (
'prerelease_version' => '',
'hash_version' => 'gd9d5b4d73',
'full_hash' => 'v5.1.5-17-gd9d5b4d73',
- 'branch' => 'develop',
+ 'branch' => 'master',
);
\ No newline at end of file
diff --git a/database/seeds/SettingsSeeder.php b/database/seeds/SettingsSeeder.php
index e4a3b2fb0b..3ad8b8d856 100644
--- a/database/seeds/SettingsSeeder.php
+++ b/database/seeds/SettingsSeeder.php
@@ -42,8 +42,8 @@ class SettingsSeeder extends Seeder
// Copy the logos from the img/demo directory
- Storage::disk('public')->put(public_path('uploads/snipe-logo.png'), file_get_contents(public_path('img/demo/snipe-logo.png')));
- Storage::disk('public')->put(public_path('uploads/snipe-logo-lg.png'), file_get_contents(public_path('img/demo/snipe-logo-lg.png')));
+ Storage::disk('local_public')->put('snipe-logo.png', file_get_contents(public_path('img/demo/snipe-logo.png')));
+ Storage::disk('local_public')->put('snipe-logo-lg.png', file_get_contents(public_path('img/demo/snipe-logo-lg.png')));
}
}
diff --git a/docker/entrypoint_alpine.sh b/docker/entrypoint_alpine.sh
index cd0929885a..783b50b69c 100644
--- a/docker/entrypoint_alpine.sh
+++ b/docker/entrypoint_alpine.sh
@@ -45,6 +45,11 @@ then
cp -a /var/www/html/vendor/laravel/passport/database/migrations/* /var/www/html/database/migrations/
fi
+if [ "${SESSION_DRIVER}" == "database" ]
+then
+ cp -a /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub /var/www/html/database/migrations/2021_05_06_0000_create_sessions_table.php
+fi
+
php artisan migrate --force
php artisan config:clear
php artisan config:cache
diff --git a/docker/startup.sh b/docker/startup.sh
index 5fa32d1a93..726aafd16b 100644
--- a/docker/startup.sh
+++ b/docker/startup.sh
@@ -48,18 +48,19 @@ then
sed -i "s/^upload_max_filesize.*/upload_max_filesize = ${PHP_UPLOAD_LIMIT}M/" /etc/php/*/apache2/php.ini
fi
-
# If the Oauth DB files are not present copy the vendor files over to the db migrations
if [ ! -f "/var/www/html/database/migrations/*create_oauth*" ]
then
cp -ax /var/www/html/vendor/laravel/passport/database/migrations/* /var/www/html/database/migrations/
fi
-exec supervisord -c /supervisord.conf
+if [ $SESSION_DRIVER = "database" ]
+then
+ cp -ax /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub /var/www/html/database/migrations/2021_05_06_0000_create_sessions_table.php
+fi
php artisan migrate --force
php artisan config:clear
php artisan config:cache
-. /etc/apache2/envvars
-exec apache2 -DNO_DETACH < /dev/null
+exec supervisord -c /supervisord.conf
diff --git a/public/css/build/AdminLTE.css b/public/css/build/AdminLTE.css
index 620b7dcc4f..9aeb043740 100644
Binary files a/public/css/build/AdminLTE.css and b/public/css/build/AdminLTE.css differ
diff --git a/public/css/build/app.css b/public/css/build/app.css
index 129b94df0a..a190092b6c 100644
Binary files a/public/css/build/app.css and b/public/css/build/app.css differ
diff --git a/public/css/build/overrides.css b/public/css/build/overrides.css
index 5877050f79..0e38d4e70c 100644
Binary files a/public/css/build/overrides.css and b/public/css/build/overrides.css differ
diff --git a/public/css/dist/all.css b/public/css/dist/all.css
index a2e4c29980..f290340fb2 100644
Binary files a/public/css/dist/all.css and b/public/css/dist/all.css differ
diff --git a/public/css/dist/bootstrap-table.css b/public/css/dist/bootstrap-table.css
index 3e72194666..7692a5ef27 100644
Binary files a/public/css/dist/bootstrap-table.css and b/public/css/dist/bootstrap-table.css differ
diff --git a/public/css/dist/signature-pad.min.css b/public/css/dist/signature-pad.min.css
index 218b9c2365..7065929572 100644
Binary files a/public/css/dist/signature-pad.min.css and b/public/css/dist/signature-pad.min.css differ
diff --git a/public/css/dist/skins/skin-black-dark.css b/public/css/dist/skins/skin-black-dark.css
index fe37f7bfbd..83c0fae28f 100644
Binary files a/public/css/dist/skins/skin-black-dark.css and b/public/css/dist/skins/skin-black-dark.css differ
diff --git a/public/css/dist/skins/skin-black-dark.min.css b/public/css/dist/skins/skin-black-dark.min.css
index fe37f7bfbd..4525ec5b46 100644
Binary files a/public/css/dist/skins/skin-black-dark.min.css and b/public/css/dist/skins/skin-black-dark.min.css differ
diff --git a/public/css/dist/skins/skin-black.css b/public/css/dist/skins/skin-black.css
index d451cf664c..65e7252612 100644
Binary files a/public/css/dist/skins/skin-black.css and b/public/css/dist/skins/skin-black.css differ
diff --git a/public/css/dist/skins/skin-black.min.css b/public/css/dist/skins/skin-black.min.css
index d451cf664c..438c6dbebf 100644
Binary files a/public/css/dist/skins/skin-black.min.css and b/public/css/dist/skins/skin-black.min.css differ
diff --git a/public/css/dist/skins/skin-blue-dark.css b/public/css/dist/skins/skin-blue-dark.css
index 354b6a044a..617a453a4f 100644
Binary files a/public/css/dist/skins/skin-blue-dark.css and b/public/css/dist/skins/skin-blue-dark.css differ
diff --git a/public/css/dist/skins/skin-blue-dark.min.css b/public/css/dist/skins/skin-blue-dark.min.css
index 354b6a044a..7a93f2ca41 100644
Binary files a/public/css/dist/skins/skin-blue-dark.min.css and b/public/css/dist/skins/skin-blue-dark.min.css differ
diff --git a/public/css/dist/skins/skin-blue.css b/public/css/dist/skins/skin-blue.css
index c6e206ce81..82e1d08ea0 100644
Binary files a/public/css/dist/skins/skin-blue.css and b/public/css/dist/skins/skin-blue.css differ
diff --git a/public/css/dist/skins/skin-blue.min.css b/public/css/dist/skins/skin-blue.min.css
index c6e206ce81..3509b8d78d 100644
Binary files a/public/css/dist/skins/skin-blue.min.css and b/public/css/dist/skins/skin-blue.min.css differ
diff --git a/public/css/dist/skins/skin-contrast.css b/public/css/dist/skins/skin-contrast.css
index 35bf9fd0c9..4112ec16d7 100644
Binary files a/public/css/dist/skins/skin-contrast.css and b/public/css/dist/skins/skin-contrast.css differ
diff --git a/public/css/dist/skins/skin-contrast.min.css b/public/css/dist/skins/skin-contrast.min.css
index 35bf9fd0c9..6162cbe4f6 100644
Binary files a/public/css/dist/skins/skin-contrast.min.css and b/public/css/dist/skins/skin-contrast.min.css differ
diff --git a/public/css/dist/skins/skin-green-dark.css b/public/css/dist/skins/skin-green-dark.css
index 77d6268832..3f01ca998d 100644
Binary files a/public/css/dist/skins/skin-green-dark.css and b/public/css/dist/skins/skin-green-dark.css differ
diff --git a/public/css/dist/skins/skin-green-dark.min.css b/public/css/dist/skins/skin-green-dark.min.css
index 77d6268832..afb0e10836 100644
Binary files a/public/css/dist/skins/skin-green-dark.min.css and b/public/css/dist/skins/skin-green-dark.min.css differ
diff --git a/public/css/dist/skins/skin-green.css b/public/css/dist/skins/skin-green.css
index e7cef037dc..dbeb9379d6 100644
Binary files a/public/css/dist/skins/skin-green.css and b/public/css/dist/skins/skin-green.css differ
diff --git a/public/css/dist/skins/skin-green.min.css b/public/css/dist/skins/skin-green.min.css
index e7cef037dc..d7605a7d86 100644
Binary files a/public/css/dist/skins/skin-green.min.css and b/public/css/dist/skins/skin-green.min.css differ
diff --git a/public/css/dist/skins/skin-orange-dark.css b/public/css/dist/skins/skin-orange-dark.css
index b2b7a88bde..f338d4646a 100644
Binary files a/public/css/dist/skins/skin-orange-dark.css and b/public/css/dist/skins/skin-orange-dark.css differ
diff --git a/public/css/dist/skins/skin-orange-dark.min.css b/public/css/dist/skins/skin-orange-dark.min.css
index b2b7a88bde..383d599336 100644
Binary files a/public/css/dist/skins/skin-orange-dark.min.css and b/public/css/dist/skins/skin-orange-dark.min.css differ
diff --git a/public/css/dist/skins/skin-orange.css b/public/css/dist/skins/skin-orange.css
index 8967ee4964..ae849dde50 100644
Binary files a/public/css/dist/skins/skin-orange.css and b/public/css/dist/skins/skin-orange.css differ
diff --git a/public/css/dist/skins/skin-orange.min.css b/public/css/dist/skins/skin-orange.min.css
index 8967ee4964..d0dd393551 100644
Binary files a/public/css/dist/skins/skin-orange.min.css and b/public/css/dist/skins/skin-orange.min.css differ
diff --git a/public/css/dist/skins/skin-purple-dark.css b/public/css/dist/skins/skin-purple-dark.css
index e2b5e31e06..e24854ea58 100644
Binary files a/public/css/dist/skins/skin-purple-dark.css and b/public/css/dist/skins/skin-purple-dark.css differ
diff --git a/public/css/dist/skins/skin-purple-dark.min.css b/public/css/dist/skins/skin-purple-dark.min.css
index e2b5e31e06..a4d2d6c315 100644
Binary files a/public/css/dist/skins/skin-purple-dark.min.css and b/public/css/dist/skins/skin-purple-dark.min.css differ
diff --git a/public/css/dist/skins/skin-purple.css b/public/css/dist/skins/skin-purple.css
index d046db972a..89d76c0742 100644
Binary files a/public/css/dist/skins/skin-purple.css and b/public/css/dist/skins/skin-purple.css differ
diff --git a/public/css/dist/skins/skin-purple.min.css b/public/css/dist/skins/skin-purple.min.css
index d046db972a..07197e4d8b 100644
Binary files a/public/css/dist/skins/skin-purple.min.css and b/public/css/dist/skins/skin-purple.min.css differ
diff --git a/public/css/dist/skins/skin-red-dark.css b/public/css/dist/skins/skin-red-dark.css
index 8a6b85e256..499aeea591 100644
Binary files a/public/css/dist/skins/skin-red-dark.css and b/public/css/dist/skins/skin-red-dark.css differ
diff --git a/public/css/dist/skins/skin-red-dark.min.css b/public/css/dist/skins/skin-red-dark.min.css
index 8a6b85e256..e6c50b8c81 100644
Binary files a/public/css/dist/skins/skin-red-dark.min.css and b/public/css/dist/skins/skin-red-dark.min.css differ
diff --git a/public/css/dist/skins/skin-red.css b/public/css/dist/skins/skin-red.css
index 71762b3d1f..d2fced6d22 100644
Binary files a/public/css/dist/skins/skin-red.css and b/public/css/dist/skins/skin-red.css differ
diff --git a/public/css/dist/skins/skin-red.min.css b/public/css/dist/skins/skin-red.min.css
index 71762b3d1f..00ef63beff 100644
Binary files a/public/css/dist/skins/skin-red.min.css and b/public/css/dist/skins/skin-red.min.css differ
diff --git a/public/css/dist/skins/skin-yellow-dark.css b/public/css/dist/skins/skin-yellow-dark.css
index b59bef009a..cc0b6749fb 100644
Binary files a/public/css/dist/skins/skin-yellow-dark.css and b/public/css/dist/skins/skin-yellow-dark.css differ
diff --git a/public/css/dist/skins/skin-yellow-dark.min.css b/public/css/dist/skins/skin-yellow-dark.min.css
index b59bef009a..100ec919bc 100644
Binary files a/public/css/dist/skins/skin-yellow-dark.min.css and b/public/css/dist/skins/skin-yellow-dark.min.css differ
diff --git a/public/css/dist/skins/skin-yellow.css b/public/css/dist/skins/skin-yellow.css
index 673bf1a9f1..625b700e65 100644
Binary files a/public/css/dist/skins/skin-yellow.css and b/public/css/dist/skins/skin-yellow.css differ
diff --git a/public/css/dist/skins/skin-yellow.min.css b/public/css/dist/skins/skin-yellow.min.css
index 673bf1a9f1..41ccb21972 100644
Binary files a/public/css/dist/skins/skin-yellow.min.css and b/public/css/dist/skins/skin-yellow.min.css differ
diff --git a/public/img/demo/favicon.ico b/public/img/demo/favicon.ico
new file mode 100644
index 0000000000..7b20fd4f6b
Binary files /dev/null and b/public/img/demo/favicon.ico differ
diff --git a/public/js/build/app.js b/public/js/build/app.js
index 4f04a3742f..7f36b2e30d 100644
Binary files a/public/js/build/app.js and b/public/js/build/app.js differ
diff --git a/public/js/build/vendor.js b/public/js/build/vendor.js
index b208e62a17..9b1199a816 100644
Binary files a/public/js/build/vendor.js and b/public/js/build/vendor.js differ
diff --git a/public/js/dist/all.js b/public/js/dist/all.js
index 2f2ab02e59..fcace54995 100644
Binary files a/public/js/dist/all.js and b/public/js/dist/all.js differ
diff --git a/public/js/dist/bootstrap-table.js b/public/js/dist/bootstrap-table.js
index 347dc6f115..bef68619cf 100644
Binary files a/public/js/dist/bootstrap-table.js and b/public/js/dist/bootstrap-table.js differ
diff --git a/public/mix-manifest.json b/public/mix-manifest.json
index b62c0b576a..844bb82359 100644
--- a/public/mix-manifest.json
+++ b/public/mix-manifest.json
@@ -1,24 +1,24 @@
{
- "/js/build/app.js": "/js/build/app.js?id=708f0de04f1f8ba0d19d",
- "/css/build/AdminLTE.css": "/css/build/AdminLTE.css?id=5d8ce6b758f170008cd6",
- "/css/build/app.css": "/css/build/app.css?id=9b6ddbece1a3cfc99036",
- "/css/build/overrides.css": "/css/build/overrides.css?id=0a65220cdae6fbb6d913",
- "/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=e57a7bb77ae1fb640331",
- "/css/dist/skins/skin-red.css": "/css/dist/skins/skin-red.css?id=fdb6630b38435c84c7d2",
- "/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=5d582ce5e98f591b8c65",
- "/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=02e8563844e00840e01c",
- "/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=4daaa0e353849ff8cacf",
- "/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=c89047b28b272bc07e81",
- "/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=9f9013a3ec06e256e1dc",
- "/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=5b4937fd36d26f7a92e3",
- "/css/dist/skins/skin-purple.css": "/css/dist/skins/skin-purple.css?id=e6239abc2a7a28441911",
- "/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=85ef26204fbc8b2dad5b",
- "/css/dist/skins/skin-yellow.css": "/css/dist/skins/skin-yellow.css?id=84667fc9b0f00d11a9c4",
- "/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=8e774a0e5435527d63c4",
- "/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=5269656828cfba157e92",
- "/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=0a4ddc28e3a8228cc11e",
- "/css/dist/skins/skin-orange.css": "/css/dist/skins/skin-orange.css?id=b22dc3561eda3d2027a9",
- "/css/dist/all.css": "/css/dist/all.css?id=fc64989106daf3be016b",
+ "/js/build/app.js": "/js/build/app.js?id=b23ec8d1be42f9d3d810",
+ "/css/build/AdminLTE.css": "/css/build/AdminLTE.css?id=59413334823616b81341",
+ "/css/build/app.css": "/css/build/app.css?id=032fd8c3fce99c7fd862",
+ "/css/build/overrides.css": "/css/build/overrides.css?id=0b4aefd7ef0c117ef23a",
+ "/css/dist/skins/skin-blue.css": "/css/dist/skins/skin-blue.css?id=1f87813d401bf76aa1c0",
+ "/css/dist/skins/skin-red.css": "/css/dist/skins/skin-red.css?id=b09d08f1bce1ce6ef565",
+ "/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=4fce68ca7086890d9029",
+ "/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=caf97a95374a38d8645e",
+ "/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=d6fc509af348f74dbe80",
+ "/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=8babe0615220ced5e869",
+ "/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=a1be7d448d0a7a677aa4",
+ "/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=36c5a414e9b5dfff5010",
+ "/css/dist/skins/skin-purple.css": "/css/dist/skins/skin-purple.css?id=73e98a9a8e41cd044475",
+ "/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=bc80aa3d9d5ab9f72514",
+ "/css/dist/skins/skin-yellow.css": "/css/dist/skins/skin-yellow.css?id=40988b7e9e4bbd9baa06",
+ "/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=39a7bdc303ea2cd82641",
+ "/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=bd4e8277d360eac19b2b",
+ "/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=289676d6c84e2f4980d6",
+ "/css/dist/skins/skin-orange.css": "/css/dist/skins/skin-orange.css?id=0426fbe408151f690505",
+ "/css/dist/all.css": "/css/dist/all.css?id=199fdf677ce0dce6cef8",
"/css/blue.png": "/css/blue.png?id=4c85d6a97173123bd14a",
"/css/blue@2x.png": "/css/blue@2x.png?id=62c67c6a822439e8a4ac",
"/css/dist/signature-pad.css": "/css/dist/signature-pad.css?id=6a89d3cd901305e66ced",
@@ -26,20 +26,20 @@
"/css/dist/bootstrap-table.css": "/css/dist/bootstrap-table.css?id=1e77fde04b3f42432581",
"/js/build/vendor.js": "/js/build/vendor.js?id=b93877b4a88a76e1b18b",
"/js/dist/bootstrap-table.js": "/js/dist/bootstrap-table.js?id=fd6e727609678bf04984",
- "/js/dist/all.js": "/js/dist/all.js?id=d0fbb4953b84b70787d4",
- "/css/dist/skins/skin-green.min.css": "/css/dist/skins/skin-green.min.css?id=02e8563844e00840e01c",
- "/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=4daaa0e353849ff8cacf",
- "/css/dist/skins/skin-black.min.css": "/css/dist/skins/skin-black.min.css?id=c89047b28b272bc07e81",
- "/css/dist/skins/skin-black-dark.min.css": "/css/dist/skins/skin-black-dark.min.css?id=9f9013a3ec06e256e1dc",
- "/css/dist/skins/skin-blue.min.css": "/css/dist/skins/skin-blue.min.css?id=e57a7bb77ae1fb640331",
- "/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=5269656828cfba157e92",
- "/css/dist/skins/skin-yellow.min.css": "/css/dist/skins/skin-yellow.min.css?id=84667fc9b0f00d11a9c4",
- "/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=8e774a0e5435527d63c4",
- "/css/dist/skins/skin-red.min.css": "/css/dist/skins/skin-red.min.css?id=fdb6630b38435c84c7d2",
- "/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=5b4937fd36d26f7a92e3",
- "/css/dist/skins/skin-purple.min.css": "/css/dist/skins/skin-purple.min.css?id=e6239abc2a7a28441911",
- "/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=85ef26204fbc8b2dad5b",
- "/css/dist/skins/skin-orange.min.css": "/css/dist/skins/skin-orange.min.css?id=b22dc3561eda3d2027a9",
- "/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=0a4ddc28e3a8228cc11e",
- "/css/dist/skins/skin-contrast.min.css": "/css/dist/skins/skin-contrast.min.css?id=5d582ce5e98f591b8c65"
+ "/js/dist/all.js": "/js/dist/all.js?id=dde965016a515da2f8d2",
+ "/css/dist/skins/skin-green.min.css": "/css/dist/skins/skin-green.min.css?id=caf97a95374a38d8645e",
+ "/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=d6fc509af348f74dbe80",
+ "/css/dist/skins/skin-black.min.css": "/css/dist/skins/skin-black.min.css?id=8babe0615220ced5e869",
+ "/css/dist/skins/skin-black-dark.min.css": "/css/dist/skins/skin-black-dark.min.css?id=a1be7d448d0a7a677aa4",
+ "/css/dist/skins/skin-blue.min.css": "/css/dist/skins/skin-blue.min.css?id=1f87813d401bf76aa1c0",
+ "/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=bd4e8277d360eac19b2b",
+ "/css/dist/skins/skin-yellow.min.css": "/css/dist/skins/skin-yellow.min.css?id=40988b7e9e4bbd9baa06",
+ "/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=39a7bdc303ea2cd82641",
+ "/css/dist/skins/skin-red.min.css": "/css/dist/skins/skin-red.min.css?id=b09d08f1bce1ce6ef565",
+ "/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=36c5a414e9b5dfff5010",
+ "/css/dist/skins/skin-purple.min.css": "/css/dist/skins/skin-purple.min.css?id=73e98a9a8e41cd044475",
+ "/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=bc80aa3d9d5ab9f72514",
+ "/css/dist/skins/skin-orange.min.css": "/css/dist/skins/skin-orange.min.css?id=0426fbe408151f690505",
+ "/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=289676d6c84e2f4980d6",
+ "/css/dist/skins/skin-contrast.min.css": "/css/dist/skins/skin-contrast.min.css?id=4fce68ca7086890d9029"
}
diff --git a/resources/views/hardware/labels.blade.php b/resources/views/hardware/labels.blade.php
index 52c06aad9a..beef718472 100644
--- a/resources/views/hardware/labels.blade.php
+++ b/resources/views/hardware/labels.blade.php
@@ -56,6 +56,13 @@ $qr_size = ($settings->alt_barcode_enabled=='1') && ($settings->alt_barcode!='')
padding-top: .11in;
width: 100%;
}
+ div.label-logo {
+ float: right;
+ display: inline-block;
+ }
+ img.label-logo {
+ height: 0.5in;
+ }
.qr_text {
width: {{ $settings->labels_width }}in;
height: {{ $settings->labels_height }}in;
@@ -111,6 +118,11 @@ $qr_size = ($settings->alt_barcode_enabled=='1') && ($settings->alt_barcode!='')
@endif