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
+ @if ($settings->label_logo) + + @endif @if ($settings->qr_text!='')
{{ $settings->qr_text }} diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index dcf2adc2ec..3b9dfb4f59 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -722,7 +722,26 @@ {{ ($asset->userRequests) ? (int) $asset->userRequests->count() : '0' }}
+
+
+ + Labels + +
+
+ {{ Form::open([ + 'method' => 'POST', + 'route' => ['hardware/bulkedit'], + 'class' => 'form-inline', + 'id' => 'bulkForm']) }} + + + + {{ Form::close() }} + +
+
@@ -1126,4 +1145,4 @@ @section('moar_scripts') @include ('partials.bootstrap-table') -@stop \ No newline at end of file +@stop diff --git a/resources/views/locations/print.blade.php b/resources/views/locations/print.blade.php index 3d20a6ce11..97fc15d958 100644 --- a/resources/views/locations/print.blade.php +++ b/resources/views/locations/print.blade.php @@ -84,11 +84,11 @@ {{ $counter }} - {{ $user->company->name }} - {{ $user->first_name }} {{ $user->last_name }} - {{ $user->employee_num }} - {{ $user->department->name }} - {{ $user->location->name }} + {{ (($user) && ($user->company)) ? $user->company->name : '' }} + {{ ($user) ? $user->first_name .' '. $user->last_name : '' }} + {{ ($user) ? $user->employee_num : '' }} + {{ (($user) && ($user->department)) ? $user->department->name : '' }} + {{ (($user) && ($user->location)) ? $user->location->name : '' }} @php $counter++ @@ -131,11 +131,11 @@ {{ $counter }} {{ $asset->asset_tag }} {{ $asset->name }} - {{ $asset->model->category->name }} - {{ $asset->model->manufacturer->name }} - {{ $asset->model->name }} {{ $asset->model->model_number }} - {{ $asset->serial }} - {{ $asset->location->name }} + {{ (($asset->model) && ($asset->model->category)) ? $asset->model->category->name : '' }} + {{ (($asset->model) && ($asset->model->manufacturer)) ? $asset->model->manufacturer->name : '' }} + {{ ($asset->model) ? $asset->model->name : '' }} + {{ $asset->serial }} + {{ $asset->location->name }} {{ $asset->last_checkout }} {{ $asset->expected_checkin }} diff --git a/resources/views/settings/backups.blade.php b/resources/views/settings/backups.blade.php index 3af4d8ba96..742ae25c9d 100644 --- a/resources/views/settings/backups.blade.php +++ b/resources/views/settings/backups.blade.php @@ -29,7 +29,6 @@ data-sort-order="asc" id="system-backups" class="table table-striped snipe-table"> - File Created diff --git a/resources/views/users/ldap.blade.php b/resources/views/users/ldap.blade.php index 73f69b4192..b0b67bbf97 100644 --- a/resources/views/users/ldap.blade.php +++ b/resources/views/users/ldap.blade.php @@ -75,7 +75,7 @@ LDAP User Sync @foreach (Session::get('summary') as $entry) - + {{ $entry['username'] }} {{ $entry['employee_number'] }} {{ $entry['firstname'] }} diff --git a/resources/views/users/print.blade.php b/resources/views/users/print.blade.php index da8ad2b0c5..5608c3bd13 100644 --- a/resources/views/users/print.blade.php +++ b/resources/views/users/print.blade.php @@ -85,7 +85,11 @@ {{ $asset->serial }} {{ $asset->last_checkout }} -
+ + @if ($asset->assetlog->first()) + + @endif + @if($settings->show_assigned_assets) @php diff --git a/resources/views/users/view.blade.php b/resources/views/users/view.blade.php index a7394eb6c4..4cbbe99381 100755 --- a/resources/views/users/view.blade.php +++ b/resources/views/users/view.blade.php @@ -248,10 +248,14 @@ @endif - @if (!is_null($user->department)) + @if ($user->department) {{ trans('general.department') }} - {{ $user->department->name }} + + + {{ $user->department->name }} + + @endif @if ($user->created_at)