Compare commits
129 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 19820f1b42 | |||
| 2a88781cd5 | |||
| f96c867bd3 | |||
| 06f8e8620a | |||
| 95d907c9e9 | |||
| d990152856 | |||
| 05609230b2 | |||
| 220c254093 | |||
| 02313ce361 | |||
| e70f7c610a | |||
| 32f77c3285 | |||
| 0a639f4fcc | |||
| f2b55fb641 | |||
| 0e443356f0 | |||
| 76f7f01398 | |||
| 992de0156b | |||
| c96b5f5a85 | |||
| 8d2685f0f0 | |||
| eb14cc7f43 | |||
| 3dc67cdba6 | |||
| 0bbe0c85d7 | |||
| 49415806e1 | |||
| 5edbb4b229 | |||
| c40b8334fc | |||
| 0a37c9564a | |||
| 985193ffff | |||
| 721add5bc1 | |||
| ff8fa6ec77 | |||
| e0a6f22489 | |||
| 030fdd60ff | |||
| fdde844ce5 | |||
| d263990401 | |||
| bf7a856fa6 | |||
| 1e062d4fc8 | |||
| ca37de5e45 | |||
| 9ba2fd93c1 | |||
| a2e177e754 | |||
| 5e6db0b219 | |||
| b09ded2a3b | |||
| 124343911f | |||
| 462f8c791f | |||
| 9a224a07ba | |||
| df4686bc96 | |||
| b6c432a596 | |||
| de9f487664 | |||
| ef668317a9 | |||
| cf368a4577 | |||
| 2e71968c04 | |||
| fdb5b3baf1 | |||
| c745fa095b | |||
| 70e6a6ced6 | |||
| 6772835efc | |||
| fb482b0dd6 | |||
| 9f43d3345f | |||
| 6e83679528 | |||
| a050aba72f | |||
| 0031fab0fe | |||
| 585bdff364 | |||
| 1d9741a49e | |||
| 9f7f1460e9 | |||
| f871759753 | |||
| 8e17818f1e | |||
| d19c6ab8e7 | |||
| d14b1e3825 | |||
| ba12ee9954 | |||
| d8bb69533c | |||
| 01d3606c42 | |||
| 208f1db3b2 | |||
| e5b02da54b | |||
| d6ead5ae17 | |||
| 1d7d31b9ae | |||
| 2a817c2123 | |||
| f3a7467235 | |||
| 2da6f9136f | |||
| 79549dbfb9 | |||
| a48d09f37e | |||
| 0dc78fdea6 | |||
| 75a8639a20 | |||
| 380c6171b7 | |||
| d36d6b8e07 | |||
| c00a1fa21b | |||
| bbcd215ea4 | |||
| 444f9a81da | |||
| b4eee5a9b7 | |||
| 72f9fe444d | |||
| eb423c252a | |||
| 382fb31670 | |||
| e6ba4a423d | |||
| 13ed6cde67 | |||
| cac78cdbf3 | |||
| 8b67326e95 | |||
| f65bc5caee | |||
| 0329028e2c | |||
| d3d96c8285 | |||
| 5909860c5a | |||
| 1023fa3edd | |||
| 65e6d56f1f | |||
| bf34385c3e | |||
| 55a526a6b3 | |||
| bbf7fbcff4 | |||
| 4a5cb94d94 | |||
| cb184a9687 | |||
| fb37dbed92 | |||
| e410696a36 | |||
| 45bfec5cd3 | |||
| 055522510b | |||
| f1d0d1bfe7 | |||
| c0aa6c153e | |||
| da3451bf0d | |||
| 5f76e03616 | |||
| 84710eac98 | |||
| 81bf41a091 | |||
| 134acf3b87 | |||
| 82d8b2ab82 | |||
| adc0d3a6ac | |||
| 8b15841c4b | |||
| fd4ee60276 | |||
| 93358b5872 | |||
| 1c4e20c712 | |||
| 0e1f6a3fd1 | |||
| 71d0e6369e | |||
| b27aeb1952 | |||
| bec2b170ec | |||
| 269d3fe509 | |||
| 34d5473553 | |||
| 4ac15daee7 | |||
| 5f3a1f6287 | |||
| bfc60864dd | |||
| ffa2701f89 |
+155
-1
@@ -135,7 +135,8 @@
|
||||
"avatar_url": "https://avatars0.githubusercontent.com/u/10137?v=3",
|
||||
"profile": "https://github.com/ghost",
|
||||
"contributions": [
|
||||
"translation"
|
||||
"translation",
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1956,6 +1957,159 @@
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "giannello",
|
||||
"name": "Giuseppe Iannello",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/551789?v=4",
|
||||
"profile": "https://github.com/giannello",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "PeterDaveHello",
|
||||
"name": "Peter Dave Hello",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/3691490?v=4",
|
||||
"profile": "https://www.peterdavehello.org/",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "sigmoidal",
|
||||
"name": "sigmoidal",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/6106332?v=4",
|
||||
"profile": "https://github.com/sigmoidal",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "phenixdotnet",
|
||||
"name": "Vincent Lainé",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/2082554?v=4",
|
||||
"profile": "https://github.com/phenixdotnet",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "derlucas",
|
||||
"name": "Lucas Pleß",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/1943040?v=4",
|
||||
"profile": "http://www.lucas-pless.com",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "iansltx",
|
||||
"name": "Ian Littman",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/472804?v=4",
|
||||
"profile": "http://twitter.com/iansltx",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "PauloLuna",
|
||||
"name": "João Paulo",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/3519029?v=4",
|
||||
"profile": "https://github.com/PauloLuna",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "ThoBur",
|
||||
"name": "ThoBur",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/70443365?v=4",
|
||||
"profile": "https://github.com/ThoBur",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "alek13",
|
||||
"name": "Alexander Chibrikin",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/1972329?v=4",
|
||||
"profile": "http://phpprofi.ru/",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "winstan",
|
||||
"name": "Anthony Winstanley",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/438332?v=4",
|
||||
"profile": "https://github.com/winstan",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "fashberg",
|
||||
"name": "Folke",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/3075214?v=4",
|
||||
"profile": "https://github.com/fashberg",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "benwa",
|
||||
"name": "Bennett Blodinger",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/1351571?v=4",
|
||||
"profile": "https://github.com/benwa",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "ncareau",
|
||||
"name": "NMC",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/2974631?v=4",
|
||||
"profile": "https://nmc.dev",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "andres-baller",
|
||||
"name": "andres-baller",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/52182449?v=4",
|
||||
"profile": "https://github.com/andres-baller",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "sean-borg",
|
||||
"name": "sean-borg",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/67109348?v=4",
|
||||
"profile": "https://github.com/sean-borg",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "EDVLeer",
|
||||
"name": "EDVLeer",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/32170051?v=4",
|
||||
"profile": "https://github.com/EDVLeer",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Kurokat",
|
||||
"name": "Kurokat",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/23075196?v=4",
|
||||
"profile": "https://github.com/Kurokat",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,7 +5,15 @@
|
||||
|
||||
# Make sure .env files not not browseable if in a sub-directory.
|
||||
<FilesMatch "\.env$">
|
||||
Deny from all
|
||||
# Apache 2.2
|
||||
<IfModule !authz_core_module>
|
||||
Deny from all
|
||||
</IfModule>
|
||||
|
||||
# Apache 2.4+
|
||||
<IfModule authz_core_module>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
</FilesMatch>
|
||||
|
||||
</IfModule>
|
||||
|
||||
+4
-2
@@ -1,6 +1,6 @@
|
||||
FROM alpine:3.8
|
||||
FROM alpine:3.12
|
||||
# Apache + PHP
|
||||
RUN apk add --update --no-cache \
|
||||
RUN apk add --no-cache \
|
||||
apache2 \
|
||||
php7 \
|
||||
php7-common \
|
||||
@@ -23,6 +23,8 @@ RUN apk add --update --no-cache \
|
||||
php7-fileinfo \
|
||||
php7-simplexml \
|
||||
php7-session \
|
||||
php7-dom \
|
||||
php7-xmlwriter \
|
||||
curl \
|
||||
wget \
|
||||
vim \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
 [](https://crowdin.com/project/snipe-it) [](https://gitter.im/snipe/snipe-it?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://hub.docker.com/r/snipe/snipe-it/) [](https://twitter.com/snipeitapp) [](https://www.codacy.com/app/snipe/snipe-it?utm_source=github.com&utm_medium=referral&utm_content=snipe/snipe-it&utm_campaign=Badge_Grade)
|
||||
[](#contributors)
|
||||
[](#contributors)
|
||||
|
||||
## Snipe-IT - Open Source Asset Management System
|
||||
|
||||
@@ -90,7 +90,7 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
| [<img src="https://avatars3.githubusercontent.com/u/197404?v=3" width="110px;"/><br /><sub>snipe</sub>](http://www.snipe.net)<br />[💻](https://github.com/snipe/snipe-it/commits?author=snipe "Code") [🚇](#infra-snipe "Infrastructure (Hosting, Build-Tools, etc)") [📖](https://github.com/snipe/snipe-it/commits?author=snipe "Documentation") [⚠️](https://github.com/snipe/snipe-it/commits?author=snipe "Tests") [🐛](https://github.com/snipe/snipe-it/issues?q=author%3Asnipe "Bug reports") [🎨](#design-snipe "Design") [👀](#review-snipe "Reviewed Pull Requests") | [<img src="https://avatars0.githubusercontent.com/u/36335?v=3" width="110px;"/><br /><sub>Brady Wetherington</sub>](http://www.uberbrady.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=uberbrady "Code") [📖](https://github.com/snipe/snipe-it/commits?author=uberbrady "Documentation") [🚇](#infra-uberbrady "Infrastructure (Hosting, Build-Tools, etc)") [👀](#review-uberbrady "Reviewed Pull Requests") | [<img src="https://avatars0.githubusercontent.com/u/3803132?v=3" width="110px;"/><br /><sub>Daniel Meltzer</sub>](https://github.com/dmeltzer)<br />[💻](https://github.com/snipe/snipe-it/commits?author=dmeltzer "Code") [⚠️](https://github.com/snipe/snipe-it/commits?author=dmeltzer "Tests") [📖](https://github.com/snipe/snipe-it/commits?author=dmeltzer "Documentation") | [<img src="https://avatars0.githubusercontent.com/u/1609106?v=3" width="110px;"/><br /><sub>Michael T</sub>](http://www.tuckertechonline.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mtucker6784 "Code") | [<img src="https://avatars2.githubusercontent.com/u/3274937?v=3" width="110px;"/><br /><sub>madd15</sub>](https://github.com/madd15)<br />[📖](https://github.com/snipe/snipe-it/commits?author=madd15 "Documentation") [💬](#question-madd15 "Answering Questions") | [<img src="https://avatars2.githubusercontent.com/u/894126?v=3" width="110px;"/><br /><sub>Vincent Sposato</sub>](https://github.com/vsposato)<br />[💻](https://github.com/snipe/snipe-it/commits?author=vsposato "Code") | [<img src="https://avatars0.githubusercontent.com/u/1639757?v=3" width="110px;"/><br /><sub>Andrea Bergamasco</sub>](https://github.com/vjandrea)<br />[💻](https://github.com/snipe/snipe-it/commits?author=vjandrea "Code") |
|
||||
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
|
||||
| [<img src="https://avatars0.githubusercontent.com/u/10640152?v=3" width="110px;"/><br /><sub>Karol</sub>](https://github.com/kpawelski)<br />[🌍](#translation-kpawelski "Translation") [💻](https://github.com/snipe/snipe-it/commits?author=kpawelski "Code") | [<img src="https://avatars3.githubusercontent.com/u/600106?v=3" width="110px;"/><br /><sub>morph027</sub>](http://blog.morph027.de/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=morph027 "Code") | [<img src="https://avatars3.githubusercontent.com/u/22935755?v=3" width="110px;"/><br /><sub>fvleminckx</sub>](https://github.com/fvleminckx)<br />[🚇](#infra-fvleminckx "Infrastructure (Hosting, Build-Tools, etc)") | [<img src="https://avatars2.githubusercontent.com/u/15633547?v=3" width="110px;"/><br /><sub>itsupportcmsukorg</sub>](https://github.com/itsupportcmsukorg)<br />[💻](https://github.com/snipe/snipe-it/commits?author=itsupportcmsukorg "Code") [🐛](https://github.com/snipe/snipe-it/issues?q=author%3Aitsupportcmsukorg "Bug reports") | [<img src="https://avatars3.githubusercontent.com/u/12373799?v=3" width="110px;"/><br /><sub>Frank</sub>](https://override.io)<br />[💻](https://github.com/snipe/snipe-it/commits?author=base-zero "Code") | [<img src="https://avatars0.githubusercontent.com/u/10137?v=3" width="110px;"/><br /><sub>Deleted user</sub>](https://github.com/ghost)<br />[🌍](#translation-ghost "Translation") | [<img src="https://avatars1.githubusercontent.com/u/10802313?v=3" width="110px;"/><br /><sub>tiagom62</sub>](https://github.com/tiagom62)<br />[💻](https://github.com/snipe/snipe-it/commits?author=tiagom62 "Code") [🚇](#infra-tiagom62 "Infrastructure (Hosting, Build-Tools, etc)") |
|
||||
| [<img src="https://avatars0.githubusercontent.com/u/10640152?v=3" width="110px;"/><br /><sub>Karol</sub>](https://github.com/kpawelski)<br />[🌍](#translation-kpawelski "Translation") [💻](https://github.com/snipe/snipe-it/commits?author=kpawelski "Code") | [<img src="https://avatars3.githubusercontent.com/u/600106?v=3" width="110px;"/><br /><sub>morph027</sub>](http://blog.morph027.de/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=morph027 "Code") | [<img src="https://avatars3.githubusercontent.com/u/22935755?v=3" width="110px;"/><br /><sub>fvleminckx</sub>](https://github.com/fvleminckx)<br />[🚇](#infra-fvleminckx "Infrastructure (Hosting, Build-Tools, etc)") | [<img src="https://avatars2.githubusercontent.com/u/15633547?v=3" width="110px;"/><br /><sub>itsupportcmsukorg</sub>](https://github.com/itsupportcmsukorg)<br />[💻](https://github.com/snipe/snipe-it/commits?author=itsupportcmsukorg "Code") [🐛](https://github.com/snipe/snipe-it/issues?q=author%3Aitsupportcmsukorg "Bug reports") | [<img src="https://avatars3.githubusercontent.com/u/12373799?v=3" width="110px;"/><br /><sub>Frank</sub>](https://override.io)<br />[💻](https://github.com/snipe/snipe-it/commits?author=base-zero "Code") | [<img src="https://avatars0.githubusercontent.com/u/10137?v=3" width="110px;"/><br /><sub>Deleted user</sub>](https://github.com/ghost)<br />[🌍](#translation-ghost "Translation") [💻](https://github.com/snipe/snipe-it/commits?author=ghost "Code") | [<img src="https://avatars1.githubusercontent.com/u/10802313?v=3" width="110px;"/><br /><sub>tiagom62</sub>](https://github.com/tiagom62)<br />[💻](https://github.com/snipe/snipe-it/commits?author=tiagom62 "Code") [🚇](#infra-tiagom62 "Infrastructure (Hosting, Build-Tools, etc)") |
|
||||
| [<img src="https://avatars3.githubusercontent.com/u/2389047?v=3" width="110px;"/><br /><sub>Ryan Stafford</sub>](https://github.com/rystaf)<br />[💻](https://github.com/snipe/snipe-it/commits?author=rystaf "Code") | [<img src="https://avatars2.githubusercontent.com/u/10345935?v=3" width="110px;"/><br /><sub>Eammon Hanlon</sub>](https://github.com/ehanlon)<br />[💻](https://github.com/snipe/snipe-it/commits?author=ehanlon "Code") | [<img src="https://avatars0.githubusercontent.com/u/441924?v=3" width="110px;"/><br /><sub>zjean</sub>](https://github.com/zjean)<br />[💻](https://github.com/snipe/snipe-it/commits?author=zjean "Code") | [<img src="https://avatars0.githubusercontent.com/u/12660103?v=3" width="110px;"/><br /><sub>Matthias Frei</sub>](http://www.frei.media)<br />[💻](https://github.com/snipe/snipe-it/commits?author=FREImedia "Code") | [<img src="https://avatars0.githubusercontent.com/u/3767518?v=3" width="110px;"/><br /><sub>opsydev</sub>](https://github.com/opsydev)<br />[💻](https://github.com/snipe/snipe-it/commits?author=opsydev "Code") | [<img src="https://avatars1.githubusercontent.com/u/82290?v=3" width="110px;"/><br /><sub>Daniel Dreier</sub>](http://www.ddreier.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=ddreier "Code") | [<img src="https://avatars0.githubusercontent.com/u/23448?v=3" width="110px;"/><br /><sub>Nikolai Prokoschenko</sub>](http://rassie.org)<br />[💻](https://github.com/snipe/snipe-it/commits?author=rassie "Code") |
|
||||
| [<img src="https://avatars0.githubusercontent.com/u/13452757?v=3" width="110px;"/><br /><sub>Drew</sub>](https://github.com/YetAnotherCodeMonkey)<br />[💻](https://github.com/snipe/snipe-it/commits?author=YetAnotherCodeMonkey "Code") | [<img src="https://avatars0.githubusercontent.com/u/1342320?v=3" width="110px;"/><br /><sub>Walter</sub>](https://github.com/merid14)<br />[💻](https://github.com/snipe/snipe-it/commits?author=merid14 "Code") | [<img src="https://avatars3.githubusercontent.com/u/11254614?v=3" width="110px;"/><br /><sub>Petr Baloun</sub>](https://github.com/balous)<br />[💻](https://github.com/snipe/snipe-it/commits?author=balous "Code") | [<img src="https://avatars0.githubusercontent.com/u/6117660?v=3" width="110px;"/><br /><sub>reidblomquist</sub>](https://github.com/reidblomquist)<br />[📖](https://github.com/snipe/snipe-it/commits?author=reidblomquist "Documentation") | [<img src="https://avatars0.githubusercontent.com/u/539914?v=3" width="110px;"/><br /><sub>Mathieu Kooiman</sub>](https://github.com/mathieuk)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mathieuk "Code") | [<img src="https://avatars3.githubusercontent.com/u/6606421?v=3" width="110px;"/><br /><sub>csayre</sub>](https://github.com/csayre)<br />[📖](https://github.com/snipe/snipe-it/commits?author=csayre "Documentation") | [<img src="https://avatars1.githubusercontent.com/u/768488?v=3" width="110px;"/><br /><sub>Adam Dunson</sub>](https://github.com/adamdunson)<br />[💻](https://github.com/snipe/snipe-it/commits?author=adamdunson "Code") |
|
||||
| [<img src="https://avatars0.githubusercontent.com/u/5547470?v=3" width="110px;"/><br /><sub>Hereward</sub>](https://github.com/thehereward)<br />[💻](https://github.com/snipe/snipe-it/commits?author=thehereward "Code") | [<img src="https://avatars0.githubusercontent.com/u/5802977?v=3" width="110px;"/><br /><sub>swoopdk</sub>](https://github.com/swoopdk)<br />[💻](https://github.com/snipe/snipe-it/commits?author=swoopdk "Code") | [<img src="https://avatars1.githubusercontent.com/u/3470403?v=3" width="110px;"/><br /><sub>Abdullah Alansari</sub>](https://linkedin.com/in/ahimta)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Ahimta "Code") | [<img src="https://avatars0.githubusercontent.com/u/796443?v=3" width="110px;"/><br /><sub>Micael Rodrigues</sub>](https://github.com/MicaelRodrigues)<br />[💻](https://github.com/snipe/snipe-it/commits?author=MicaelRodrigues "Code") | [<img src="https://avatars0.githubusercontent.com/u/614564?v=3" width="110px;"/><br /><sub>Patrick Gallagher</sub>](http://macadmincorner.com)<br />[📖](https://github.com/snipe/snipe-it/commits?author=patgmac "Documentation") | [<img src="https://avatars3.githubusercontent.com/u/7165922?v=3" width="110px;"/><br /><sub>Miliamber</sub>](https://github.com/Miliamber)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Miliamber "Code") | [<img src="https://avatars3.githubusercontent.com/u/861766?v=3" width="110px;"/><br /><sub>hawk554</sub>](https://github.com/hawk554)<br />[💻](https://github.com/snipe/snipe-it/commits?author=hawk554 "Code") |
|
||||
@@ -119,7 +119,9 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken
|
||||
| [<img src="https://avatars0.githubusercontent.com/u/6609453?v=4" width="110px;"/><br /><sub>Sxderp</sub>](https://github.com/Sxderp)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Sxderp "Code") | [<img src="https://avatars1.githubusercontent.com/u/4807843?v=4" width="110px;"/><br /><sub>fanta8897</sub>](https://github.com/fanta8897)<br />[💻](https://github.com/snipe/snipe-it/commits?author=fanta8897 "Code") | [<img src="https://avatars2.githubusercontent.com/u/2576509?v=4" width="110px;"/><br /><sub>Andrey Bolonin</sub>](https://andreybolonin.com/phpconsulting/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=andreybolonin "Code") | [<img src="https://avatars3.githubusercontent.com/u/2173307?v=4" width="110px;"/><br /><sub>shinayoshi</sub>](http://www.shinayoshi.net/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=shinayoshi "Code") | [<img src="https://avatars3.githubusercontent.com/u/2130159?v=4" width="110px;"/><br /><sub>Hubert</sub>](https://github.com/reuser)<br />[💻](https://github.com/snipe/snipe-it/commits?author=reuser "Code") | [<img src="https://avatars0.githubusercontent.com/u/6865789?v=4" width="110px;"/><br /><sub>KeenRivals</sub>](https://brashear.me)<br />[💻](https://github.com/snipe/snipe-it/commits?author=KeenRivals "Code") | [<img src="https://avatars3.githubusercontent.com/u/2902513?v=4" width="110px;"/><br /><sub>omyno</sub>](https://github.com/omyno)<br />[💻](https://github.com/snipe/snipe-it/commits?author=omyno "Code") |
|
||||
| [<img src="https://avatars1.githubusercontent.com/u/6271335?v=4" width="110px;"/><br /><sub>Evgeny</sub>](https://github.com/jackka)<br />[💻](https://github.com/snipe/snipe-it/commits?author=jackka "Code") | [<img src="https://avatars2.githubusercontent.com/u/1169963?v=4" width="110px;"/><br /><sub>Colin Campbell</sub>](https://digitalist.se)<br />[💻](https://github.com/snipe/snipe-it/commits?author=colin-campbell "Code") | [<img src="https://avatars3.githubusercontent.com/u/2872098?v=4" width="110px;"/><br /><sub>Ľubomír Kučera</sub>](https://github.com/lubo)<br />[💻](https://github.com/snipe/snipe-it/commits?author=lubo "Code") | [<img src="https://avatars3.githubusercontent.com/u/570639?v=4" width="110px;"/><br /><sub>Martin Meredith</sub>](https://www.sourceguru.net)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Mezzle "Code") | [<img src="https://avatars1.githubusercontent.com/u/7632599?v=4" width="110px;"/><br /><sub>Tim Farmer</sub>](https://github.com/timothyfarmer)<br />[💻](https://github.com/snipe/snipe-it/commits?author=timothyfarmer "Code") | [<img src="https://avatars0.githubusercontent.com/u/17459600?v=4" width="110px;"/><br /><sub>Marián Skrip</sub>](https://github.com/mskrip)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mskrip "Code") | [<img src="https://avatars2.githubusercontent.com/u/47435081?v=4" width="110px;"/><br /><sub>Godfrey Martinez</sub>](https://github.com/Godmartinz)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Godmartinz "Code") |
|
||||
| [<img src="https://avatars1.githubusercontent.com/u/2075128?v=4" width="110px;"/><br /><sub>bigtreeEdo</sub>](https://github.com/bigtreeEdo)<br />[💻](https://github.com/snipe/snipe-it/commits?author=bigtreeEdo "Code") | [<img src="https://avatars0.githubusercontent.com/u/5000430?v=4" width="110px;"/><br /><sub>Colin McNeil</sub>](https://colinmcneil.me/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=ColinMcNeil "Code") | [<img src="https://avatars0.githubusercontent.com/u/421625?v=4" width="110px;"/><br /><sub>JoKneeMo</sub>](https://github.com/JoKneeMo)<br />[💻](https://github.com/snipe/snipe-it/commits?author=JoKneeMo "Code") | [<img src="https://avatars0.githubusercontent.com/u/54849013?v=4" width="110px;"/><br /><sub>Joshi</sub>](http://www.redbridge.se)<br />[💻](https://github.com/snipe/snipe-it/commits?author=joshi-redbridge "Code") | [<img src="https://avatars2.githubusercontent.com/u/15731458?v=4" width="110px;"/><br /><sub>Anthony Burns</sub>](https://github.com/anthonypburns)<br />[💻](https://github.com/snipe/snipe-it/commits?author=anthonypburns "Code") | [<img src="https://avatars1.githubusercontent.com/u/63399474?v=4" width="110px;"/><br /><sub>johnson-yi</sub>](https://github.com/johnson-yi)<br />[💻](https://github.com/snipe/snipe-it/commits?author=johnson-yi "Code") | [<img src="https://avatars1.githubusercontent.com/u/1862720?v=4" width="110px;"/><br /><sub>Sanjay Govind</sub>](https://tangentmc.net)<br />[💻](https://github.com/snipe/snipe-it/commits?author=sanjay900 "Code") |
|
||||
| [<img src="https://avatars0.githubusercontent.com/u/1255375?v=4" width="110px;"/><br /><sub>Peter Upfold</sub>](https://peter.upfold.org.uk/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=PeterUpfold "Code") | [<img src="https://avatars2.githubusercontent.com/u/961717?v=4" width="110px;"/><br /><sub>Jared Biel</sub>](https://github.com/jbiel)<br />[💻](https://github.com/snipe/snipe-it/commits?author=jbiel "Code") | [<img src="https://avatars1.githubusercontent.com/u/1733625?v=4" width="110px;"/><br /><sub>Dampfklon</sub>](https://github.com/dampfklon)<br />[💻](https://github.com/snipe/snipe-it/commits?author=dampfklon "Code") | [<img src="https://avatars2.githubusercontent.com/u/52973156?v=4" width="110px;"/><br /><sub>Charles Hamilton</sub>](https://communityclosing.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=chamilton-ccn "Code") |
|
||||
| [<img src="https://avatars0.githubusercontent.com/u/1255375?v=4" width="110px;"/><br /><sub>Peter Upfold</sub>](https://peter.upfold.org.uk/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=PeterUpfold "Code") | [<img src="https://avatars2.githubusercontent.com/u/961717?v=4" width="110px;"/><br /><sub>Jared Biel</sub>](https://github.com/jbiel)<br />[💻](https://github.com/snipe/snipe-it/commits?author=jbiel "Code") | [<img src="https://avatars1.githubusercontent.com/u/1733625?v=4" width="110px;"/><br /><sub>Dampfklon</sub>](https://github.com/dampfklon)<br />[💻](https://github.com/snipe/snipe-it/commits?author=dampfklon "Code") | [<img src="https://avatars2.githubusercontent.com/u/52973156?v=4" width="110px;"/><br /><sub>Charles Hamilton</sub>](https://communityclosing.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=chamilton-ccn "Code") | [<img src="https://avatars.githubusercontent.com/u/551789?v=4" width="110px;"/><br /><sub>Giuseppe Iannello</sub>](https://github.com/giannello)<br />[💻](https://github.com/snipe/snipe-it/commits?author=giannello "Code") | [<img src="https://avatars.githubusercontent.com/u/3691490?v=4" width="110px;"/><br /><sub>Peter Dave Hello</sub>](https://www.peterdavehello.org/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=PeterDaveHello "Code") | [<img src="https://avatars.githubusercontent.com/u/6106332?v=4" width="110px;"/><br /><sub>sigmoidal</sub>](https://github.com/sigmoidal)<br />[💻](https://github.com/snipe/snipe-it/commits?author=sigmoidal "Code") |
|
||||
| [<img src="https://avatars.githubusercontent.com/u/2082554?v=4" width="110px;"/><br /><sub>Vincent Lainé</sub>](https://github.com/phenixdotnet)<br />[💻](https://github.com/snipe/snipe-it/commits?author=phenixdotnet "Code") | [<img src="https://avatars.githubusercontent.com/u/1943040?v=4" width="110px;"/><br /><sub>Lucas Pleß</sub>](http://www.lucas-pless.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=derlucas "Code") | [<img src="https://avatars.githubusercontent.com/u/472804?v=4" width="110px;"/><br /><sub>Ian Littman</sub>](http://twitter.com/iansltx)<br />[💻](https://github.com/snipe/snipe-it/commits?author=iansltx "Code") | [<img src="https://avatars.githubusercontent.com/u/3519029?v=4" width="110px;"/><br /><sub>João Paulo</sub>](https://github.com/PauloLuna)<br />[💻](https://github.com/snipe/snipe-it/commits?author=PauloLuna "Code") | [<img src="https://avatars.githubusercontent.com/u/70443365?v=4" width="110px;"/><br /><sub>ThoBur</sub>](https://github.com/ThoBur)<br />[💻](https://github.com/snipe/snipe-it/commits?author=ThoBur "Code") | [<img src="https://avatars.githubusercontent.com/u/1972329?v=4" width="110px;"/><br /><sub>Alexander Chibrikin</sub>](http://phpprofi.ru/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=alek13 "Code") | [<img src="https://avatars.githubusercontent.com/u/438332?v=4" width="110px;"/><br /><sub>Anthony Winstanley</sub>](https://github.com/winstan)<br />[💻](https://github.com/snipe/snipe-it/commits?author=winstan "Code") |
|
||||
| [<img src="https://avatars.githubusercontent.com/u/3075214?v=4" width="110px;"/><br /><sub>Folke</sub>](https://github.com/fashberg)<br />[💻](https://github.com/snipe/snipe-it/commits?author=fashberg "Code") | [<img src="https://avatars.githubusercontent.com/u/1351571?v=4" width="110px;"/><br /><sub>Bennett Blodinger</sub>](https://github.com/benwa)<br />[💻](https://github.com/snipe/snipe-it/commits?author=benwa "Code") | [<img src="https://avatars.githubusercontent.com/u/2974631?v=4" width="110px;"/><br /><sub>NMC</sub>](https://nmc.dev)<br />[💻](https://github.com/snipe/snipe-it/commits?author=ncareau "Code") | [<img src="https://avatars.githubusercontent.com/u/52182449?v=4" width="110px;"/><br /><sub>andres-baller</sub>](https://github.com/andres-baller)<br />[💻](https://github.com/snipe/snipe-it/commits?author=andres-baller "Code") | [<img src="https://avatars.githubusercontent.com/u/67109348?v=4" width="110px;"/><br /><sub>sean-borg</sub>](https://github.com/sean-borg)<br />[💻](https://github.com/snipe/snipe-it/commits?author=sean-borg "Code") | [<img src="https://avatars.githubusercontent.com/u/32170051?v=4" width="110px;"/><br /><sub>EDVLeer</sub>](https://github.com/EDVLeer)<br />[💻](https://github.com/snipe/snipe-it/commits?author=EDVLeer "Code") | [<img src="https://avatars.githubusercontent.com/u/23075196?v=4" width="110px;"/><br /><sub>Kurokat</sub>](https://github.com/Kurokat)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Kurokat "Code") |
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
|
||||
|
||||
@@ -84,7 +84,7 @@ class LdapSync extends Command
|
||||
}
|
||||
|
||||
/* Determine which location to assign users to by default. */
|
||||
$location = NULL;
|
||||
$location = NULL; // FIXME - this would be better called "$default_location", which is more explicit about its purpose
|
||||
|
||||
if ($this->option('location')!='') {
|
||||
$location = Location::where('name', '=', $this->option('location'))->first();
|
||||
@@ -106,8 +106,8 @@ class LdapSync extends Command
|
||||
$ldap_ou_locations = Location::where('ldap_ou', '!=', '')->get()->toArray();
|
||||
$ldap_ou_lengths = array();
|
||||
|
||||
foreach ($ldap_ou_locations as $location) {
|
||||
$ldap_ou_lengths[] = strlen($location["ldap_ou"]);
|
||||
foreach ($ldap_ou_locations as $ou_loc) {
|
||||
$ldap_ou_lengths[] = strlen($ou_loc["ldap_ou"]);
|
||||
}
|
||||
|
||||
array_multisort($ldap_ou_lengths, SORT_ASC, $ldap_ou_locations);
|
||||
|
||||
@@ -25,6 +25,7 @@ class Handler extends ExceptionHandler
|
||||
\Illuminate\Session\TokenMismatchException::class,
|
||||
\Illuminate\Validation\ValidationException::class,
|
||||
\Intervention\Image\Exception\NotSupportedException::class,
|
||||
\League\OAuth2\Server\Exception\OAuthServerException::class,
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -105,7 +106,7 @@ class Handler extends ExceptionHandler
|
||||
protected function unauthenticated($request, AuthenticationException $exception)
|
||||
{
|
||||
if ($request->expectsJson()) {
|
||||
return response()->json(['error' => 'Unauthorized.'], 401);
|
||||
return response()->json(['error' => 'Unauthorized or unauthenticated.'], 401);
|
||||
}
|
||||
|
||||
return redirect()->guest('login');
|
||||
|
||||
@@ -428,6 +428,26 @@ class Helper
|
||||
return $statuslabel_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of deployable status labels in an array to make a dropdown menu
|
||||
*
|
||||
* @todo This should probably be a selectlist, same as the other endpoints
|
||||
* and we should probably add to the API controllers to make sure that
|
||||
* the status_id submitted is actually really deployable.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v5.1.0]
|
||||
* @return Array
|
||||
*/
|
||||
public static function deployableStatusLabelList()
|
||||
{
|
||||
$statuslabel_list = Statuslabel::where('deployable', '=', '1')->orderBy('default_label', 'desc')
|
||||
->orderBy('name','asc')
|
||||
->orderBy('deployable','desc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
return $statuslabel_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of status label types in an array to make a dropdown menu
|
||||
*
|
||||
|
||||
@@ -30,7 +30,20 @@ class AssetModelsController extends Controller
|
||||
public function index(Request $request)
|
||||
{
|
||||
$this->authorize('view', AssetModel::class);
|
||||
$allowed_columns = ['id','image','name','model_number','eol','notes','created_at','manufacturer','requestable', 'assets_count'];
|
||||
$allowed_columns =
|
||||
[
|
||||
'id',
|
||||
'image',
|
||||
'name',
|
||||
'model_number',
|
||||
'eol',
|
||||
'notes',
|
||||
'created_at',
|
||||
'manufacturer',
|
||||
'requestable',
|
||||
'assets_count',
|
||||
'category'
|
||||
];
|
||||
|
||||
$assetmodels = AssetModel::select([
|
||||
'models.id',
|
||||
@@ -75,16 +88,16 @@ class AssetModelsController extends Controller
|
||||
case 'manufacturer':
|
||||
$assetmodels->OrderManufacturer($order);
|
||||
break;
|
||||
case 'category':
|
||||
$assetmodels->OrderCategory($order);
|
||||
break;
|
||||
default:
|
||||
$assetmodels->orderBy($sort, $order);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$total = $assetmodels->count();
|
||||
$assetmodels = $assetmodels->skip($offset)->take($limit)->get();
|
||||
return (new AssetModelsTransformer)->transformAssetModels($assetmodels, $total);
|
||||
return (new AssetModelsTransformer)->transformAssetModels($assetmodels, $assetmodels->count());
|
||||
}
|
||||
|
||||
|
||||
@@ -239,17 +252,17 @@ class AssetModelsController extends Controller
|
||||
$assetmodel->use_text = '';
|
||||
|
||||
if ($settings->modellistCheckedValue('category')) {
|
||||
$assetmodel->use_text .= (($assetmodel->category) ? e($assetmodel->category->name).' - ' : '');
|
||||
$assetmodel->use_text .= (($assetmodel->category) ? $assetmodel->category->name.' - ' : '');
|
||||
}
|
||||
|
||||
if ($settings->modellistCheckedValue('manufacturer')) {
|
||||
$assetmodel->use_text .= (($assetmodel->manufacturer) ? e($assetmodel->manufacturer->name).' ' : '');
|
||||
$assetmodel->use_text .= (($assetmodel->manufacturer) ? $assetmodel->manufacturer->name.' ' : '');
|
||||
}
|
||||
|
||||
$assetmodel->use_text .= e($assetmodel->name);
|
||||
$assetmodel->use_text .= $assetmodel->name;
|
||||
|
||||
if (($settings->modellistCheckedValue('model_number')) && ($assetmodel->model_number!='')) {
|
||||
$assetmodel->use_text .= ' (#'.e($assetmodel->model_number).')';
|
||||
$assetmodel->use_text .= ' (#'.$assetmodel->model_number.')';
|
||||
}
|
||||
|
||||
$assetmodel->use_image = ($settings->modellistCheckedValue('image') && ($assetmodel->image)) ? Storage::disk('public')->url('models/'.e($assetmodel->image)) : null;
|
||||
|
||||
@@ -141,8 +141,6 @@ class AssetsController extends Controller
|
||||
}
|
||||
|
||||
$request->filled('order_number') ? $assets = $assets->where('assets.order_number', '=', e($request->get('order_number'))) : '';
|
||||
$offset = (($assets) && (request('offset') > $assets->count())) ? 0 : request('offset', 0);
|
||||
|
||||
|
||||
// Set the offset to the API call's offset, unless the offset is higher than the actual count of items in which
|
||||
// case we override with the actual count, so we should return 0 items.
|
||||
@@ -812,7 +810,7 @@ class AssetsController extends Controller
|
||||
$asset->location_id = $request->input('location_id');
|
||||
}
|
||||
|
||||
$asset->last_audit_date = date('Y-m-d h:i:s');
|
||||
$asset->last_audit_date = date('Y-m-d H:i:s');
|
||||
|
||||
if ($asset->save()) {
|
||||
$log = $asset->logAudit(request('note'),request('location_id'));
|
||||
|
||||
@@ -20,7 +20,7 @@ class DepreciationsController extends Controller
|
||||
public function index(Request $request)
|
||||
{
|
||||
$this->authorize('view', Depreciation::class);
|
||||
$allowed_columns = ['id','name','created_at'];
|
||||
$allowed_columns = ['id','name','months','created_at'];
|
||||
|
||||
$depreciations = Depreciation::select('id','name','months','user_id','created_at','updated_at');
|
||||
|
||||
|
||||
@@ -103,11 +103,33 @@ class LicensesController extends Controller
|
||||
case 'category':
|
||||
$licenses = $licenses->leftJoin('categories', 'licenses.category_id', '=', 'categories.id')->orderBy('categories.name', $order);
|
||||
break;
|
||||
case 'depreciation':
|
||||
$licenses = $licenses->leftJoin('depreciations', 'licenses.depreciation_id', '=', 'depreciations.id')->orderBy('depreciations.name', $order);
|
||||
break;
|
||||
case 'company':
|
||||
$licenses = $licenses->leftJoin('companies', 'licenses.company_id', '=', 'companies.id')->orderBy('companies.name', $order);
|
||||
break;
|
||||
default:
|
||||
$allowed_columns = ['id','name','purchase_cost','expiration_date','purchase_order','order_number','notes','purchase_date','serial','company','category','license_name','license_email','free_seats_count','seats'];
|
||||
$allowed_columns =
|
||||
[
|
||||
'id',
|
||||
'name',
|
||||
'purchase_cost',
|
||||
'expiration_date',
|
||||
'purchase_order',
|
||||
'order_number',
|
||||
'notes',
|
||||
'purchase_date',
|
||||
'serial',
|
||||
'company',
|
||||
'category',
|
||||
'license_name',
|
||||
'license_email',
|
||||
'free_seats_count',
|
||||
'seats',
|
||||
'termination_date',
|
||||
'depreciation_id'
|
||||
];
|
||||
$sort = in_array($request->input('sort'), $allowed_columns) ? e($request->input('sort')) : 'created_at';
|
||||
$licenses = $licenses->orderBy($sort, $order);
|
||||
break;
|
||||
|
||||
@@ -60,6 +60,7 @@ class UsersController extends Controller
|
||||
'users.updated_at',
|
||||
'users.username',
|
||||
'users.zip',
|
||||
'users.ldap_import',
|
||||
|
||||
])->with('manager', 'groups', 'userloc', 'company', 'department','assets','licenses','accessories','consumables')
|
||||
->withCount('assets as assets_count','licenses as licenses_count','accessories as accessories_count','consumables as consumables_count');
|
||||
@@ -131,7 +132,7 @@ class UsersController extends Controller
|
||||
'assets','accessories', 'consumables','licenses','groups','activated','created_at',
|
||||
'two_factor_enrolled','two_factor_optin','last_login', 'assets_count', 'licenses_count',
|
||||
'consumables_count', 'accessories_count', 'phone', 'address', 'city', 'state',
|
||||
'country', 'zip', 'id'
|
||||
'country', 'zip', 'id', 'ldap_import'
|
||||
];
|
||||
|
||||
$sort = in_array($request->get('sort'), $allowed_columns) ? $request->get('sort') : 'first_name';
|
||||
@@ -184,16 +185,16 @@ class UsersController extends Controller
|
||||
foreach ($users as $user) {
|
||||
$name_str = '';
|
||||
if ($user->last_name!='') {
|
||||
$name_str .= e($user->last_name).', ';
|
||||
$name_str .= $user->last_name.', ';
|
||||
}
|
||||
$name_str .= e($user->first_name);
|
||||
$name_str .= $user->first_name;
|
||||
|
||||
if ($user->username!='') {
|
||||
$name_str .= ' ('.e($user->username).')';
|
||||
$name_str .= ' ('.$user->username.')';
|
||||
}
|
||||
|
||||
if ($user->employee_num!='') {
|
||||
$name_str .= ' - #'.e($user->employee_num);
|
||||
$name_str .= ' - #'.$user->employee_num;
|
||||
}
|
||||
|
||||
$user->use_text = $name_str;
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Assets;
|
||||
|
||||
|
||||
use App\Exceptions\CheckoutNotAllowed;
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\CheckInOutRequest;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\AssetCheckoutRequest;
|
||||
@@ -33,7 +34,8 @@ class AssetCheckoutController extends Controller
|
||||
$this->authorize('checkout', $asset);
|
||||
|
||||
if ($asset->availableForCheckout()) {
|
||||
return view('hardware/checkout', compact('asset'));
|
||||
return view('hardware/checkout', compact('asset'))
|
||||
->with('statusLabel_list', Helper::deployableStatusLabelList());
|
||||
}
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkout.not_available'));
|
||||
|
||||
@@ -75,6 +77,10 @@ class AssetCheckoutController extends Controller
|
||||
$expected_checkin = $request->get('expected_checkin');
|
||||
}
|
||||
|
||||
if ($request->filled('status_id')) {
|
||||
$asset->status_id = $request->get('status_id');
|
||||
}
|
||||
|
||||
if ($asset->checkOut($target, $admin, $checkout_at, $expected_checkin, e($request->get('note')), $request->get('name'))) {
|
||||
return redirect()->route("hardware.index")->with('success', trans('admin/hardware/message.checkout.success'));
|
||||
}
|
||||
|
||||
@@ -105,13 +105,13 @@ class LoginController extends Controller
|
||||
$samlData = $request->session()->get('saml_login');
|
||||
if ($saml->isEnabled() && !empty($samlData)) {
|
||||
try {
|
||||
LOG::debug("Attempting to log user in by SAML authentication.");
|
||||
Log::debug("Attempting to log user in by SAML authentication.");
|
||||
$user = $saml->samlLogin($samlData);
|
||||
if(!is_null($user)) {
|
||||
Auth::login($user, true);
|
||||
} else {
|
||||
$username = $saml->getUsername();
|
||||
LOG::debug("SAML user '$username' could not be found in database.");
|
||||
Log::error("SAML user '$username' could not be found in database.");
|
||||
$request->session()->flash('error', trans('auth/message.signin.error'));
|
||||
$saml->clearData();
|
||||
}
|
||||
@@ -121,7 +121,7 @@ class LoginController extends Controller
|
||||
$user->save();
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
LOG::debug("There was an error authenticating the SAML user: " . $e->getMessage());
|
||||
Log::error("There was an error authenticating the SAML user: " . $e->getMessage());
|
||||
throw new \Exception($e->getMessage());
|
||||
}
|
||||
}
|
||||
@@ -157,9 +157,26 @@ class LoginController extends Controller
|
||||
if (Setting::getSettings()->login_remote_user_enabled == "1" && isset($remote_user) && !empty($remote_user)) {
|
||||
Log::debug("Authenticating via HTTP header $header_name.");
|
||||
|
||||
$pos = strpos($remote_user, '\\');
|
||||
$strip_prefixes = [
|
||||
// IIS/AD
|
||||
// https://github.com/snipe/snipe-it/pull/5862
|
||||
'\\',
|
||||
|
||||
// Google Cloud IAP
|
||||
// https://cloud.google.com/iap/docs/identity-howto#getting_the_users_identity_with_signed_headers
|
||||
'accounts.google.com:',
|
||||
];
|
||||
|
||||
$pos = 0;
|
||||
foreach ($strip_prefixes as $needle) {
|
||||
if (($pos = strpos($remote_user, $needle)) !== FALSE) {
|
||||
$pos += strlen($needle);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($pos > 0) {
|
||||
$remote_user = substr($remote_user, $pos + 1);
|
||||
$remote_user = substr($remote_user, $pos);
|
||||
};
|
||||
|
||||
try {
|
||||
@@ -189,8 +206,8 @@ class LoginController extends Controller
|
||||
return redirect()->back()->withInput()->withErrors($validator);
|
||||
}
|
||||
|
||||
$this->maxLoginAttempts = config('auth.throttle.max_attempts');
|
||||
$this->lockoutTime = config('auth.throttle.lockout_duration');
|
||||
$this->maxLoginAttempts = config('auth.passwords.users.throttle.max_attempts');
|
||||
$this->lockoutTime = config('auth.passwords.users.throttle.lockout_duration');
|
||||
|
||||
if ($lockedOut = $this->hasTooManyLoginAttempts($request)) {
|
||||
$this->fireLockoutEvent($request);
|
||||
@@ -452,8 +469,8 @@ class LoginController extends Controller
|
||||
*/
|
||||
protected function hasTooManyLoginAttempts(Request $request)
|
||||
{
|
||||
$lockoutTime = config('auth.throttle.lockout_duration');
|
||||
$maxLoginAttempts = config('auth.throttle.max_attempts');
|
||||
$lockoutTime = config('auth.passwords.users.throttle.lockout_duration');
|
||||
$maxLoginAttempts = config('auth.passwords.users.throttle.max_attempts');
|
||||
|
||||
return $this->limiter()->tooManyAttempts(
|
||||
$this->throttleKey($request),
|
||||
|
||||
@@ -101,8 +101,8 @@ class SamlController extends Controller
|
||||
$errors = $auth->getErrors();
|
||||
|
||||
if (!empty($errors)) {
|
||||
Log::debug("There was an error with SAML ACS: " . implode(', ', $errors));
|
||||
Log::debug("Reason: " . $auth->getLastErrorReason());
|
||||
Log::error("There was an error with SAML ACS: " . implode(', ', $errors));
|
||||
Log::error("Reason: " . $auth->getLastErrorReason());
|
||||
return redirect()->route('login')->with('error', trans('auth/message.signin.error'));
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ class SamlController extends Controller
|
||||
* Receives LogoutRequest/LogoutResponse from IdP and flashes
|
||||
* back to the LoginController for logging out.
|
||||
*
|
||||
* /saml/slo
|
||||
* /saml/sls
|
||||
*
|
||||
* @author Johnson Yi <jyi.dev@outlook.com>
|
||||
*
|
||||
@@ -132,8 +132,8 @@ class SamlController extends Controller
|
||||
$errors = $auth->getErrors();
|
||||
|
||||
if (!empty($errors)) {
|
||||
Log::debug("There was an error with SAML SLS: " . implode(', ', $errors));
|
||||
Log::debug("Reason: " . $auth->getLastErrorReason());
|
||||
Log::error("There was an error with SAML SLS: " . implode(', ', $errors));
|
||||
Log::error("Reason: " . $auth->getLastErrorReason());
|
||||
return view('errors.403');
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
|
||||
|
||||
/**
|
||||
* This controller provide the healthz route for
|
||||
* the Snipe-IT Asset Management application.
|
||||
*
|
||||
* @version v1.0
|
||||
*/
|
||||
class HealthController extends BaseController
|
||||
{
|
||||
/**
|
||||
* Returns a fixed JSON content ({ "status": "ok"}) which indicate the app is up and running
|
||||
*/
|
||||
public function get() {
|
||||
return response()->json([
|
||||
"status" => "ok"
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -67,7 +67,6 @@ class LocationsController extends Controller
|
||||
{
|
||||
$this->authorize('create', Location::class);
|
||||
$location = new Location();
|
||||
$location->id = null; // This is required to make Laravels different validation work, it errors if the parameter doesn't exist (maybe a bug)?
|
||||
$location->name = $request->input('name');
|
||||
$location->parent_id = $request->input('parent_id', null);
|
||||
$location->currency = $request->input('currency', '$');
|
||||
@@ -132,7 +131,6 @@ class LocationsController extends Controller
|
||||
return redirect()->route('locations.index')->with('error', trans('admin/locations/message.does_not_exist'));
|
||||
}
|
||||
|
||||
|
||||
// Update the location data
|
||||
$location->name = $request->input('name');
|
||||
$location->parent_id = $request->input('parent_id', null);
|
||||
|
||||
@@ -632,6 +632,14 @@ class ReportsController extends Controller
|
||||
if (($request->filled('expected_checkin_start')) && ($request->filled('expected_checkin_end'))) {
|
||||
$assets->whereBetween('assets.expected_checkin', [$request->input('expected_checkin_start'), $request->input('expected_checkin_end')]);
|
||||
}
|
||||
|
||||
if (($request->filled('last_audit_start')) && ($request->filled('last_audit_end'))) {
|
||||
$assets->whereBetween('assets.last_audit_date', [$request->input('last_audit_start'), $request->input('last_audit_end')]);
|
||||
}
|
||||
|
||||
if (($request->filled('next_audit_start')) && ($request->filled('next_audit_end'))) {
|
||||
$assets->whereBetween('assets.next_audit_date', [$request->input('next_audit_start'), $request->input('next_audit_end')]);
|
||||
}
|
||||
|
||||
$assets->orderBy('assets.created_at', 'ASC')->chunk(20, function($assets) use($handle, $customfields, $request) {
|
||||
|
||||
|
||||
@@ -577,6 +577,7 @@ class SettingsController extends Controller
|
||||
$setting->default_currency = $request->input('default_currency', '$');
|
||||
$setting->date_display_format = $request->input('date_display_format');
|
||||
$setting->time_display_format = $request->input('time_display_format');
|
||||
$setting->digit_separator = $request->input('digit_separator');
|
||||
|
||||
if ($setting->save()) {
|
||||
return redirect()->route('settings.index')
|
||||
@@ -1141,6 +1142,7 @@ class SettingsController extends Controller
|
||||
*/
|
||||
public function getPurge()
|
||||
{
|
||||
\Log::warning('User ID '.Auth::user()->id.' is attempting a PURGE');
|
||||
return view('settings.purge-form');
|
||||
}
|
||||
|
||||
@@ -1157,6 +1159,8 @@ class SettingsController extends Controller
|
||||
{
|
||||
if (! config('app.lock_passwords')) {
|
||||
if ('DELETE' == $request->input('confirm_purge')) {
|
||||
|
||||
\Log::warning('User ID '.Auth::user()->id.' initiated a PURGE!');
|
||||
// Run a backup immediately before processing
|
||||
Artisan::call('backup:run');
|
||||
Artisan::call('snipeit:purge', ['--force' => 'true', '--no-interaction' => true]);
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
|
||||
use App\Services\LdapAd;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use App\Models\User; // Note that this is awful close to 'Users' the namespace above; be careful
|
||||
|
||||
class LDAPImportController extends Controller
|
||||
{
|
||||
@@ -65,6 +66,7 @@ class LDAPImportController extends Controller
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->authorize('update', User::class);
|
||||
// Call Artisan LDAP import command.
|
||||
$location_id = $request->input('location_id');
|
||||
Artisan::call('snipeit:ldap-sync', ['--location_id' => $location_id, '--json_summary' => true]);
|
||||
|
||||
@@ -38,7 +38,7 @@ class UserFilesController extends Controller
|
||||
$filename = 'user-' . $user->id . '-' . str_random(8);
|
||||
$filename .= '-' . str_slug($file->getClientOriginalName()) . '.' . $extension;
|
||||
if (!$file->move($destinationPath, $filename)) {
|
||||
return JsonResponse::create(["error" => "Unabled to move file"], 500);
|
||||
return redirect()->back()->with('error', trans('admin/users/message.upload.invalidfiles'));
|
||||
}
|
||||
//Log the uploaded file to the log
|
||||
$logAction = new Actionlog();
|
||||
@@ -57,10 +57,10 @@ class UserFilesController extends Controller
|
||||
}
|
||||
$logActions[] = $logAction;
|
||||
}
|
||||
// dd($logActions);
|
||||
return JsonResponse::create($logActions);
|
||||
// dd($logActions);
|
||||
return redirect()->back()->with('success', trans('admin/users/message.upload.success'));
|
||||
}
|
||||
return JsonResponse::create(["error" => "No User associated with this request"], 500);
|
||||
return redirect()->back()->with('error', trans('admin/users/message.upload.nofiles'));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ class Kernel extends HttpKernel
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [
|
||||
\App\Http\Middleware\NoSessionStore::class,
|
||||
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
|
||||
@@ -27,7 +27,7 @@ class CheckForSetup
|
||||
}
|
||||
|
||||
} else {
|
||||
if (!($request->is('setup*')) && !($request->is('.env'))) {
|
||||
if (!($request->is('setup*')) && !($request->is('.env')) && !($request->is('health'))) {
|
||||
return redirect(url('/').'/setup');
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
|
||||
class NoSessionStore
|
||||
{
|
||||
protected $except = [
|
||||
'health'
|
||||
];
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
foreach ($this->except as $except) {
|
||||
if ($request->is($except)) {
|
||||
config()->set('session.driver', 'array');
|
||||
}
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -12,5 +12,6 @@ class VerifyCsrfToken extends BaseVerifier
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
'health'
|
||||
];
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ class ImageUploadRequest extends Request
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'image' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml',
|
||||
'image' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml,webp',
|
||||
'avatar' => 'mimes:png,gif,jpg,jpeg,svg,bmp,svg+xml',
|
||||
];
|
||||
}
|
||||
@@ -91,8 +91,8 @@ class ImageUploadRequest extends Request
|
||||
\Log::info('File name will be: '.$file_name);
|
||||
\Log::debug('File extension is: '. $ext);
|
||||
|
||||
if ($image->getClientOriginalExtension()!=='svg') {
|
||||
\Log::debug('Not an SVG - resize');
|
||||
if (($image->getClientOriginalExtension()!=='webp') && ($image->getClientOriginalExtension()!=='svg')) {
|
||||
\Log::debug('Not an SVG or webp - resize');
|
||||
\Log::debug('Trying to upload to: '.$path.'/'.$file_name);
|
||||
$upload = Image::make($image->getRealPath())->resize(null, $w, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
@@ -102,20 +102,27 @@ class ImageUploadRequest extends Request
|
||||
// This requires a string instead of an object, so we use ($string)
|
||||
Storage::disk('public')->put($path.'/'.$file_name, (string)$upload->encode());
|
||||
|
||||
|
||||
// If the file is an SVG, we need to clean it and NOT encode it
|
||||
} else {
|
||||
\Log::debug('This is an SVG');
|
||||
$sanitizer = new Sanitizer();
|
||||
$dirtySVG = file_get_contents($image->getRealPath());
|
||||
$cleanSVG = $sanitizer->sanitize($dirtySVG);
|
||||
// If the file is a webp, we need to just move it since webp support
|
||||
// needs to be compiled into gd for resizing to be available
|
||||
if ($image->getClientOriginalExtension()=='webp') {
|
||||
\Log::debug('This is a webp, just move it');
|
||||
Storage::disk('public')->put($path.'/'.$file_name, file_get_contents($image));
|
||||
// If the file is an SVG, we need to clean it and NOT encode it
|
||||
} else {
|
||||
|
||||
try {
|
||||
\Log::debug('Trying to upload to: '.$path.'/'.$file_name);
|
||||
Storage::disk('public')->put($path.'/'.$file_name, $cleanSVG);
|
||||
} catch (\Exception $e) {
|
||||
\Log::debug('Upload no workie :( ');
|
||||
\Log::debug($e);
|
||||
\Log::debug('This is an SVG');
|
||||
$sanitizer = new Sanitizer();
|
||||
$dirtySVG = file_get_contents($image->getRealPath());
|
||||
$cleanSVG = $sanitizer->sanitize($dirtySVG);
|
||||
|
||||
try {
|
||||
\Log::debug('Trying to upload to: '.$path.'/'.$file_name);
|
||||
Storage::disk('public')->put($path.'/'.$file_name, $cleanSVG);
|
||||
} catch (\Exception $e) {
|
||||
\Log::debug('Upload no workie :( ');
|
||||
\Log::debug($e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ class SetupUserRequest extends Request
|
||||
'last_name' => 'required|string|min:1',
|
||||
'username' => 'required|string|min:2|unique:users,username,NULL,deleted_at',
|
||||
'email' => 'email|unique:users,email',
|
||||
'password' => 'required|min:6|confirmed',
|
||||
'password' => 'required|min:8|confirmed',
|
||||
'email_domain' => 'required|min:4',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ class LicensesTransformer
|
||||
'order_number' => e($license->order_number),
|
||||
'purchase_order' => e($license->purchase_order),
|
||||
'purchase_date' => Helper::getFormattedDateObject($license->purchase_date, 'date'),
|
||||
'termination_date' => Helper::getFormattedDateObject($license->termination_date, 'date'),
|
||||
'depreciation' => ($license->depreciation) ? ['id' => (int) $license->depreciation->id,'name'=> e($license->depreciation->name)] : null,
|
||||
'purchase_cost' => e($license->purchase_cost),
|
||||
'notes' => e($license->notes),
|
||||
'expiration_date' => Helper::getFormattedDateObject($license->expiration_date, 'date'),
|
||||
|
||||
@@ -25,15 +25,15 @@ class SelectlistTransformer
|
||||
foreach ($select_items as $select_item) {
|
||||
$items_array[]= [
|
||||
'id' => (int) $select_item->id,
|
||||
'text' => ($select_item->use_text) ? e($select_item->use_text) : e($select_item->name),
|
||||
'image' => ($select_item->use_image) ? e($select_item->use_image) : null,
|
||||
'text' => ($select_item->use_text) ? $select_item->use_text : $select_item->name,
|
||||
'image' => ($select_item->use_image) ? $select_item->use_image : null,
|
||||
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
$results = [
|
||||
'items' => $items_array,
|
||||
'results' => $items_array,
|
||||
'pagination' =>
|
||||
[
|
||||
'more' => ($select_items->currentPage() >= $select_items->lastPage()) ? false : true,
|
||||
|
||||
@@ -52,6 +52,7 @@ class UsersTransformer
|
||||
'notes'=> e($user->notes),
|
||||
'permissions' => $user->decodePermissions(),
|
||||
'activated' => ($user->activated =='1') ? true : false,
|
||||
'ldap_import' => ($user->ldap_import =='1') ? true : false,
|
||||
'two_factor_activated' => ($user->two_factor_active()) ? true : false,
|
||||
'two_factor_enrolled' => ($user->two_factor_active_and_enrolled()) ? true : false,
|
||||
'assets_count' => (int) $user->assets_count,
|
||||
|
||||
@@ -125,7 +125,10 @@ class UserImporter extends ItemImporter
|
||||
if ($department) {
|
||||
$this->log('A matching department ' . $department_name . ' already exists');
|
||||
return $department->id;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
$department = new department();
|
||||
$department->name = $department_name;
|
||||
$department->user_id = $this->user_id;
|
||||
@@ -134,7 +137,8 @@ class UserImporter extends ItemImporter
|
||||
$this->log('department ' . $department_name . ' was created');
|
||||
return $department->id;
|
||||
}
|
||||
$this->logError($department, 'Company');
|
||||
|
||||
$this->logError($department, 'Department');
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
+12
-7
@@ -246,13 +246,18 @@ class Asset extends Depreciable
|
||||
*/
|
||||
public function availableForCheckout()
|
||||
{
|
||||
if (
|
||||
((!$this->assignedTo) && ($this->assetstatus->archived == 0)) ||
|
||||
((empty($this->assigned_to)) &&
|
||||
(empty($this->deleted_at)) &&
|
||||
(($this->assetstatus) && ($this->assetstatus->deployable == 1))))
|
||||
{
|
||||
return true;
|
||||
|
||||
// This asset is not currently assigned to anyone and is not deleted...
|
||||
if ((!$this->assigned_to) && (!$this->deleted_at)) {
|
||||
|
||||
// The asset status is not archived and is deployable
|
||||
if (($this->assetstatus) && ($this->assetstatus->archived == '0')
|
||||
&& ($this->assetstatus->deployable == '1'))
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -287,7 +287,10 @@ class CustomField extends Model
|
||||
{
|
||||
$arr = preg_split("/\\r\\n|\\r|\\n/", $this->field_values);
|
||||
|
||||
$result[''] = 'Select '.strtolower($this->format);
|
||||
if (($this->element!='checkbox') && ($this->element!='radio')) {
|
||||
$result[''] = 'Select '.strtolower($this->format);
|
||||
}
|
||||
|
||||
|
||||
for ($x = 0; $x < count($arr); $x++) {
|
||||
$arr_parts = explode('|', $arr[$x]);
|
||||
|
||||
@@ -108,6 +108,7 @@ class License extends Depreciable
|
||||
'manufacturer' => ['name'],
|
||||
'company' => ['name'],
|
||||
'category' => ['name'],
|
||||
'depreciation' => ['name'],
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,7 +28,7 @@ class Location extends SnipeModel
|
||||
'address2' => 'max:80|nullable',
|
||||
'zip' => 'min:3|max:10|nullable',
|
||||
'manager_id' => 'exists:users,id|nullable',
|
||||
'parent_id' => 'nullable|exists:locations,id|different:id',
|
||||
'parent_id' => 'non_circular:locations,id'
|
||||
);
|
||||
|
||||
protected $casts = [
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Policies;
|
||||
|
||||
class PredefinedKitPolicy extends SnipePermissionsPolicy
|
||||
{
|
||||
protected function columnName()
|
||||
{
|
||||
return 'kits';
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,129 @@ namespace App\Presenters;
|
||||
*/
|
||||
class AssetModelPresenter extends Presenter
|
||||
{
|
||||
|
||||
public static function dataTableLayout() {
|
||||
|
||||
$layout = [
|
||||
[
|
||||
"field" => "checkbox",
|
||||
"checkbox" => true
|
||||
],
|
||||
[
|
||||
"field" => "id",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.id'),
|
||||
"visible" => false
|
||||
], [
|
||||
"field" => "company",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('admin/companies/table.title'),
|
||||
"visible" => false,
|
||||
"formatter" => "companiesLinkObjFormatter"
|
||||
], [
|
||||
"field" => "name",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"visible" => true,
|
||||
"title" => trans('general.name'),
|
||||
"formatter" => "modelsLinkFormatter"
|
||||
],
|
||||
[
|
||||
"field" => "image",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.image'),
|
||||
"visible" => true,
|
||||
"formatter" => 'imageFormatter',
|
||||
],
|
||||
[
|
||||
"field" => "manufacturer",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.manufacturer'),
|
||||
"visible" => false,
|
||||
"formatter" => 'manufacturersLinkObjFormatter',
|
||||
],
|
||||
[
|
||||
"field" => "model_number",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('admin/models/table.modelnumber'),
|
||||
"visible" => true,
|
||||
],
|
||||
[
|
||||
"field" => "assets_count",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('admin/models/table.numassets'),
|
||||
"visible" => true,
|
||||
],
|
||||
[
|
||||
"field" => "depreciation",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.depreciation'),
|
||||
"visible" => false,
|
||||
"formatter" => "depreciationsLinkObjFormatter",
|
||||
],
|
||||
[
|
||||
"field" => "category",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.category'),
|
||||
"visible" => false,
|
||||
"formatter" => "categoriesLinkObjFormatter",
|
||||
],
|
||||
[
|
||||
"field" => "eol",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.eol'),
|
||||
"visible" => true,
|
||||
],
|
||||
[
|
||||
"field" => "fieldset",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('admin/models/general.fieldset'),
|
||||
"visible" => true,
|
||||
"formatter" => "fieldsetsLinkObjFormatter",
|
||||
],
|
||||
[
|
||||
"field" => "notes",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.notes'),
|
||||
"visible" => false,
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
$layout[] = [
|
||||
"field" => "actions",
|
||||
"searchable" => false,
|
||||
"sortable" => false,
|
||||
"switchable" => false,
|
||||
"title" => trans('table.actions'),
|
||||
"formatter" => "licensesActionsFormatter",
|
||||
];
|
||||
|
||||
|
||||
return json_encode($layout);
|
||||
|
||||
}
|
||||
/**
|
||||
* Formatted note for this model
|
||||
* @return string
|
||||
|
||||
@@ -146,6 +146,7 @@ class AssetPresenter extends Presenter
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"title" => trans('general.purchase_cost'),
|
||||
"formatter" => 'numberWithCommas',
|
||||
"footerFormatter" => 'sumFormatter',
|
||||
], [
|
||||
"field" => "order_number",
|
||||
@@ -360,18 +361,13 @@ class AssetPresenter extends Presenter
|
||||
/**
|
||||
* Get Displayable Name
|
||||
* @return string
|
||||
*
|
||||
* @todo this should be factored out - it should be subsumed by fullName (below)
|
||||
*
|
||||
**/
|
||||
public function name()
|
||||
{
|
||||
|
||||
if (empty($this->model->name)) {
|
||||
if (isset($this->model->model)) {
|
||||
return $this->model->model->name.' ('.$this->model->asset_tag.')';
|
||||
}
|
||||
return $this->model->asset_tag;
|
||||
}
|
||||
return $this->model->name . ' (' . $this->model->asset_tag . ')';
|
||||
|
||||
return $this->fullName;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -381,13 +377,18 @@ class AssetPresenter extends Presenter
|
||||
public function fullName()
|
||||
{
|
||||
$str = '';
|
||||
|
||||
// Asset name
|
||||
if ($this->model->name) {
|
||||
$str .= $this->name;
|
||||
$str .= $this->model->name;
|
||||
}
|
||||
|
||||
// Asset tag
|
||||
if ($this->asset_tag) {
|
||||
$str .= ' ('.$this->model->asset_tag.')';
|
||||
}
|
||||
|
||||
// Asset Model name
|
||||
if ($this->model->model) {
|
||||
$str .= ' - '.$this->model->model->name;
|
||||
}
|
||||
|
||||
@@ -8,5 +8,49 @@ namespace App\Presenters;
|
||||
*/
|
||||
class DepreciationPresenter extends Presenter
|
||||
{
|
||||
/**
|
||||
* Json Column Layout for bootstrap table
|
||||
* @return string
|
||||
*/
|
||||
public static function dataTableLayout()
|
||||
{
|
||||
$layout = [
|
||||
[
|
||||
"field" => "id",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('general.id'),
|
||||
"visible" => false
|
||||
], [
|
||||
"field" => "name",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"title" => trans('general.name'),
|
||||
"visible" => true,
|
||||
"formatter" => 'depreciationsLinkFormatter',
|
||||
],
|
||||
|
||||
[
|
||||
"field" => "months",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"title" => trans('admin/depreciations/table.term'),
|
||||
"visible" => true,
|
||||
],
|
||||
|
||||
[
|
||||
"field" => "actions",
|
||||
"searchable" => false,
|
||||
"sortable" => false,
|
||||
"switchable" => false,
|
||||
"title" => trans('table.actions'),
|
||||
"visible" => true,
|
||||
"formatter" => "depreciationsActionsFormatter",
|
||||
]
|
||||
];
|
||||
|
||||
return json_encode($layout);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -97,7 +97,26 @@ class LicensePresenter extends Presenter
|
||||
"visible" => false,
|
||||
"title" => trans('general.purchase_date'),
|
||||
'formatter' => 'dateDisplayFormatter'
|
||||
], [
|
||||
],
|
||||
[
|
||||
"field" => "termination_date",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"visible" => false,
|
||||
"title" => trans('admin/licenses/form.termination_date'),
|
||||
'formatter' => 'dateDisplayFormatter'
|
||||
],
|
||||
[
|
||||
"field" => "depreciation",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('admin/hardware/form.depreciation'),
|
||||
"visible" => false,
|
||||
"formatter" => "depreciationsLinkObjFormatter",
|
||||
],
|
||||
|
||||
[
|
||||
"field" => "maintained",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
|
||||
@@ -225,6 +225,15 @@ class UserPresenter extends Presenter
|
||||
"visible" => true,
|
||||
'formatter' => 'groupsFormatter'
|
||||
],
|
||||
[
|
||||
"field" => "ldap_import",
|
||||
"searchable" => false,
|
||||
"sortable" => true,
|
||||
"switchable" => true,
|
||||
"title" => trans('admin/settings/general.ldap_enabled'),
|
||||
"visible" => false,
|
||||
'formatter' => 'trueFalseFormatter'
|
||||
],
|
||||
[
|
||||
"field" => "two_factor_enrolled",
|
||||
"searchable" => false,
|
||||
|
||||
@@ -16,6 +16,7 @@ use App\Models\Depreciation;
|
||||
use App\Models\License;
|
||||
use App\Models\Location;
|
||||
use App\Models\Manufacturer;
|
||||
use App\Models\PredefinedKit;
|
||||
use App\Models\Statuslabel;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\User;
|
||||
@@ -33,6 +34,7 @@ use App\Policies\DepreciationPolicy;
|
||||
use App\Policies\LicensePolicy;
|
||||
use App\Policies\LocationPolicy;
|
||||
use App\Policies\ManufacturerPolicy;
|
||||
use App\Policies\PredefinedKitPolicy;
|
||||
use App\Policies\StatuslabelPolicy;
|
||||
use App\Policies\SupplierPolicy;
|
||||
use App\Policies\UserPolicy;
|
||||
@@ -63,6 +65,7 @@ class AuthServiceProvider extends ServiceProvider
|
||||
Depreciation::class => DepreciationPolicy::class,
|
||||
License::class => LicensePolicy::class,
|
||||
Location::class => LocationPolicy::class,
|
||||
PredefinedKit::class => PredefinedKitPolicy::class,
|
||||
Statuslabel::class => StatuslabelPolicy::class,
|
||||
Supplier::class => SupplierPolicy::class,
|
||||
User::class => UserPolicy::class,
|
||||
|
||||
@@ -58,6 +58,52 @@ class ValidationServiceProvider extends ServiceProvider
|
||||
});
|
||||
|
||||
|
||||
// Prevent circular references
|
||||
//
|
||||
// Example usage in Location model where parent_id references another Location:
|
||||
//
|
||||
// protected $rules = array(
|
||||
// 'parent_id' => 'non_circular:locations,id,10'
|
||||
// );
|
||||
//
|
||||
Validator::extend('non_circular', function ($attribute, $value, $parameters, $validator) {
|
||||
if (count($parameters) < 2) {
|
||||
throw new \Exception('Required validator parameters: <table>,<primary key>[,depth]');
|
||||
}
|
||||
|
||||
// Parameters from the rule implementation ($pk will likely be 'id')
|
||||
$table = array_get($parameters, 0);
|
||||
$pk = array_get($parameters, 1);
|
||||
$depth = (int) array_get($parameters, 2, 50);
|
||||
|
||||
// Data from the edited model
|
||||
$data = $validator->getData();
|
||||
|
||||
// The primary key value from the edited model
|
||||
$data_pk = array_get($data, $pk);
|
||||
$value_pk = $value;
|
||||
|
||||
// If we’re editing an existing model and there is a parent value set…
|
||||
while ($data_pk && $value_pk) {
|
||||
|
||||
// It’s not valid for any parent id to be equal to the existing model’s id
|
||||
if ($data_pk == $value_pk) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Avoid accidental infinite loops
|
||||
if (--$depth < 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get the next parent id
|
||||
$value_pk = DB::table($table)->select($attribute)->where($pk, '=', $value_pk)->value($attribute);
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
// Yo dawg. I heard you like validators.
|
||||
// This validates the custom validator regex in custom fields.
|
||||
// We're just checking that the regex won't throw an exception, not
|
||||
|
||||
@@ -235,15 +235,20 @@ class LdapAd extends LdapAdConfiguration
|
||||
$user->employee_num = trim($userInfo['employee_number']);
|
||||
$user->jobtitle = trim($userInfo['title']);
|
||||
$user->phone = trim($userInfo['telephonenumber']);
|
||||
if(array_key_exists('activated',$userInfo)) {
|
||||
if (array_key_exists('activated',$userInfo)) {
|
||||
$user->activated = $userInfo['activated'];
|
||||
} else if ( !$user->exists ) { // no 'activated' flag was set or unset, *AND* this user is new - activate by default.
|
||||
$user->activated = 1;
|
||||
}
|
||||
if(array_key_exists('location_id',$userInfo)) {
|
||||
if (array_key_exists('location_id',$userInfo)) {
|
||||
$user->location_id = $userInfo['location_id'];
|
||||
}
|
||||
$user->notes = 'Imported from LDAP';
|
||||
|
||||
// this is a new user
|
||||
if (!isset($user->id)) {
|
||||
$user->notes = 'Imported from LDAP';
|
||||
}
|
||||
|
||||
$user->ldap_import = 1;
|
||||
|
||||
return $user;
|
||||
|
||||
+6
-6
@@ -11,13 +11,14 @@
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"type": "project",
|
||||
"require": {
|
||||
"php": "^7.2",
|
||||
"php": "^7.2.5",
|
||||
"ext-curl": "*",
|
||||
"ext-fileinfo": "*",
|
||||
"ext-json": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-pdo": "*",
|
||||
"adldap2/adldap2": "^10.2",
|
||||
"alek13/slack": "^1.12",
|
||||
"bacon/bacon-qr-code": "^1.0",
|
||||
"barryvdh/laravel-cors": "^0.11.3",
|
||||
"barryvdh/laravel-debugbar": "^3.2",
|
||||
@@ -33,16 +34,15 @@
|
||||
"guzzlehttp/guzzle": "^6.5",
|
||||
"intervention/image": "^2.5",
|
||||
"javiereguiluz/easyslugger": "^1.0",
|
||||
"laravel/framework": "^6.0",
|
||||
"laravel/framework": "^6.20",
|
||||
"laravel/helpers": "^1.2",
|
||||
"laravel/passport": "^8.4",
|
||||
"laravel/passport": "^9.3.2",
|
||||
"laravel/slack-notification-channel": "^2.0",
|
||||
"laravel/tinker": "^2.4",
|
||||
"laravelcollective/html": "^6.0",
|
||||
"league/csv": "^9.5",
|
||||
"league/flysystem-aws-s3-v3": "^1.0",
|
||||
"league/flysystem-cached-adapter": "^1.0",
|
||||
"maknz/slack": "^1.7",
|
||||
"neitanod/forceutf8": "^2.0",
|
||||
"nesbot/carbon": "^2.32",
|
||||
"onelogin/php-saml": "^3.4",
|
||||
@@ -110,7 +110,7 @@
|
||||
"optimize-autoloader": true,
|
||||
"process-timeout": 3000,
|
||||
"platform": {
|
||||
"php": "7.2"
|
||||
"php": "7.2.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Generated
+2891
-1248
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -279,7 +279,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'min_php' => '7.1.3',
|
||||
'min_php' => '7.2.5',
|
||||
|
||||
|
||||
/*
|
||||
|
||||
+4
-1
@@ -103,7 +103,10 @@ return [
|
||||
'email' => 'auth.emails.password',
|
||||
'table' => 'password_resets',
|
||||
'expire' => env('RESET_PASSWORD_LINK_EXPIRES', 900),
|
||||
'throttle' => env('LOGIN_MAX_ATTEMPTS', 60),
|
||||
'throttle' => [
|
||||
'max_attempts' => env('LOGIN_MAX_ATTEMPTS', 5),
|
||||
'lockout_duration' => env('LOGIN_LOCKOUT_DURATION', 60)
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
+5
-5
@@ -1,10 +1,10 @@
|
||||
<?php
|
||||
return array (
|
||||
'app_version' => 'v5.0.10',
|
||||
'full_app_version' => 'v5.0.10 - build 5680-gf9b1fdc36',
|
||||
'build_version' => '5680',
|
||||
'app_version' => 'v5.1.0',
|
||||
'full_app_version' => 'v5.1.0 - build 5772-g124343911',
|
||||
'build_version' => '5772',
|
||||
'prerelease_version' => '',
|
||||
'hash_version' => 'gf9b1fdc36',
|
||||
'full_hash' => 'v5.0.10-21-gf9b1fdc36',
|
||||
'hash_version' => 'g124343911',
|
||||
'full_hash' => 'v5.1.0-46-g124343911',
|
||||
'branch' => 'master',
|
||||
);
|
||||
@@ -17,7 +17,7 @@ class CreateCheckoutAcceptancesTable extends Migration
|
||||
$table->increments('id');
|
||||
|
||||
$table->morphs('checkoutable');
|
||||
$table->integer('assigned_to_id')->unsigned();
|
||||
$table->integer('assigned_to_id')->nullable();
|
||||
|
||||
$table->string('signature_filename')->nullable();
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddDigitSeparatorToSettings extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('settings', function (Blueprint $table) {
|
||||
$table->char('digit_separator')->nullable()->default('1234.56');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('settings', function (Blueprint $table) {
|
||||
$table->dropColumn('digit_separator');
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class SwapTargetTypeIndexOrder extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('action_logs', function (Blueprint $table) {
|
||||
$table->dropIndex(['target_id', 'target_type']);
|
||||
});
|
||||
|
||||
Schema::table('action_logs', function (Blueprint $table) {
|
||||
$table->index(['target_type', 'target_id']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('action_logs', function (Blueprint $table) {
|
||||
$table->dropIndex(['target_type', 'target_id']);
|
||||
});
|
||||
|
||||
Schema::table('action_logs', function (Blueprint $table) {
|
||||
$table->index(['target_id', 'target_type']);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class UpdateMinPassword extends Migration
|
||||
{
|
||||
/**
|
||||
* This migration solves the issue of settings with a minimum password requirement
|
||||
* that is below the actual Snipe-IT minimum requirement in v5 (min 5 became min 8).
|
||||
*
|
||||
* Even though we documented the change in all of the v5 releases, we were still
|
||||
* running into issues where admins did not update their password minimum length
|
||||
* and could not save settings elsewhere, and would not see a warning.
|
||||
*
|
||||
* @todo Loosen up the model level validation for the Settings model and rely on
|
||||
* FormRequests where it makes more sense. Having a form that returns no useful
|
||||
* errors is a bad design pattern.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
App\Models\Setting::where('pwd_secure_min', '<', '8')
|
||||
->update(['pwd_secure_min' => '8']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class FixBadLdapServerUrlForV5 extends Migration
|
||||
{
|
||||
/**
|
||||
* Under v4 and previous versions of Snipe-IT, we permitted users to incorrectly specify LDAP URL's in their settings, and Snipe-IT
|
||||
* would silently permit that.
|
||||
*
|
||||
* v5's LDAP system is not so lenient, and requires either ldap:// or ldaps:// in front of the server's URL. This migration tries
|
||||
* to find misconfigured LDAP URL's and prepend 'ldap://' to them. (That's what we assumed if we *didn't* see ldaps://)
|
||||
*/
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
// UPDATE settings SET ldap_server = CONCAT('ldap://',ldap_server) WHERE ldap_server NOT LIKE 'ldap://%' AND ldap_server NOT LIKE 'ldaps://%'
|
||||
$settings = App\Models\Setting::where("ldap_server","not like","ldap://%")->where("ldap_server","not like","ldaps://%");
|
||||
foreach($settings->get() AS $setting) { // we don't formally support having multiple settings records, but just in case they come up...
|
||||
$setting->ldap_server = "ldap://".$setting->ldap_server;
|
||||
$setting->save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
// Since previous versions supported ldap:// URL's just fine, we don't need to migrate these changes back out on rollback.
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ class SettingsSeeder extends Seeder
|
||||
$settings->per_page = 20;
|
||||
$settings->site_name = 'Snipe-IT Demo';
|
||||
$settings->auto_increment_assets = 1;
|
||||
$settings->logo = 'logo.png';
|
||||
$settings->logo = 'snipe-logo.png';
|
||||
$settings->alert_email = 'service@snipe-it.io';
|
||||
$settings->header_color = null;
|
||||
$settings->barcode_type = 'QRCODE';
|
||||
|
||||
@@ -49,5 +49,7 @@ php artisan migrate --force
|
||||
php artisan config:clear
|
||||
php artisan config:cache
|
||||
|
||||
chown -R apache:root /var/www/html/storage/logs/laravel.log
|
||||
|
||||
export APACHE_LOG_DIR=/var/log/apache2
|
||||
exec httpd -DNO_DETACH < /dev/null
|
||||
|
||||
Generated
+443
-463
File diff suppressed because it is too large
Load Diff
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 17 KiB |
File diff suppressed because one or more lines are too long
Vendored
+34
-34
File diff suppressed because one or more lines are too long
+16
-16
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"/js/build/app.js": "/js/build/app.js?id=648e026d19aa24504e0f",
|
||||
"/js/build/app.js": "/js/build/app.js?id=547172c6f8c07ebbfc3f",
|
||||
"/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",
|
||||
@@ -7,32 +7,32 @@
|
||||
"/css/dist/skins/skin-red.css": "/css/dist/skins/skin-red.css?id=747948e5f269f64047f7",
|
||||
"/css/dist/skins/skin-contrast.css": "/css/dist/skins/skin-contrast.css?id=d7996d850e8bcdc4e167",
|
||||
"/css/dist/skins/skin-green.css": "/css/dist/skins/skin-green.css?id=eb25d2ec49f730d09431",
|
||||
"/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=eb4404a7b646ea42e025",
|
||||
"/css/dist/skins/skin-green-dark.css": "/css/dist/skins/skin-green-dark.css?id=3b3c544f99a912a4a27b",
|
||||
"/css/dist/skins/skin-black.css": "/css/dist/skins/skin-black.css?id=35602987835e5d50d162",
|
||||
"/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=5789dd8af07b08034581",
|
||||
"/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=2e9f90ff200d4e9f45a8",
|
||||
"/css/dist/skins/skin-black-dark.css": "/css/dist/skins/skin-black-dark.css?id=1a1ebcc437f2de698c27",
|
||||
"/css/dist/skins/skin-red-dark.css": "/css/dist/skins/skin-red-dark.css?id=9b0d44d6e3a9cf46fa02",
|
||||
"/css/dist/skins/skin-purple.css": "/css/dist/skins/skin-purple.css?id=b6dcb6d5c666fc5c8cc0",
|
||||
"/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=8150adf2e5f70ec3eb00",
|
||||
"/css/dist/skins/skin-purple-dark.css": "/css/dist/skins/skin-purple-dark.css?id=3acc03e5a20757aa08ca",
|
||||
"/css/dist/skins/skin-yellow.css": "/css/dist/skins/skin-yellow.css?id=cb85a4e40e784319e878",
|
||||
"/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=5fc4a3cf9407c6a9d398",
|
||||
"/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=2f665cf40d7348b3f94c",
|
||||
"/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=5267e92a8df9ba833e01",
|
||||
"/css/dist/skins/skin-yellow-dark.css": "/css/dist/skins/skin-yellow-dark.css?id=46311efe6c78ad08a7ce",
|
||||
"/css/dist/skins/skin-blue-dark.css": "/css/dist/skins/skin-blue-dark.css?id=1473bf8494b4c962eb44",
|
||||
"/css/dist/skins/skin-orange-dark.css": "/css/dist/skins/skin-orange-dark.css?id=b41e38b304805136e81f",
|
||||
"/css/dist/skins/skin-orange.css": "/css/dist/skins/skin-orange.css?id=b4fc4a74e1f6367dc3e2",
|
||||
"/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/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=eb4404a7b646ea42e025",
|
||||
"/css/dist/skins/skin-black-dark.min.css": "/css/dist/skins/skin-black-dark.min.css?id=5789dd8af07b08034581",
|
||||
"/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=2f665cf40d7348b3f94c",
|
||||
"/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=5fc4a3cf9407c6a9d398",
|
||||
"/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=2e9f90ff200d4e9f45a8",
|
||||
"/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=8150adf2e5f70ec3eb00",
|
||||
"/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=5267e92a8df9ba833e01",
|
||||
"/css/dist/skins/skin-green-dark.min.css": "/css/dist/skins/skin-green-dark.min.css?id=3b3c544f99a912a4a27b",
|
||||
"/css/dist/skins/skin-black-dark.min.css": "/css/dist/skins/skin-black-dark.min.css?id=1a1ebcc437f2de698c27",
|
||||
"/css/dist/skins/skin-blue-dark.min.css": "/css/dist/skins/skin-blue-dark.min.css?id=1473bf8494b4c962eb44",
|
||||
"/css/dist/skins/skin-yellow-dark.min.css": "/css/dist/skins/skin-yellow-dark.min.css?id=46311efe6c78ad08a7ce",
|
||||
"/css/dist/skins/skin-red-dark.min.css": "/css/dist/skins/skin-red-dark.min.css?id=9b0d44d6e3a9cf46fa02",
|
||||
"/css/dist/skins/skin-purple-dark.min.css": "/css/dist/skins/skin-purple-dark.min.css?id=3acc03e5a20757aa08ca",
|
||||
"/css/dist/skins/skin-orange-dark.min.css": "/css/dist/skins/skin-orange-dark.min.css?id=b41e38b304805136e81f",
|
||||
"/css/dist/skins/skin-contrast.min.css": "/css/dist/skins/skin-contrast.min.css?id=d7996d850e8bcdc4e167",
|
||||
"/css/dist/signature-pad.css": "/css/dist/signature-pad.css?id=6a89d3cd901305e66ced",
|
||||
"/css/build/signature-pad.min.css": "/css/build/signature-pad.min.css?id=d41d8cd98f00b204e980",
|
||||
"/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=58d95c93430f2ae33392",
|
||||
"/js/dist/all.js": "/js/dist/all.js?id=b4627a6533d841cd8fdf"
|
||||
"/js/dist/all.js": "/js/dist/all.js?id=8443e32cebc5ad69befd"
|
||||
}
|
||||
|
||||
@@ -212,7 +212,7 @@ $(document).ready(function () {
|
||||
};
|
||||
return data;
|
||||
},
|
||||
processResults: function (data, params) {
|
||||
/* processResults: function (data, params) {
|
||||
|
||||
params.page = params.page || 1;
|
||||
|
||||
@@ -224,12 +224,12 @@ $(document).ready(function () {
|
||||
};
|
||||
|
||||
return answer;
|
||||
},
|
||||
}, */
|
||||
cache: true
|
||||
},
|
||||
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
|
||||
templateResult: formatDatalist,
|
||||
templateSelection: formatDataSelection
|
||||
//escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
|
||||
templateResult: formatDatalistSafe,
|
||||
//templateSelection: formatDataSelection
|
||||
});
|
||||
|
||||
});
|
||||
@@ -331,12 +331,12 @@ $(document).ready(function () {
|
||||
return loading_markup;
|
||||
}
|
||||
|
||||
var markup = "<div class='clearfix'>" ;
|
||||
markup +="<div class='pull-left' style='padding-right: 10px;'>";
|
||||
var markup = '<div class="clearfix">' ;
|
||||
markup += '<div class="pull-left" style="padding-right: 10px;">';
|
||||
if (datalist.image) {
|
||||
markup += "<div style='width: 30px;'><img src='" + datalist.image + "' style='max-height: 20px; max-width: 30px;' alt='" + datalist.text + "'></div>";
|
||||
} else {
|
||||
markup += "<div style='height: 20px; width: 30px;'></div>";
|
||||
markup += '<div style="height: 20px; width: 30px;"></div>';
|
||||
}
|
||||
|
||||
markup += "</div><div>" + datalist.text + "</div>";
|
||||
@@ -344,6 +344,58 @@ $(document).ready(function () {
|
||||
return markup;
|
||||
}
|
||||
|
||||
function formatDatalistSafe(datalist) {
|
||||
// console.warn("What in the hell is going on with Select2?!?!!?!?");
|
||||
// console.warn($.select2);
|
||||
if (datalist.loading) {
|
||||
return $('<i class="fa fa-spinner fa-spin" aria-hidden="true"></i> Loading...');
|
||||
}
|
||||
|
||||
var root_div = $("<div class='clearfix'>") ;
|
||||
var left_pull = $("<div class='pull-left' style='padding-right: 10px;'>");
|
||||
if (datalist.image) {
|
||||
var inner_div = $("<div style='width: 30px;'>");
|
||||
/******************************************************************
|
||||
*
|
||||
* We are specifically chosing empty alt-text below, because this
|
||||
* image conveys no additional information, relative to the text
|
||||
* that will *always* be there in any select2 list that is in use
|
||||
* in Snipe-IT. If that changes, we would probably want to change
|
||||
* some signatures of some functions, but right now, we don't want
|
||||
* screen readers to say "HP SuperJet 5000, .... picture of HP
|
||||
* SuperJet 5000..." and so on, for every single row in a list of
|
||||
* assets or models or whatever.
|
||||
*
|
||||
*******************************************************************/
|
||||
var img = $("<img src='' style='max-height: 20px; max-width: 30px;' alt=''>");
|
||||
// console.warn("Img is: ");
|
||||
// console.dir(img);
|
||||
// console.warn("Strigularly, that's: ");
|
||||
// console.log(img);
|
||||
img.attr("src", datalist.image );
|
||||
inner_div.append(img)
|
||||
} else {
|
||||
var inner_div=$("<div style='height: 20px; width: 30px;'></div>");
|
||||
}
|
||||
left_pull.append(inner_div);
|
||||
root_div.append(left_pull);
|
||||
var name_div = $("<div>");
|
||||
name_div.text(datalist.text);
|
||||
root_div.append(name_div)
|
||||
var safe_html = root_div.get(0).outerHTML;
|
||||
var old_html = formatDatalist(datalist);
|
||||
if(safe_html != old_html) {
|
||||
console.log("HTML MISMATCH: ");
|
||||
console.log("FormatDatalistSafe: ");
|
||||
// console.dir(root_div.get(0));
|
||||
console.log(safe_html);
|
||||
console.log("FormatDataList: ");
|
||||
console.log(old_html);
|
||||
}
|
||||
return root_div;
|
||||
|
||||
}
|
||||
|
||||
function formatDataSelection (datalist) {
|
||||
// This a heinous workaround for a known bug in Select2.
|
||||
// Without this, the rich selectlists are vulnerable to XSS.
|
||||
|
||||
@@ -69,7 +69,7 @@ $(function () {
|
||||
};
|
||||
return data;
|
||||
},
|
||||
processResults: function (data, params) {
|
||||
/*processResults: function (data, params) {
|
||||
|
||||
params.page = params.page || 1;
|
||||
|
||||
@@ -81,12 +81,12 @@ $(function () {
|
||||
};
|
||||
|
||||
return answer;
|
||||
},
|
||||
},*/
|
||||
cache: true
|
||||
},
|
||||
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
|
||||
templateResult: formatDatalist,
|
||||
templateSelection: formatDataSelection
|
||||
//escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
|
||||
templateResult: formatDatalistSafe,
|
||||
//templateSelection: formatDataSelection
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -108,10 +108,15 @@ a {
|
||||
--background: #222;
|
||||
--back-main: #333;
|
||||
--back-sub: #444;
|
||||
--button-default: darken(@black, 15%);
|
||||
--button-primary: darken(@black, 25%);
|
||||
--button-hover: darken(@black, 30%);
|
||||
--header: @black; /* Use same as Header picker */
|
||||
--text-main: #FFF;
|
||||
--text-sub: #BBB;
|
||||
--link: lighten(@black, 50%); /* Use same as Header picker */
|
||||
--text-main: #BBB;
|
||||
--text-sub: #9b9b9b;
|
||||
--link: lighten(@black, 30%); /* Use same as Header picker, lighten by 70% */
|
||||
--visited-link: lighten(@black, 40%); /* Use same as Header picker, lighten by 70% */
|
||||
--hover-link: lighten(@black, 45%); /* Use same as Header picker, lighten by 70% */
|
||||
--nav-link: #FFF; /* Use same as Header picker */
|
||||
--light-link: #fff; /* Use same as Header picker */
|
||||
}
|
||||
@@ -123,7 +128,11 @@ a {
|
||||
border-color: var(--header);
|
||||
}
|
||||
|
||||
.navbar-nav>li>a:link {
|
||||
.bootstrap-table .fixed-table-container .table thead th .sortable {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.thead, .navbar-nav>li>a:link {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
@@ -131,22 +140,39 @@ a {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.popover {
|
||||
background-color:var(--back-main);
|
||||
}
|
||||
.popover-title {
|
||||
background-color: #111;
|
||||
|
||||
a:link {
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
a, a:link, a:visited, .btn-primary.hover {
|
||||
color: var(--header);
|
||||
a:visited {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--hover-link);
|
||||
}
|
||||
|
||||
.btn-primary.hover {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.small-box h3, .small-box p {
|
||||
color: var(--nav-link) !important;
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: var(--nav-link) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#accessoriesTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
#assetsListingTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
#assetsListingTable>tbody>tr.selected>td {
|
||||
background-color: var(--back-main);
|
||||
}
|
||||
@@ -159,22 +185,28 @@ body {
|
||||
}
|
||||
.box-body, .box-footer, .box-header {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--header);
|
||||
}
|
||||
.btn-default{
|
||||
background-color: var(--back-main);
|
||||
color: var(--header);
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default dropdown-toggle {
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default:active, .btn-default:focus, .btn-default:hover, .btn-default.active {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--header);
|
||||
background-color: var(--button-hover);
|
||||
color: var(--link);
|
||||
}
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-blue {
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-black {
|
||||
color: var(--text-main)!important;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--header)!important;
|
||||
background-color: var(--button-primary);
|
||||
color: var(--link)!important;
|
||||
}
|
||||
#componentsTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
@@ -201,16 +233,20 @@ body {
|
||||
}
|
||||
.dropdown-menu, .dropdown-menu>li>a {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--text-main) !important;
|
||||
}
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
color: var(--nav-link);
|
||||
}
|
||||
.form-control {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6, p {
|
||||
color: var(--text-main);
|
||||
}
|
||||
@@ -275,6 +311,9 @@ input[type=text], input[type=search] {
|
||||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||
color: var(--text-main);
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: var(--header);
|
||||
}
|
||||
.select2-selection--single {
|
||||
background-color: var(--back-sub)!important;
|
||||
color: var(--text-main)!important;
|
||||
@@ -296,20 +335,25 @@ input[type=text], input[type=search] {
|
||||
.table-striped>tbody>tr:nth-of-type(odd) {
|
||||
background-color: var(--back-sub);
|
||||
}
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa {
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa, .box-body, .box-footer, .box-header {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
.box-header.with-border {
|
||||
border-bottom: #000;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
|
||||
&:link {
|
||||
color: var(--link);
|
||||
}
|
||||
color: var(--link) }
|
||||
&:hover {
|
||||
color: var(--light-link);
|
||||
color: var(--hover-link);
|
||||
text-decoration: underline;
|
||||
}
|
||||
&:visited {
|
||||
color: var(--link);
|
||||
color: var(--visited-link)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,10 +108,15 @@ a {
|
||||
--background: #222;
|
||||
--back-main: #333;
|
||||
--back-sub: #444;
|
||||
--button-default: darken(@blue, 15%);
|
||||
--button-primary: darken(@blue, 25%);
|
||||
--button-hover: darken(@blue, 30%);
|
||||
--header: @blue; /* Use same as Header picker */
|
||||
--text-main: #FFF;
|
||||
--text-sub: #BBB;
|
||||
--link: lighten(@blue, 50%); /* Use same as Header picker */
|
||||
--text-main: #BBB;
|
||||
--text-sub: #9b9b9b;
|
||||
--link: lighten(@blue, 30%); /* Use same as Header picker, lighten by 70% */
|
||||
--visited-link: lighten(@blue, 40%); /* Use same as Header picker, lighten by 70% */
|
||||
--hover-link: lighten(@blue, 45%); /* Use same as Header picker, lighten by 70% */
|
||||
--nav-link: #FFF; /* Use same as Header picker */
|
||||
--light-link: #fff; /* Use same as Header picker */
|
||||
}
|
||||
@@ -123,7 +128,11 @@ a {
|
||||
border-color: var(--header);
|
||||
}
|
||||
|
||||
.navbar-nav>li>a:link {
|
||||
.bootstrap-table .fixed-table-container .table thead th .sortable {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.thead, .navbar-nav>li>a:link {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
@@ -132,15 +141,38 @@ a {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
a, a:link, a:visited, .btn-primary.hover {
|
||||
color: var(--header);
|
||||
a:link {
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--hover-link);
|
||||
}
|
||||
|
||||
.btn-primary.hover {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.small-box h3, .small-box p {
|
||||
color: var(--nav-link) !important;
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: var(--nav-link) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#accessoriesTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
#assetsListingTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
#assetsListingTable>tbody>tr.selected>td {
|
||||
background-color: var(--back-main);
|
||||
}
|
||||
@@ -153,22 +185,28 @@ body {
|
||||
}
|
||||
.box-body, .box-footer, .box-header {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--header);
|
||||
}
|
||||
.btn-default{
|
||||
background-color: var(--back-main);
|
||||
color: var(--header);
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default dropdown-toggle {
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default:active, .btn-default:focus, .btn-default:hover, .btn-default.active {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--header);
|
||||
background-color: var(--button-hover);
|
||||
color: var(--link);
|
||||
}
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-blue {
|
||||
color: var(--text-main)!important;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--header)!important;
|
||||
background-color: var(--button-primary);
|
||||
color: var(--link)!important;
|
||||
}
|
||||
#componentsTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
@@ -195,16 +233,20 @@ body {
|
||||
}
|
||||
.dropdown-menu, .dropdown-menu>li>a {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--text-main) !important;
|
||||
}
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
color: var(--nav-link);
|
||||
}
|
||||
.form-control {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6, p {
|
||||
color: var(--text-main);
|
||||
}
|
||||
@@ -269,6 +311,9 @@ input[type=text], input[type=search] {
|
||||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||
color: var(--text-main);
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: var(--header);
|
||||
}
|
||||
.select2-selection--single {
|
||||
background-color: var(--back-sub)!important;
|
||||
color: var(--text-main)!important;
|
||||
@@ -290,20 +335,25 @@ input[type=text], input[type=search] {
|
||||
.table-striped>tbody>tr:nth-of-type(odd) {
|
||||
background-color: var(--back-sub);
|
||||
}
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa {
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa, .box-body, .box-footer, .box-header {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
.box-header.with-border {
|
||||
border-bottom: #000;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
|
||||
&:link {
|
||||
color: var(--link);
|
||||
}
|
||||
color: var(--link) }
|
||||
&:hover {
|
||||
color: var(--light-link);
|
||||
color: var(--hover-link);
|
||||
text-decoration: underline;
|
||||
}
|
||||
&:visited {
|
||||
color: var(--link);
|
||||
color: var(--visited-link)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,10 +108,15 @@ a {
|
||||
--background: #222;
|
||||
--back-main: #333;
|
||||
--back-sub: #444;
|
||||
--button-default: darken(@green, 15%);
|
||||
--button-primary: darken(@green, 25%);
|
||||
--button-hover: darken(@green, 30%);
|
||||
--header: @green; /* Use same as Header picker */
|
||||
--text-main: #FFF;
|
||||
--text-sub: #BBB;
|
||||
--link: lighten(@green, 50%); /* Use same as Header picker */
|
||||
--text-main: #BBB;
|
||||
--text-sub: #9b9b9b;
|
||||
--link: lighten(@green, 30%); /* Use same as Header picker, lighten by 70% */
|
||||
--visited-link: lighten(@green, 40%); /* Use same as Header picker, lighten by 70% */
|
||||
--hover-link: lighten(@green, 45%); /* Use same as Header picker, lighten by 70% */
|
||||
--nav-link: #FFF; /* Use same as Header picker */
|
||||
--light-link: #fff; /* Use same as Header picker */
|
||||
}
|
||||
@@ -123,7 +128,11 @@ a {
|
||||
border-color: var(--header);
|
||||
}
|
||||
|
||||
.navbar-nav>li>a:link {
|
||||
.bootstrap-table .fixed-table-container .table thead th .sortable {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.thead, .navbar-nav>li>a:link {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
@@ -131,29 +140,42 @@ a {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.popover {
|
||||
background-color:var(--back-main);
|
||||
}
|
||||
.popover-title {
|
||||
background-color: #00a65a;
|
||||
|
||||
a:link {
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
a, a:link, a:visited, .btn-primary.hover {
|
||||
color: var(--header);
|
||||
a:visited {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--hover-link);
|
||||
}
|
||||
|
||||
.btn-primary.hover {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.small-box h3, .small-box p {
|
||||
color: var(--nav-link) !important;
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: var(--nav-link) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#accessoriesTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
#assetsListingTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
#assetsListingTable>tbody>tr.selected>td {
|
||||
background-color: var(--back-main);
|
||||
}
|
||||
#assetsListingTable>tbody>tr>td {
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
body {
|
||||
color: var(--text-main);
|
||||
}
|
||||
@@ -163,22 +185,28 @@ body {
|
||||
}
|
||||
.box-body, .box-footer, .box-header {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--header);
|
||||
}
|
||||
.btn-default{
|
||||
background-color: var(--back-main);
|
||||
color: var(--header);
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default dropdown-toggle {
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default:active, .btn-default:focus, .btn-default:hover, .btn-default.active {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--header);
|
||||
background-color: var(--button-hover);
|
||||
color: var(--link);
|
||||
}
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-blue {
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-green {
|
||||
color: var(--text-main)!important;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--header)!important;
|
||||
background-color: var(--button-primary);
|
||||
color: var(--link)!important;
|
||||
}
|
||||
#componentsTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
@@ -205,23 +233,20 @@ body {
|
||||
}
|
||||
.dropdown-menu, .dropdown-menu>li>a {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--text-main) !important;
|
||||
}
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.dynamic-form-row{
|
||||
color: @green;
|
||||
}
|
||||
|
||||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||
color: var(--header);
|
||||
color: var(--nav-link);
|
||||
}
|
||||
.form-control {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6, p {
|
||||
color: var(--text-main);
|
||||
}
|
||||
@@ -236,9 +261,6 @@ input[type=text], input[type=search] {
|
||||
background-color: var(--back-sub)!important;
|
||||
color: var(--text-main);
|
||||
}
|
||||
li.select2-results__option{
|
||||
color:@green;
|
||||
}
|
||||
#licensesTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
@@ -289,6 +311,9 @@ li.select2-results__option{
|
||||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||
color: var(--text-main);
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: var(--header);
|
||||
}
|
||||
.select2-selection--single {
|
||||
background-color: var(--back-sub)!important;
|
||||
color: var(--text-main)!important;
|
||||
@@ -310,22 +335,25 @@ li.select2-results__option{
|
||||
.table-striped>tbody>tr:nth-of-type(odd) {
|
||||
background-color: var(--back-sub);
|
||||
}
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa {
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa, .box-body, .box-footer, .box-header {
|
||||
color: var(--text-main);
|
||||
}
|
||||
#webui>#app>.row>.col-md-12>.box>.box-body>.row>.col-md-12 {
|
||||
color:@green;
|
||||
|
||||
.box-header.with-border {
|
||||
border-bottom: #000;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
|
||||
&:link {
|
||||
color: var(--link);
|
||||
}
|
||||
color: var(--link) }
|
||||
&:hover {
|
||||
color: var(--light-link);
|
||||
color: var(--hover-link);
|
||||
text-decoration: underline;
|
||||
}
|
||||
&:visited {
|
||||
color: var(--link);
|
||||
color: var(--visited-link)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,3 +383,4 @@ a {
|
||||
border-top: 1px solid #dddddd;
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
|
||||
@@ -108,10 +108,15 @@ a {
|
||||
--background: #222;
|
||||
--back-main: #333;
|
||||
--back-sub: #444;
|
||||
--button-default: darken(@orange, 15%);
|
||||
--button-primary: darken(@orange, 25%);
|
||||
--button-hover: darken(@orange, 30%);
|
||||
--header: @orange; /* Use same as Header picker */
|
||||
--text-main: #FFF;
|
||||
--text-sub: #BBB;
|
||||
--link: lighten(@orange, 50%); /* Use same as Header picker */
|
||||
--text-main: #BBB;
|
||||
--text-sub: #9b9b9b;
|
||||
--link: lighten(@orange, 30%); /* Use same as Header picker, lighten by 70% */
|
||||
--visited-link: lighten(@orange, 40%); /* Use same as Header picker, lighten by 70% */
|
||||
--hover-link: lighten(@orange, 45%); /* Use same as Header picker, lighten by 70% */
|
||||
--nav-link: #FFF; /* Use same as Header picker */
|
||||
--light-link: #fff; /* Use same as Header picker */
|
||||
}
|
||||
@@ -123,7 +128,11 @@ a {
|
||||
border-color: var(--header);
|
||||
}
|
||||
|
||||
.navbar-nav>li>a:link {
|
||||
.bootstrap-table .fixed-table-container .table thead th .sortable {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.thead, .navbar-nav>li>a:link {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
@@ -131,22 +140,39 @@ a {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.popover {
|
||||
background-color:var(--back-main);
|
||||
}
|
||||
.popover-title {
|
||||
background-color: #ff8c00;
|
||||
|
||||
a:link {
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
a, a:link, a:visited, .btn-primary.hover {
|
||||
color: var(--header);
|
||||
a:visited {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--hover-link);
|
||||
}
|
||||
|
||||
.btn-primary.hover {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.small-box h3, .small-box p {
|
||||
color: var(--nav-link) !important;
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: var(--nav-link) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#accessoriesTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
#assetsListingTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
#assetsListingTable>tbody>tr.selected>td {
|
||||
background-color: var(--back-main);
|
||||
}
|
||||
@@ -159,22 +185,28 @@ body {
|
||||
}
|
||||
.box-body, .box-footer, .box-header {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--header);
|
||||
}
|
||||
.btn-default{
|
||||
background-color: var(--back-main);
|
||||
color: var(--header);
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default dropdown-toggle {
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default:active, .btn-default:focus, .btn-default:hover, .btn-default.active {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--header);
|
||||
background-color: var(--button-hover);
|
||||
color: var(--link);
|
||||
}
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-blue {
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-orange {
|
||||
color: var(--text-main)!important;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--header)!important;
|
||||
background-color: var(--button-primary);
|
||||
color: var(--link)!important;
|
||||
}
|
||||
#componentsTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
@@ -201,16 +233,20 @@ body {
|
||||
}
|
||||
.dropdown-menu, .dropdown-menu>li>a {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--text-main) !important;
|
||||
}
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
color: var(--nav-link);
|
||||
}
|
||||
.form-control {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6, p {
|
||||
color: var(--text-main);
|
||||
}
|
||||
@@ -275,6 +311,9 @@ input[type=text], input[type=search] {
|
||||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||
color: var(--text-main);
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: var(--header);
|
||||
}
|
||||
.select2-selection--single {
|
||||
background-color: var(--back-sub)!important;
|
||||
color: var(--text-main)!important;
|
||||
@@ -296,20 +335,25 @@ input[type=text], input[type=search] {
|
||||
.table-striped>tbody>tr:nth-of-type(odd) {
|
||||
background-color: var(--back-sub);
|
||||
}
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa {
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa, .box-body, .box-footer, .box-header {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
.box-header.with-border {
|
||||
border-bottom: #000;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
|
||||
&:link {
|
||||
color: var(--link);
|
||||
}
|
||||
color: var(--link) }
|
||||
&:hover {
|
||||
color: var(--light-link);
|
||||
color: var(--hover-link);
|
||||
text-decoration: underline;
|
||||
}
|
||||
&:visited {
|
||||
color: var(--link);
|
||||
color: var(--visited-link)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,10 +108,15 @@ a {
|
||||
--background: #222;
|
||||
--back-main: #333;
|
||||
--back-sub: #444;
|
||||
--button-default: darken(@purple, 15%);
|
||||
--button-primary: darken(@purple, 25%);
|
||||
--button-hover: darken(@purple, 30%);
|
||||
--header: @purple; /* Use same as Header picker */
|
||||
--text-main: #FFF;
|
||||
--text-sub: #BBB;
|
||||
--link: lighten(@purple, 50%); /* Use same as Header picker */
|
||||
--text-main: #BBB;
|
||||
--text-sub: #9b9b9b;
|
||||
--link: lighten(@purple, 30%); /* Use same as Header picker, lighten by 70% */
|
||||
--visited-link: lighten(@purple, 40%); /* Use same as Header picker, lighten by 70% */
|
||||
--hover-link: lighten(@purple, 45%); /* Use same as Header picker, lighten by 70% */
|
||||
--nav-link: #FFF; /* Use same as Header picker */
|
||||
--light-link: #fff; /* Use same as Header picker */
|
||||
}
|
||||
@@ -123,7 +128,11 @@ a {
|
||||
border-color: var(--header);
|
||||
}
|
||||
|
||||
.navbar-nav>li>a:link {
|
||||
.bootstrap-table .fixed-table-container .table thead th .sortable {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.thead, .navbar-nav>li>a:link {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
@@ -131,22 +140,39 @@ a {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.popover {
|
||||
background-color:var(--back-main);
|
||||
}
|
||||
.popover-title {
|
||||
background-color: #605ca8;
|
||||
|
||||
a:link {
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
a, a:link, a:visited, .btn-primary.hover {
|
||||
color: var(--header);
|
||||
a:visited {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--hover-link);
|
||||
}
|
||||
|
||||
.btn-primary.hover {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.small-box h3, .small-box p {
|
||||
color: var(--nav-link) !important;
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: var(--nav-link) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#accessoriesTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
#assetsListingTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
#assetsListingTable>tbody>tr.selected>td {
|
||||
background-color: var(--back-main);
|
||||
}
|
||||
@@ -159,22 +185,28 @@ body {
|
||||
}
|
||||
.box-body, .box-footer, .box-header {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--header);
|
||||
}
|
||||
.btn-default{
|
||||
background-color: var(--back-main);
|
||||
color: var(--header);
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default dropdown-toggle {
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default:active, .btn-default:focus, .btn-default:hover, .btn-default.active {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--header);
|
||||
background-color: var(--button-hover);
|
||||
color: var(--link);
|
||||
}
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-blue {
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-purple {
|
||||
color: var(--text-main)!important;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--header)!important;
|
||||
background-color: var(--button-primary);
|
||||
color: var(--link)!important;
|
||||
}
|
||||
#componentsTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
@@ -201,16 +233,20 @@ body {
|
||||
}
|
||||
.dropdown-menu, .dropdown-menu>li>a {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--text-main) !important;
|
||||
}
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
color: var(--nav-link);
|
||||
}
|
||||
.form-control {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6, p {
|
||||
color: var(--text-main);
|
||||
}
|
||||
@@ -275,6 +311,9 @@ input[type=text], input[type=search] {
|
||||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||
color: var(--text-main);
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: var(--header);
|
||||
}
|
||||
.select2-selection--single {
|
||||
background-color: var(--back-sub)!important;
|
||||
color: var(--text-main)!important;
|
||||
@@ -296,20 +335,25 @@ input[type=text], input[type=search] {
|
||||
.table-striped>tbody>tr:nth-of-type(odd) {
|
||||
background-color: var(--back-sub);
|
||||
}
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa {
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa, .box-body, .box-footer, .box-header {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
.box-header.with-border {
|
||||
border-bottom: #000;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
|
||||
&:link {
|
||||
color: var(--link);
|
||||
}
|
||||
color: var(--link) }
|
||||
&:hover {
|
||||
color: var(--light-link);
|
||||
color: var(--hover-link);
|
||||
text-decoration: underline;
|
||||
}
|
||||
&:visited {
|
||||
color: var(--link);
|
||||
color: var(--visited-link)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,10 +108,15 @@ a {
|
||||
--background: #222;
|
||||
--back-main: #333;
|
||||
--back-sub: #444;
|
||||
--button-default: darken(@red, 15%);
|
||||
--button-primary: darken(@red, 25%);
|
||||
--button-hover: darken(@red, 30%);
|
||||
--header: @red; /* Use same as Header picker */
|
||||
--text-main: #FFF;
|
||||
--text-sub: #BBB;
|
||||
--link: lighten(@red, 50%); /* Use same as Header picker */
|
||||
--text-main: #BBB;
|
||||
--text-sub: #9b9b9b;
|
||||
--link: lighten(@red, 30%); /* Use same as Header picker, lighten by 70% */
|
||||
--visited-link: lighten(@red, 40%); /* Use same as Header picker, lighten by 70% */
|
||||
--hover-link: lighten(@red, 45%); /* Use same as Header picker, lighten by 70% */
|
||||
--nav-link: #FFF; /* Use same as Header picker */
|
||||
--light-link: #fff; /* Use same as Header picker */
|
||||
}
|
||||
@@ -123,7 +128,11 @@ a {
|
||||
border-color: var(--header);
|
||||
}
|
||||
|
||||
.navbar-nav>li>a:link {
|
||||
.bootstrap-table .fixed-table-container .table thead th .sortable {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.thead, .navbar-nav>li>a:link {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
@@ -132,15 +141,38 @@ a {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
a, a:link, a:visited, .btn-primary.hover {
|
||||
color: var(--header);
|
||||
a:link {
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--hover-link);
|
||||
}
|
||||
|
||||
.btn-primary.hover {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.small-box h3, .small-box p {
|
||||
color: var(--nav-link) !important;
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: var(--nav-link) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#accessoriesTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
#assetsListingTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
#assetsListingTable>tbody>tr.selected>td {
|
||||
background-color: var(--back-main);
|
||||
}
|
||||
@@ -153,22 +185,28 @@ body {
|
||||
}
|
||||
.box-body, .box-footer, .box-header {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--header);
|
||||
}
|
||||
.btn-default{
|
||||
background-color: var(--back-main);
|
||||
color: var(--header);
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default dropdown-toggle {
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default:active, .btn-default:focus, .btn-default:hover, .btn-default.active {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--header);
|
||||
background-color: var(--button-hover);
|
||||
color: var(--link);
|
||||
}
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-blue {
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-red {
|
||||
color: var(--text-main)!important;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--header)!important;
|
||||
background-color: var(--button-primary);
|
||||
color: var(--link)!important;
|
||||
}
|
||||
#componentsTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
@@ -195,16 +233,20 @@ body {
|
||||
}
|
||||
.dropdown-menu, .dropdown-menu>li>a {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--text-main) !important;
|
||||
}
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
color: var(--nav-link);
|
||||
}
|
||||
.form-control {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6, p {
|
||||
color: var(--text-main);
|
||||
}
|
||||
@@ -258,12 +300,6 @@ input[type=text], input[type=search] {
|
||||
background-color: var(--back-main);
|
||||
color: var(--header);
|
||||
}
|
||||
.popover {
|
||||
background-color:var(--back-main);
|
||||
}
|
||||
.popover-title {
|
||||
background-color: #dd4b39;
|
||||
}
|
||||
.select2-container--default .select2-results__option[aria-selected=true], .select2-container--default .select2-results__option[aria-selected=true]:hover {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--header);
|
||||
@@ -275,6 +311,9 @@ input[type=text], input[type=search] {
|
||||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||
color: var(--text-main);
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: var(--header);
|
||||
}
|
||||
.select2-selection--single {
|
||||
background-color: var(--back-sub)!important;
|
||||
color: var(--text-main)!important;
|
||||
@@ -296,20 +335,25 @@ input[type=text], input[type=search] {
|
||||
.table-striped>tbody>tr:nth-of-type(odd) {
|
||||
background-color: var(--back-sub);
|
||||
}
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa {
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa, .box-body, .box-footer, .box-header {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
.box-header.with-border {
|
||||
border-bottom: #000;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
|
||||
&:link {
|
||||
color: var(--link);
|
||||
}
|
||||
color: var(--link) }
|
||||
&:hover {
|
||||
color: var(--light-link);
|
||||
color: var(--hover-link);
|
||||
text-decoration: underline;
|
||||
}
|
||||
&:visited {
|
||||
color: var(--link);
|
||||
color: var(--visited-link)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,10 +108,15 @@ a {
|
||||
--background: #222;
|
||||
--back-main: #333;
|
||||
--back-sub: #444;
|
||||
--button-default: darken(@yellow, 15%);
|
||||
--button-primary: darken(@yellow, 25%);
|
||||
--button-hover: darken(@yellow, 30%);
|
||||
--header: @yellow; /* Use same as Header picker */
|
||||
--text-main: #FFF;
|
||||
--text-sub: #BBB;
|
||||
--link: lighten(@yellow, 50%); /* Use same as Header picker */
|
||||
--text-main: #BBB;
|
||||
--text-sub: #9b9b9b;
|
||||
--link: lighten(@yellow, 30%); /* Use same as Header picker, lighten by 70% */
|
||||
--visited-link: lighten(@yellow, 40%); /* Use same as Header picker, lighten by 70% */
|
||||
--hover-link: lighten(@yellow, 45%); /* Use same as Header picker, lighten by 70% */
|
||||
--nav-link: #FFF; /* Use same as Header picker */
|
||||
--light-link: #fff; /* Use same as Header picker */
|
||||
}
|
||||
@@ -123,7 +128,11 @@ a {
|
||||
border-color: var(--header);
|
||||
}
|
||||
|
||||
.navbar-nav>li>a:link {
|
||||
.bootstrap-table .fixed-table-container .table thead th .sortable {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.thead, .navbar-nav>li>a:link {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
@@ -132,15 +141,38 @@ a {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
a, a:link, a:visited, .btn-primary.hover {
|
||||
color: var(--header);
|
||||
a:link {
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--hover-link);
|
||||
}
|
||||
|
||||
.btn-primary.hover {
|
||||
color: var(--nav-link);
|
||||
}
|
||||
|
||||
.small-box h3, .small-box p {
|
||||
color: var(--nav-link) !important;
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: var(--nav-link) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#accessoriesTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
#assetsListingTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
#assetsListingTable>tbody>tr.selected>td {
|
||||
background-color: var(--back-main);
|
||||
}
|
||||
@@ -153,22 +185,28 @@ body {
|
||||
}
|
||||
.box-body, .box-footer, .box-header {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--header);
|
||||
}
|
||||
.btn-default{
|
||||
background-color: var(--back-main);
|
||||
color: var(--header);
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default dropdown-toggle {
|
||||
background-color: var(--button-default);
|
||||
color: var(--link);
|
||||
}
|
||||
|
||||
.btn-default:active, .btn-default:focus, .btn-default:hover, .btn-default.active {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--header);
|
||||
background-color: var(--button-hover);
|
||||
color: var(--link);
|
||||
}
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-blue {
|
||||
.btn-primary, .btn-primary.hover, .btn-primary:active, .text-yellow {
|
||||
color: var(--text-main)!important;
|
||||
}
|
||||
.btn-primary:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--header)!important;
|
||||
background-color: var(--button-primary);
|
||||
color: var(--link)!important;
|
||||
}
|
||||
#componentsTable>tbody>tr>td>nobr>a>i.fa {
|
||||
color: var(--text-main);
|
||||
@@ -195,16 +233,20 @@ body {
|
||||
}
|
||||
.dropdown-menu, .dropdown-menu>li>a {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--text-main);
|
||||
color: var(--text-main) !important;
|
||||
}
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
color: var(--nav-link);
|
||||
}
|
||||
.form-control {
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
|
||||
background-color: var(--back-main);
|
||||
color: var(--text-main);
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6, p {
|
||||
color: var(--text-main);
|
||||
}
|
||||
@@ -258,12 +300,6 @@ input[type=text], input[type=search] {
|
||||
background-color: var(--back-main);
|
||||
color: var(--header);
|
||||
}
|
||||
.popover {
|
||||
background-color:var(--back-main);
|
||||
}
|
||||
.popover-title {
|
||||
background-color: #f39c12;
|
||||
}
|
||||
.select2-container--default .select2-results__option[aria-selected=true], .select2-container--default .select2-results__option[aria-selected=true]:hover {
|
||||
background-color: var(--back-sub);
|
||||
color: var(--header);
|
||||
@@ -275,6 +311,9 @@ input[type=text], input[type=search] {
|
||||
.select2-container--default .select2-selection--single .select2-selection__rendered {
|
||||
color: var(--text-main);
|
||||
}
|
||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||
background-color: var(--header);
|
||||
}
|
||||
.select2-selection--single {
|
||||
background-color: var(--back-sub)!important;
|
||||
color: var(--text-main)!important;
|
||||
@@ -296,20 +335,25 @@ input[type=text], input[type=search] {
|
||||
.table-striped>tbody>tr:nth-of-type(odd) {
|
||||
background-color: var(--back-sub);
|
||||
}
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa {
|
||||
#webui>div>div>div>div>div>table>tbody>tr>td>a>i.fa, .box-body, .box-footer, .box-header {
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
.box-header.with-border {
|
||||
border-bottom: #000;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
|
||||
&:link {
|
||||
color: var(--link);
|
||||
}
|
||||
color: var(--link) }
|
||||
&:hover {
|
||||
color: var(--light-link);
|
||||
color: var(--hover-link);
|
||||
text-decoration: underline;
|
||||
}
|
||||
&:visited {
|
||||
color: var(--link);
|
||||
color: var(--visited-link)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ return array(
|
||||
'ldap_auth_filter_query' => 'استعلام مصادقة لداب',
|
||||
'ldap_version' => 'إصدار لداب',
|
||||
'ldap_active_flag' => 'لداب العلم النشط',
|
||||
'ldap_activated_flag_help' => 'This flag is used to determine whether a user can login to Snipe-IT and does not affect the ability to check items in or out to them.',
|
||||
'ldap_activated_flag_help' => 'يستخدم هذا العلم لتحديد ما إذا كان يمكن للمستخدم تسجيل الدخول إلى Snipe-IT ولا يؤثر على القدرة على التحقق من العناصر في أو خارجها.',
|
||||
'ldap_emp_num' => 'رقم موظف لداب',
|
||||
'ldap_email' => 'بريد لداب',
|
||||
'license' => 'ترخيص البرنامج',
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
'depreciation_report' => 'تقرير الإستهلاك',
|
||||
'details' => 'التفاصيل',
|
||||
'download' => 'تحميل',
|
||||
'download_all' => 'Download All',
|
||||
'download_all' => 'تنزيل الكل',
|
||||
'depreciation' => 'الإستهلاك',
|
||||
'editprofile' => 'تعديل الملف الشخصي',
|
||||
'eol' => 'نهاية العمر',
|
||||
@@ -114,8 +114,8 @@
|
||||
'image_upload' => 'رفع صورة',
|
||||
'image_filetypes_help' => 'أنواع الملفات المقبولة هي jpg و png و gif و svg. الحد الأقصى لحجم التحميل المسموح به هو: الحجم.',
|
||||
'import' => 'استيراد',
|
||||
'importing' => 'Importing',
|
||||
'importing_help' => 'You can import assets, accessories, licenses, components, consumables, and users via CSV file. <br><br>The CSV should be comma-delimited and formatted with headers that match the ones in the <a href="https://snipe-it.readme.io/docs/importing" target="_new">sample CSVs in the documentation</a>.',
|
||||
'importing' => 'الاستيراد',
|
||||
'importing_help' => 'يمكنك استيراد الأصول، الملحقات، التراخيص، المكونات، المواد الاستهلاكية، والمستخدمين عبر ملف CSV. <br><br>يجب أن تكون CSV محددة بفواصل وأن يتم تنسيقها مع رؤوس تطابق تلك الموجودة في <a href="https://snipe-it.readme.io/docs/importing" target="_new">عينة CSVs في الوثائق</a>.',
|
||||
'import-history' => 'استيراد الأرشيف',
|
||||
'asset_maintenance' => 'صيانة الأصول',
|
||||
'asset_maintenance_report' => 'تقرير صيانة الأصول',
|
||||
@@ -239,9 +239,9 @@
|
||||
'login_enabled' => 'تسجيل الدخول مفعل',
|
||||
'audit_due' => 'الواجب مراجعته',
|
||||
'audit_overdue' => 'مراجعة الحسابات المتأخرة',
|
||||
'accept' => 'Accept :asset',
|
||||
'i_accept' => 'I accept',
|
||||
'i_decline' => 'I decline',
|
||||
'sign_tos' => 'Sign below to indicate that you agree to the terms of service:',
|
||||
'clear_signature' => 'Clear Signature'
|
||||
'accept' => 'قبول :asset',
|
||||
'i_accept' => 'قبول',
|
||||
'i_decline' => 'أنا أرفض',
|
||||
'sign_tos' => 'قم بتسجيل الدخول أدناه للإشارة إلى أنك توافق على شروط الخدمة:',
|
||||
'clear_signature' => 'مسح التوقيع'
|
||||
];
|
||||
|
||||
@@ -73,7 +73,7 @@ return array(
|
||||
'Asset_Checkin_Notification' => 'Asset checked in',
|
||||
'License_Checkin_Notification' => 'License checked in',
|
||||
'Expected_Checkin_Report' => 'Expected asset checkin report',
|
||||
'Expected_Checkin_Notification' => 'Reminder: :name checkin deadline approaching',
|
||||
'Expected_Checkin_Date' => 'An asset checked out to you is due to be checked back in on :date',
|
||||
'your_assets' => 'View Your Assets'
|
||||
'Expected_Checkin_Notification' => 'تذكير: تاريخ تحقق :name يقترب من الموعد النهائي',
|
||||
'Expected_Checkin_Date' => 'من المقرر أن يتم التحقق من الأصول التي تم إخراجها إليك في :date',
|
||||
'your_assets' => 'عرض الأصول الخاصة بك'
|
||||
);
|
||||
|
||||
@@ -15,7 +15,7 @@ return array(
|
||||
'address' => 'Adresse',
|
||||
'zip' => 'Postleitzahl',
|
||||
'locations' => 'Standorte',
|
||||
'parent' => 'Hauptkategorie',
|
||||
'parent' => 'Übergeordneter Standort',
|
||||
'currency' => 'Landeswährung',
|
||||
'ldap_ou' => 'LDAP OU Suche',
|
||||
);
|
||||
|
||||
@@ -83,7 +83,7 @@ return array(
|
||||
'ldap_auth_filter_query' => 'LDAP Authentifikationsabfrage',
|
||||
'ldap_version' => 'LDAP Version',
|
||||
'ldap_active_flag' => 'LDAP Aktiv-Markierung',
|
||||
'ldap_activated_flag_help' => 'This flag is used to determine whether a user can login to Snipe-IT and does not affect the ability to check items in or out to them.',
|
||||
'ldap_activated_flag_help' => 'Diese Einstellung steuert, ob sich ein Benutzer bei Snipe-IT anmelden kann und hat keinen Einfluss auf die Möglichkeit, Elemente auszugeben oder zurück zu nehmen.',
|
||||
'ldap_emp_num' => 'LDAP Mitarbeiternummer',
|
||||
'ldap_email' => 'LDAP E-Mail',
|
||||
'license' => 'Softwarelizenz',
|
||||
|
||||
@@ -10,10 +10,10 @@ return array(
|
||||
'deployable' => 'Einsetzbar',
|
||||
'info' => 'Status Label werden eingesetzt um diverse Stati Ihrer Assets zu beschreiben. Diese können zB. in Reparatur sein, Gestohlen oder Verlohren worden sein. Sie können neue Status Labels für Einsetzbare, Unerledigte und Archivierte Assets erstellen.',
|
||||
'name' => 'Statusname',
|
||||
'pending' => 'Unerledigt',
|
||||
'pending' => 'Ausstehend',
|
||||
'status_type' => 'Statustyp',
|
||||
'show_in_nav' => 'Im seitlichen Navigationsbereich zeigen',
|
||||
'title' => 'Statusbezeichnungen',
|
||||
'undeployable' => 'nicht Einsetzbar',
|
||||
'undeployable' => 'Nicht einsetzbar',
|
||||
'update' => 'Statusbezeichnung bearbeiten',
|
||||
);
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
'depreciation_report' => 'Abschreibungsbericht',
|
||||
'details' => 'Details',
|
||||
'download' => 'Download',
|
||||
'download_all' => 'Download All',
|
||||
'download_all' => 'Alle herunterladen',
|
||||
'depreciation' => 'Abschreibung',
|
||||
'editprofile' => 'Profil bearbeiten',
|
||||
'eol' => 'EOL',
|
||||
@@ -114,8 +114,8 @@
|
||||
'image_upload' => 'Bild hinzufügen',
|
||||
'image_filetypes_help' => 'Erlaubte Dateitypen sind jpg, png, gif und svg. Die maximal erlaubte Upload-Größe beträgt :size.',
|
||||
'import' => 'Import',
|
||||
'importing' => 'Importing',
|
||||
'importing_help' => 'You can import assets, accessories, licenses, components, consumables, and users via CSV file. <br><br>The CSV should be comma-delimited and formatted with headers that match the ones in the <a href="https://snipe-it.readme.io/docs/importing" target="_new">sample CSVs in the documentation</a>.',
|
||||
'importing' => 'Importiere',
|
||||
'importing_help' => 'Sie können Assets, Zubehör, Lizenzen, Komponenten, Verbrauchsmaterialien und Benutzer mittels CSV-Datei importieren. <br><br>Die CSV-Datei sollte kommagetrennt sein und eine Kopfzeile enthalten, die mit den <a href="https://snipe-it.readme.io/docs/importing" target="_new">Beispiel-CSVs aus der Dokumentation</a> übereinstimmen.',
|
||||
'import-history' => 'Import Verlauf',
|
||||
'asset_maintenance' => 'Asset Wartung',
|
||||
'asset_maintenance_report' => 'Asset Wartungsbericht',
|
||||
@@ -220,7 +220,7 @@
|
||||
'unknown_admin' => 'Unbekannter Administrator',
|
||||
'username_format' => 'Format der Benutzernamen',
|
||||
'update' => 'Aktualisieren',
|
||||
'upload_filetypes_help' => 'Erlaubte Dateitypen sind png, gif, jpg, jpeg, doc, docx, pdf, xls, xlsx, txt, lic, xml, zip, rtf und rar. Maximale Uploadgröße beträgt:size.',
|
||||
'upload_filetypes_help' => 'Erlaubte Dateitypen sind png, gif, jpg, jpeg, doc, docx, pdf, xls, xlsx, txt, lic, xml, zip, rtf und rar. Maximale Uploadgröße beträgt :size.',
|
||||
'uploaded' => 'Hochgeladen',
|
||||
'user' => 'Benutzer',
|
||||
'accepted' => 'angenommen',
|
||||
|
||||
@@ -29,7 +29,7 @@ return array(
|
||||
'days' => 'Tage',
|
||||
'expecting_checkin_date' => 'Erwartetes Rückgabedatum:',
|
||||
'expires' => 'Ablaufdatum',
|
||||
'Expiring_Assets_Report' => 'Bericht über Ablaufende Gegenstände.',
|
||||
'Expiring_Assets_Report' => 'Bericht über ablaufende Gegenstände.',
|
||||
'Expiring_Licenses_Report' => 'Bericht über ablaufende Lizenzen.',
|
||||
'hello' => 'Hallo',
|
||||
'hi' => 'Hallo',
|
||||
@@ -72,8 +72,8 @@ return array(
|
||||
'Accessory_Checkin_Notification' => 'Zubehör zurückgenommen',
|
||||
'Asset_Checkin_Notification' => 'Asset zurückgenommen',
|
||||
'License_Checkin_Notification' => 'Lizenz zurückgenommen',
|
||||
'Expected_Checkin_Report' => 'Expected asset checkin report',
|
||||
'Expected_Checkin_Notification' => 'Reminder: :name checkin deadline approaching',
|
||||
'Expected_Checkin_Report' => 'Bericht über erwartete Asset Rückgaben',
|
||||
'Expected_Checkin_Notification' => 'Erinnerung: :name Rückgabedatum nähert sich',
|
||||
'Expected_Checkin_Date' => 'Ihr ausgebuchtes Asset ist fällig zur Rückgabe am :date',
|
||||
'your_assets' => 'Ihre Assets anzeigen'
|
||||
);
|
||||
|
||||
@@ -57,12 +57,12 @@ return array(
|
||||
'array' => 'Das: -Attribut darf nicht mehr als: maximale Elemente haben.',
|
||||
],
|
||||
'mimes' => ':attribute muss eine Datei des Typs :values sein.',
|
||||
'mimetypes' => 'Das Attribut muss eine Datei vom Typ:: Werte sein.',
|
||||
'mimetypes' => ':attribute muss eine Datei vom Typ: :values sein.',
|
||||
'min' => [
|
||||
'numeric' => ':attribute muss kleiner als :min sein.',
|
||||
'file' => ':attribute muss mindestens :min Kilobyte groß sein.',
|
||||
'string' => ':attribute benötigt mindestens :min Zeichen.',
|
||||
'array' => 'Das Attribut: muss mindestens enthalten: Min. Elemente.',
|
||||
'array' => ':attribute muss mindestens :min Elemente enthalten.',
|
||||
],
|
||||
'not_in' => 'Auswahl :attribute ist ungültig.',
|
||||
'numeric' => ':attribute muss eine Zahl sein.',
|
||||
@@ -71,7 +71,7 @@ return array(
|
||||
'regex' => ':attribute Format ungültig.',
|
||||
'required' => ':attribute Feld muss ausgefüllt sein.',
|
||||
'required_if' => ':attribute wird benötigt wenn :other :value entspricht.',
|
||||
'required_unless' => 'Das: Attributfeld ist erforderlich, es sei denn: other ist in: values.',
|
||||
'required_unless' => 'Das :attribute Feld ist erforderlich, es sei denn :other ist in :values.',
|
||||
'required_with' => ':attribute wird benötigt wenn :value ausgewählt ist.',
|
||||
'required_with_all' => 'Das: Attributfeld ist erforderlich, wenn: Werte vorhanden sind.',
|
||||
'required_without' => ':attribute wird benötigt wenn :value nicht ausgewählt ist.',
|
||||
|
||||
@@ -8,6 +8,9 @@ return [
|
||||
'login' => 'Login',
|
||||
'login_prompt' => 'Please Login',
|
||||
'forgot_password' => 'I forgot my password',
|
||||
'ldap_reset_password' => 'Please click here to reset your LDAP password',
|
||||
'remember_me' => 'Remember Me',
|
||||
'username_help_top' => 'Enter your <strong>username</strong> to be emailed a password reset link.',
|
||||
'username_help_bottom' => 'Your username and email address <em>may</em> be the same, but may not be, depending on your configuration. If you cannot remember your username, contact your administrator. <br><br><strong>Usernames without an associated email address will not be emailed a password reset link.</strong> ',
|
||||
];
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
'image' => 'Image',
|
||||
'image_delete' => 'Delete Image',
|
||||
'image_upload' => 'Upload Image',
|
||||
'image_filetypes_help' => 'Accepted filetypes are jpg, png, gif, and svg. Max upload size allowed is :size.',
|
||||
'image_filetypes_help' => 'Accepted filetypes are jpg, webp, png, gif, and svg. Max upload size allowed is :size.',
|
||||
'import' => 'Import',
|
||||
'importing' => 'Importing',
|
||||
'importing_help' => 'You can import assets, accessories, licenses, components, consumables, and users via CSV file. <br><br>The CSV should be comma-delimited and formatted with headers that match the ones in the <a href="https://snipe-it.readme.io/docs/importing" target="_new">sample CSVs in the documentation</a>.',
|
||||
@@ -243,5 +243,7 @@
|
||||
'i_accept' => 'I accept',
|
||||
'i_decline' => 'I decline',
|
||||
'sign_tos' => 'Sign below to indicate that you agree to the terms of service:',
|
||||
'clear_signature' => 'Clear Signature'
|
||||
'clear_signature' => 'Clear Signature',
|
||||
'show_help' => 'Show help',
|
||||
'hide_help' => 'Hide help',
|
||||
];
|
||||
|
||||
@@ -9,7 +9,7 @@ return array(
|
||||
'asset' => 'Asset:',
|
||||
'asset_name' => 'Asset Name:',
|
||||
'asset_requested' => 'Asset requested',
|
||||
'asset_tag' => 'Asset Tag:',
|
||||
'asset_tag' => 'Asset Tag',
|
||||
'assigned_to' => 'Assigned To',
|
||||
'best_regards' => 'Best regards,',
|
||||
'canceled' => 'Canceled:',
|
||||
|
||||
@@ -89,6 +89,7 @@ return array(
|
||||
'uploaded' => 'The :attribute failed to upload.',
|
||||
'url' => 'The :attribute format is invalid.',
|
||||
"unique_undeleted" => "The :attribute must be unique.",
|
||||
"non_circular" => "The :attribute must not create a circular reference.",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user