Compare commits
109 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5979a18852 | |||
| 5efb803b60 | |||
| fd4a8edae9 | |||
| e9fdf06bf6 | |||
| 0a5b72e71e | |||
| 51168e8e10 | |||
| cefdca3d22 | |||
| cc5eee1890 | |||
| d3864db5e1 | |||
| ece8ae3adc | |||
| e25829c759 | |||
| 92afd5f232 | |||
| b934d2e504 | |||
| 8cf70e7e20 | |||
| cdfd720c65 | |||
| c0f791cf13 | |||
| 290cf79778 | |||
| 8af1481749 | |||
| d8f404096c | |||
| ea2f7617df | |||
| b6c258bb12 | |||
| 804b49cefb | |||
| 305b0d8edb | |||
| 05996019e5 | |||
| 31a967e072 | |||
| 0b56ebf291 | |||
| fcc87b3219 | |||
| 82fca0c72d | |||
| 51661b0a21 | |||
| e8670fe591 | |||
| bee1dfc4a6 | |||
| 83c8449aca | |||
| 9dba1bb3e5 | |||
| 76e3398d44 | |||
| a7e12931fa | |||
| ba04c64567 | |||
| 8c8352ecc6 | |||
| 64b670033d | |||
| b9d102a5fb | |||
| 77076e02e8 | |||
| c6a761a5ad | |||
| 6f3a90c48b | |||
| 8f160a8590 | |||
| 2278d5bfd8 | |||
| 66ac147c9e | |||
| 05e0d15ae4 | |||
| 8562f018ed | |||
| 0cbdcce3ea | |||
| 980be65193 | |||
| 3aaaea37e4 | |||
| 964c594c4c | |||
| 9430c4bf43 | |||
| 538757317b | |||
| fe986f7c51 | |||
| 09105871d9 | |||
| e84a6059f4 | |||
| 09f20873df | |||
| 2adc1e8ba9 | |||
| 4a6c18532b | |||
| 921f882680 | |||
| f79e5add58 | |||
| d98d06377e | |||
| 22fdd05314 | |||
| 8c15a4e0c6 | |||
| 9250b45e6e | |||
| 3a1de3d2a5 | |||
| b59dd11304 | |||
| b6222abb7c | |||
| dcf8e4f5ef | |||
| f195073ac3 | |||
| 452a9d6725 | |||
| 1d74ddc547 | |||
| 932b589a14 | |||
| 671e514785 | |||
| 1e2ebdb69c | |||
| 148751d927 | |||
| efecdfaea0 | |||
| ab9c84a6b6 | |||
| 8711bc0dbd | |||
| 0adebd1ec8 | |||
| 43c1e893c0 | |||
| 7ce63e653b | |||
| e5129a8b98 | |||
| a922c1a298 | |||
| f4aa812d96 | |||
| 0c9e41e1fa | |||
| 1d6320a88f | |||
| 4696e799ed | |||
| 2e08a91c53 | |||
| 4fd35573ad | |||
| caf2cdbf6f | |||
| c0293a7c1c | |||
| 17405f5de1 | |||
| bfefa10462 | |||
| 55a140045b | |||
| 897bd2c56e | |||
| 7321c5937f | |||
| 98700cab8b | |||
| 3d07635820 | |||
| 59b18a6ada | |||
| ce525c1985 | |||
| a0d163a3c4 | |||
| faab971931 | |||
| 38eb16dfea | |||
| 4494456cad | |||
| 876dde1280 | |||
| 17ee904828 | |||
| 4f1b58cd35 | |||
| edcd3afc3e |
@@ -809,6 +809,26 @@
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "TheVakman",
|
||||
"name": "Lawrence",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/18545156?v=4",
|
||||
"profile": "https://github.com/TheVakman",
|
||||
"contributions": [
|
||||
"test",
|
||||
"bug"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "uknzaeinozpas",
|
||||
"name": "uknzaeinozpas",
|
||||
"avatar_url": "https://avatars1.githubusercontent.com/u/22473767?v=4",
|
||||
"profile": "https://github.com/uknzaeinozpas",
|
||||
"contributions": [
|
||||
"test",
|
||||
"code"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[](https://travis-ci.org/snipe/snipe-it) [](http://waffle.io/snipe/snipe-it) []() [](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/snipeyhead) [](https://zenhub.io) [](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
|
||||
@@ -68,7 +68,7 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken
|
||||
| [<img src="https://avatars2.githubusercontent.com/u/857740?v=3" width="110px;"/><br /><sub>Gil Rutkowski</sub>](http://FlashingCursor.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=flashingcursor "Code") | [<img src="https://avatars3.githubusercontent.com/u/129360?v=3" width="110px;"/><br /><sub>Desmond Morris</sub>](http://www.desmondmorris.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=desmondmorris "Code") | [<img src="https://avatars2.githubusercontent.com/u/52936?v=3" width="110px;"/><br /><sub>Nick Peelman</sub>](http://peelman.us)<br />[💻](https://github.com/snipe/snipe-it/commits?author=peelman "Code") | [<img src="https://avatars0.githubusercontent.com/u/53161?v=3" width="110px;"/><br /><sub>Abraham Vegh</sub>](https://abrahamvegh.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=abrahamvegh "Code") | [<img src="https://avatars0.githubusercontent.com/u/2818680?v=3" width="110px;"/><br /><sub>Mohamed Rashid</sub>](https://github.com/rashivkp)<br />[📖](https://github.com/snipe/snipe-it/commits?author=rashivkp "Documentation") | [<img src="https://avatars3.githubusercontent.com/u/1509456?v=3" width="110px;"/><br /><sub>Kasey</sub>](http://hinchk.github.io)<br />[💻](https://github.com/snipe/snipe-it/commits?author=HinchK "Code") | [<img src="https://avatars2.githubusercontent.com/u/10522541?v=3" width="110px;"/><br /><sub>Brett</sub>](https://github.com/BrettFagerlund)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=BrettFagerlund "Tests") |
|
||||
| [<img src="https://avatars2.githubusercontent.com/u/16108587?v=3" width="110px;"/><br /><sub>Jason Spriggs</sub>](http://jasonspriggs.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=jasonspriggs "Code") | [<img src="https://avatars2.githubusercontent.com/u/1134568?v=3" width="110px;"/><br /><sub>Nate Felton</sub>](http://n8felton.wordpress.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=n8felton "Code") | [<img src="https://avatars2.githubusercontent.com/u/14036694?v=3" width="110px;"/><br /><sub>Manasses Ferreira</sub>](http://homepages.dcc.ufmg.br/~manassesferreira)<br />[💻](https://github.com/snipe/snipe-it/commits?author=manassesferreira "Code") | [<img src="https://avatars0.githubusercontent.com/u/15913949?v=3" width="110px;"/><br /><sub>Steve</sub>](https://github.com/steveelwood)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=steveelwood "Tests") | [<img src="https://avatars1.githubusercontent.com/u/3361683?v=3" width="110px;"/><br /><sub>matc</sub>](http://twitter.com/matc)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=matc "Tests") | [<img src="https://avatars3.githubusercontent.com/u/7405702?v=3" width="110px;"/><br /><sub>Cole R. Davis</sub>](http://www.davisracingteam.com)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=VanillaNinjaD "Tests") | [<img src="https://avatars2.githubusercontent.com/u/10167681?v=3" width="110px;"/><br /><sub>gibsonjoshua55</sub>](https://github.com/gibsonjoshua55)<br />[💻](https://github.com/snipe/snipe-it/commits?author=gibsonjoshua55 "Code") |
|
||||
| [<img src="https://avatars2.githubusercontent.com/u/2809241?v=4" width="110px;"/><br /><sub>Robin Temme</sub>](https://github.com/zwerch)<br />[💻](https://github.com/snipe/snipe-it/commits?author=zwerch "Code") | [<img src="https://avatars0.githubusercontent.com/u/6961695?v=4" width="110px;"/><br /><sub>Iman</sub>](https://github.com/imanghafoori1)<br />[💻](https://github.com/snipe/snipe-it/commits?author=imanghafoori1 "Code") | [<img src="https://avatars1.githubusercontent.com/u/6551003?v=4" width="110px;"/><br /><sub>Richard Hofman</sub>](https://github.com/richardhofman6)<br />[💻](https://github.com/snipe/snipe-it/commits?author=richardhofman6 "Code") | [<img src="https://avatars0.githubusercontent.com/u/3697569?v=4" width="110px;"/><br /><sub>gizzmojr</sub>](https://github.com/gizzmojr)<br />[💻](https://github.com/snipe/snipe-it/commits?author=gizzmojr "Code") | [<img src="https://avatars3.githubusercontent.com/u/404729?v=4" width="110px;"/><br /><sub>Jenny Li</sub>](https://github.com/imjennyli)<br />[📖](https://github.com/snipe/snipe-it/commits?author=imjennyli "Documentation") | [<img src="https://avatars0.githubusercontent.com/u/869227?v=4" width="110px;"/><br /><sub>Geoff Young</sub>](https://github.com/GeoffYoung)<br />[💻](https://github.com/snipe/snipe-it/commits?author=GeoffYoung "Code") | [<img src="https://avatars3.githubusercontent.com/u/1068477?v=4" width="110px;"/><br /><sub>Elliot Blackburn</sub>](http://www.elliotblackburn.com)<br />[📖](https://github.com/snipe/snipe-it/commits?author=BlueHatbRit "Documentation") |
|
||||
| [<img src="https://avatars1.githubusercontent.com/u/6357451?v=4" width="110px;"/><br /><sub>Tõnis Ormisson</sub>](http://andmemasin.eu)<br />[💻](https://github.com/snipe/snipe-it/commits?author=TonisOrmisson "Code") | [<img src="https://avatars0.githubusercontent.com/u/449411?v=4" width="110px;"/><br /><sub>Nicolai Essig</sub>](http://www.nicolai-essig.de)<br />[💻](https://github.com/snipe/snipe-it/commits?author=thakilla "Code") | [<img src="https://avatars1.githubusercontent.com/u/14809698?v=4" width="110px;"/><br /><sub>Danielle</sub>](https://github.com/techincolor)<br />[📖](https://github.com/snipe/snipe-it/commits?author=techincolor "Documentation") |
|
||||
| [<img src="https://avatars1.githubusercontent.com/u/6357451?v=4" width="110px;"/><br /><sub>Tõnis Ormisson</sub>](http://andmemasin.eu)<br />[💻](https://github.com/snipe/snipe-it/commits?author=TonisOrmisson "Code") | [<img src="https://avatars0.githubusercontent.com/u/449411?v=4" width="110px;"/><br /><sub>Nicolai Essig</sub>](http://www.nicolai-essig.de)<br />[💻](https://github.com/snipe/snipe-it/commits?author=thakilla "Code") | [<img src="https://avatars1.githubusercontent.com/u/14809698?v=4" width="110px;"/><br /><sub>Danielle</sub>](https://github.com/techincolor)<br />[📖](https://github.com/snipe/snipe-it/commits?author=techincolor "Documentation") | [<img src="https://avatars1.githubusercontent.com/u/18545156?v=4" width="110px;"/><br /><sub>Lawrence</sub>](https://github.com/TheVakman)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=TheVakman "Tests") [🐛](https://github.com/snipe/snipe-it/issues?q=author%3ATheVakman "Bug reports") | [<img src="https://avatars1.githubusercontent.com/u/22473767?v=4" width="110px;"/><br /><sub>uknzaeinozpas</sub>](https://github.com/uknzaeinozpas)<br />[⚠️](https://github.com/snipe/snipe-it/commits?author=uknzaeinozpas "Tests") [💻](https://github.com/snipe/snipe-it/commits?author=uknzaeinozpas "Code") |
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use App\Models\Asset;
|
||||
use App\Models\Setting;
|
||||
use DB;
|
||||
use Artisan;
|
||||
|
||||
class RegenerateAssetTags extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'snipeit:regenerate-tags {--start=} {--output= : info|warn|error|all} ';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'This utility will regenerate all asset tags. THIS IS DATA-DESTRUCTIVE AND SHOULD BE USED WITH CAUTION. ';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
|
||||
if ($this->confirm('This will regenerate all of the asset tags within your system. This action is data-destructive and should be used with caution. Do you wish to continue?'))
|
||||
{
|
||||
|
||||
$output['info'] = [];
|
||||
$output['warn'] = [];
|
||||
$output['error'] = [];
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
$start_tag = ($this->option('start')) ? $this->option('start') : (($settings->next_auto_tag_base) ? Setting::getSettings()->next_auto_tag_base : 1) ;
|
||||
|
||||
$this->info('Starting at '.$start_tag);
|
||||
|
||||
$total_assets = Asset::orderBy('id','asc')->get();
|
||||
$bar = $this->output->createProgressBar(count($total_assets));
|
||||
|
||||
try {
|
||||
Artisan::call('backup:run');
|
||||
} catch (\Exception $e) {
|
||||
$output['error'][] = $e;
|
||||
}
|
||||
|
||||
foreach ($total_assets as $asset) {
|
||||
|
||||
$start_tag++;
|
||||
$output['info'][] = 'Asset tag:'.$asset->asset_tag;
|
||||
$asset->asset_tag = $settings->auto_increment_prefix.$settings->auto_increment_prefix.$start_tag;
|
||||
|
||||
if ($settings->zerofill_count > 0) {
|
||||
$asset->asset_tag = $settings->auto_increment_prefix.Asset::zerofill($start_tag, $settings->zerofill_count);
|
||||
}
|
||||
|
||||
$output['info'][] = 'New Asset tag:'.$asset->asset_tag;
|
||||
|
||||
// Use forceSave here to override model level validation
|
||||
$asset->forceSave();
|
||||
}
|
||||
|
||||
$bar->finish();
|
||||
$this->info("\n");
|
||||
|
||||
|
||||
if (($this->option('output')=='all') || ($this->option('output')=='info')) {
|
||||
foreach ($output['info'] as $key => $output_text) {
|
||||
$this->info($output_text);
|
||||
}
|
||||
}
|
||||
if (($this->option('output')=='all') || ($this->option('output')=='warn')) {
|
||||
foreach ($output['warn'] as $key => $output_text) {
|
||||
$this->warn($output_text);
|
||||
}
|
||||
}
|
||||
if (($this->option('output')=='all') || ($this->option('output')=='error')) {
|
||||
foreach ($output['error'] as $key => $output_text) {
|
||||
$this->error($output_text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class Version extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'version:update {--branch=master} {--type=patch}';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Command description';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
|
||||
$use_branch = $this->option('branch');
|
||||
$use_type = $this->option('type');
|
||||
$git_branch = trim(shell_exec('git rev-parse --abbrev-ref HEAD'));
|
||||
$build_version = trim(shell_exec('git rev-list --count '.$use_branch));
|
||||
$versionFile = 'config/version.php';
|
||||
$full_hash_version = str_replace("\n", '', shell_exec('git describe master --tags'));
|
||||
|
||||
$version = explode('-', $full_hash_version);
|
||||
$app_version = $current_app_version = $version[0];
|
||||
$hash_version = $version[2];
|
||||
$prerelease_version = '';
|
||||
|
||||
$this->line('Branch is: '.$use_branch);
|
||||
$this->line('Type is: '.$use_type);
|
||||
$this->line('Current version is: '.$full_hash_version);
|
||||
|
||||
if (count($version)==3) {
|
||||
$this->line('This does not look like an alpha/beta release.');
|
||||
} else {
|
||||
print_r($version);
|
||||
if (array_key_exists('3',$version)) {
|
||||
$this->line('The current version looks like a beta release.');
|
||||
$prerelease_version = $version[1];
|
||||
$hash_version = $version[3];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$app_version_raw = explode('.', $app_version);
|
||||
|
||||
$maj = str_replace('v', '', $app_version_raw[0]);
|
||||
$min = $app_version_raw[1];
|
||||
$patch = '';
|
||||
|
||||
|
||||
|
||||
// This is a major release that might not have a third .0
|
||||
if (array_key_exists(2, $app_version_raw)) {
|
||||
$patch = $app_version_raw[2];
|
||||
}
|
||||
|
||||
if ($use_type=='major') {
|
||||
$app_version = "v".($maj + 1).".$min.$patch";
|
||||
} elseif ($use_type=='minor') {
|
||||
$app_version = "v"."$maj.".($min + 1).".$patch";
|
||||
} elseif ($use_type=='pre') {
|
||||
$pre_raw = str_replace('beta','', $prerelease_version);
|
||||
$pre_raw = str_replace('alpha','', $pre_raw);
|
||||
$pre_raw = str_ireplace('rc','', $pre_raw);
|
||||
$pre_raw = $pre_raw++;
|
||||
$this->line('Setting the pre-release to '. $prerelease_version.'-'.$pre_raw);
|
||||
$app_version = "v"."$maj.".($min + 1).".$patch";
|
||||
} elseif ($use_type=='patch') {
|
||||
$app_version = "v" . "$maj.$min." . ($patch + 1);
|
||||
// If nothing is passed, leave the version as it is, just increment the build
|
||||
} else {
|
||||
$app_version = "v" . "$maj.$min." . $patch;
|
||||
}
|
||||
|
||||
// Determine if this tag already exists, or if this prior to a release
|
||||
$this->line('Running: git rev-parse master '.$current_app_version);
|
||||
// $pre_release = trim(shell_exec('git rev-parse '.$use_branch.' '.$current_app_version.' 2>&1 1> /dev/null'));
|
||||
|
||||
if ($use_branch=='develop') {
|
||||
$app_version = $app_version.'-pre';
|
||||
}
|
||||
|
||||
$full_app_version = $app_version.' - build '.$build_version.'-'.$hash_version;
|
||||
|
||||
|
||||
$array = var_export(
|
||||
array(
|
||||
'app_version' => $app_version,
|
||||
'full_app_version' => $full_app_version,
|
||||
'build_version' => $build_version,
|
||||
'prerelease_version' => $prerelease_version,
|
||||
'hash_version' => $hash_version,
|
||||
'full_hash' => $full_hash_version,
|
||||
'branch' => $git_branch),
|
||||
true
|
||||
);
|
||||
|
||||
|
||||
|
||||
// Construct our file content
|
||||
$content = <<<CON
|
||||
<?php
|
||||
return $array;
|
||||
CON;
|
||||
|
||||
// And finally write the file and output the current version
|
||||
\File::put($versionFile, $content);
|
||||
$this->info('Setting NEW version: '. $full_app_version.' ('.$git_branch.')');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class Versioning extends Command
|
||||
{
|
||||
|
||||
/**
|
||||
* The console command name.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'versioning:update';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Generate and update app\'s version via git.';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function fire()
|
||||
{
|
||||
|
||||
$versionFile = 'config/version.php';
|
||||
$hash_version = str_replace("\n", '', shell_exec('git describe --tags'));
|
||||
|
||||
$version = explode('-', $hash_version);
|
||||
|
||||
$array = var_export(
|
||||
array(
|
||||
'app_version' => $version[0],
|
||||
'build_version' => $version[1],
|
||||
'hash_version' => $version[2],
|
||||
'full_hash' => $hash_version),
|
||||
true
|
||||
);
|
||||
|
||||
|
||||
// Construct our file content
|
||||
$content = <<<CON
|
||||
<?php
|
||||
return $array;
|
||||
CON;
|
||||
|
||||
// And finally write the file and output the current version
|
||||
\File::put($versionFile, $content);
|
||||
$this->line('Setting version: '. config('version.app_version').' build '.config('version.build_version').' ('.config('version.hash_version').')');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the console command arguments.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getArguments()
|
||||
{
|
||||
return array(
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the console command options.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getOptions()
|
||||
{
|
||||
return array(
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ class Kernel extends ConsoleKernel
|
||||
Commands\SendInventoryAlerts::class,
|
||||
Commands\SendExpectedCheckinAlerts::class,
|
||||
Commands\ObjectImportCommand::class,
|
||||
Commands\Versioning::class,
|
||||
Commands\Version::class,
|
||||
Commands\SystemBackup::class,
|
||||
Commands\DisableLDAP::class,
|
||||
Commands\Purge::class,
|
||||
@@ -28,6 +28,7 @@ class Kernel extends ConsoleKernel
|
||||
Commands\RecryptFromMcrypt::class,
|
||||
Commands\ResetDemoSettings::class,
|
||||
Commands\SyncAssetLocations::class,
|
||||
Commands\RegenerateAssetTags::class,
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -127,7 +127,13 @@ class Helper
|
||||
$floatString = str_replace(",", "", $floatString);
|
||||
$floatString = str_replace($LocaleInfo["decimal_point"], ".", $floatString);
|
||||
// Strip Currency symbol
|
||||
$floatString = str_replace($LocaleInfo['currency_symbol'], '', $floatString);
|
||||
// If no currency symbol is set, default to $ because Murica
|
||||
$currencySymbol = $LocaleInfo['currency_symbol'];
|
||||
if (empty($currencySymbol)) {
|
||||
$currencySymbol = '$';
|
||||
}
|
||||
|
||||
$floatString = str_replace($currencySymbol, '', $floatString);
|
||||
return floatval($floatString);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\AssetRequest;
|
||||
use App\Http\Requests\AssetCheckoutRequest;
|
||||
use App\Http\Transformers\AssetsTransformer;
|
||||
use App\Models\Asset;
|
||||
use App\Models\AssetModel;
|
||||
@@ -281,27 +282,34 @@ class AssetsController extends Controller
|
||||
'assets.name',
|
||||
'assets.asset_tag',
|
||||
'assets.model_id',
|
||||
'assets.assigned_to',
|
||||
'assets.assigned_type',
|
||||
'assets.status_id'
|
||||
])->with('model', 'assetstatus')->NotArchived());
|
||||
])->with('model', 'assetstatus', 'assignedTo')->NotArchived());
|
||||
|
||||
|
||||
if ($request->has('search')) {
|
||||
$assets = $assets->where('assets.name', 'LIKE', '%'.$request->get('search').'%')
|
||||
->orWhere('assets.asset_tag', 'LIKE', '%'.$request->get('search').'%')
|
||||
->join('models AS assets_models',function ($join) use ($request) {
|
||||
$join->on('assets_models.id', "=", "assets.model_id");
|
||||
})->orWhere('assets_models.name','LIKE','%'.$request->get('search').'%');
|
||||
$assets = $assets->AssignedSearch($request->input('search'));
|
||||
}
|
||||
|
||||
|
||||
$assets = $assets->paginate(50);
|
||||
|
||||
// Loop through and set some custom properties for the transformer to use.
|
||||
// This lets us have more flexibility in special cases like assets, where
|
||||
// they may not have a ->name value but we want to display something anyway
|
||||
foreach ($assets as $asset) {
|
||||
|
||||
|
||||
$asset->use_text = $asset->present()->fullName;
|
||||
|
||||
if (($asset->checkedOutToUser()) && ($asset->assigned)) {
|
||||
$asset->use_text .= ' → '.$asset->assigned->getFullNameAttribute();
|
||||
}
|
||||
|
||||
|
||||
if ($asset->assetstatus->getStatuslabelType()=='pending') {
|
||||
$asset->use_text = $asset->present()->fullName.' ('.$asset->assetstatus->getStatuslabelType().')';
|
||||
$asset->use_text .= '('.$asset->assetstatus->getStatuslabelType().')';
|
||||
}
|
||||
|
||||
$asset->use_image = ($asset->getImageUrl()) ? $asset->getImageUrl() : null;
|
||||
@@ -499,7 +507,7 @@ class AssetsController extends Controller
|
||||
* @since [v4.0]
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function checkout(Request $request, $asset_id)
|
||||
public function checkout(AssetCheckoutRequest $request, $asset_id)
|
||||
{
|
||||
$this->authorize('checkout', Asset::class);
|
||||
$asset = Asset::findOrFail($asset_id);
|
||||
@@ -515,27 +523,37 @@ class AssetsController extends Controller
|
||||
'id' => $asset->id,
|
||||
'asset_tag' => $asset->asset_tag,
|
||||
];
|
||||
if ($request->has('user_id')) {
|
||||
$target = User::find($request->input('user_id'));
|
||||
$location = $target->location_id;
|
||||
$error_payload['target_id'] = $request->input('user_id');
|
||||
$error_payload['target_type'] = User::class;
|
||||
// Don't let the user check an asset out to itself
|
||||
} elseif ($request->has('asset_id')) {
|
||||
$target = Asset::where('id','!=',$asset_id)->find($request->input('asset_id'));
|
||||
$location = $target->location_id;
|
||||
$error_payload['target_id'] = $request->input('asset_id');
|
||||
$error_payload['target_type'] = Asset::class;
|
||||
} elseif ($request->has('location_id')) {
|
||||
$target = Location::find($request->input('location_id'));
|
||||
$location = $target->id;
|
||||
$target = Location::find($request->input('location_id'));
|
||||
$error_payload['target_id'] = $request->input('location_id');
|
||||
$error_payload['target_type'] = Location::class;
|
||||
|
||||
|
||||
// This item is checked out to a location
|
||||
if (request('checkout_to_type')=='location') {
|
||||
$target = Location::find(request('assigned_location'));
|
||||
$asset->location_id = ($target) ? $target->id : '';
|
||||
$error_payload['target_id'] = $request->input('assigned_location');
|
||||
$error_payload['target_type'] = 'location';
|
||||
|
||||
} elseif (request('checkout_to_type')=='asset') {
|
||||
$target = Asset::where('id','!=',$assetId)->find(request('assigned_asset'));
|
||||
$asset->location_id = $target->rtd_location_id;
|
||||
// Override with the asset's location_id if it has one
|
||||
if ($target->location_id!='') {
|
||||
$asset->location_id = ($target) ? $target->location_id : '';
|
||||
}
|
||||
$error_payload['target_id'] = $request->input('assigned_asset');
|
||||
$error_payload['target_type'] = 'asset';
|
||||
|
||||
} elseif (request('checkout_to_type')=='user') {
|
||||
// Fetch the target and set the asset's new location_id
|
||||
$target = User::find(request('assigned_user'));
|
||||
$asset->location_id = ($target) ? $target->location_id : '';
|
||||
$error_payload['target_id'] = $request->input('assigned_user');
|
||||
$error_payload['target_type'] = 'user';
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!isset($target)) {
|
||||
return response()->json(Helper::formatStandardApiResponse('error', $error_payload, 'No valid checkout target specified for asset '.e($asset->asset_tag).'.'));
|
||||
return response()->json(Helper::formatStandardApiResponse('error', $error_payload, 'Checkout target for asset '.e($asset->asset_tag).' is invalid - '.$error_payload['target_type'].' does not exist.'));
|
||||
}
|
||||
|
||||
|
||||
@@ -550,11 +568,11 @@ class AssetsController extends Controller
|
||||
$asset->location_id = $target->rtd_location_id;
|
||||
}
|
||||
|
||||
$asset->location_id = $location;
|
||||
|
||||
|
||||
|
||||
|
||||
if ($asset->checkOut($target, Auth::user(), $checkout_at, $expected_checkin, $note, $asset_name, $location)) {
|
||||
if ($asset->checkOut($target, Auth::user(), $checkout_at, $expected_checkin, $note, $asset_name, $asset->location_id)) {
|
||||
return response()->json(Helper::formatStandardApiResponse('success', ['asset'=> e($asset->asset_tag)], trans('admin/hardware/message.checkout.success')));
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ class CategoriesController extends Controller
|
||||
public function index(Request $request)
|
||||
{
|
||||
$this->authorize('view', Category::class);
|
||||
$allowed_columns = ['id', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count', 'image'];
|
||||
$allowed_columns = ['id', 'name','category_type', 'category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count', 'image'];
|
||||
|
||||
$categories = Category::select(['id', 'created_at', 'updated_at', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email','image'])
|
||||
->withCount('assets', 'accessories', 'consumables', 'components');
|
||||
@@ -141,7 +141,6 @@ class CategoriesController extends Controller
|
||||
*/
|
||||
public function selectlist(Request $request, $category_type = 'asset')
|
||||
{
|
||||
$this->authorize('view', Categories::class);
|
||||
|
||||
$categories = Category::select([
|
||||
'id',
|
||||
|
||||
@@ -50,11 +50,9 @@ class ReportsController extends Controller
|
||||
$offset = request('offset', 0);
|
||||
$limit = request('limit', 50);
|
||||
$total = $actionlogs->count();
|
||||
$actionlogs = $actionlogs->orderBy($sort, $order);
|
||||
$actionlogs = $actionlogs->skip($offset)->take($limit)->get();
|
||||
return (new ActionlogsTransformer)->transformActionlogs($actionlogs, $total);
|
||||
|
||||
$actionlogs = $actionlogs->orderBy($sort, $order)->skip($offset)->take($limit)->get();
|
||||
|
||||
return response()->json((new ActionlogsTransformer)->transformActionlogs($actionlogs, $total), 200, ['Content-Type' => 'application/json;charset=utf8'], JSON_UNESCAPED_UNICODE);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -431,8 +431,13 @@ class AssetsController extends Controller
|
||||
|
||||
$this->authorize('checkout', $asset);
|
||||
|
||||
if ($asset->availableForCheckout()) {
|
||||
return view('hardware/checkout', compact('asset'));
|
||||
}
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkout.not_available'));
|
||||
|
||||
// Get the dropdown of users and then pass it to the checkout view
|
||||
return view('hardware/checkout', compact('asset'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -453,34 +458,33 @@ class AssetsController extends Controller
|
||||
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkout.not_available'));
|
||||
}
|
||||
$this->authorize('checkout', $asset);
|
||||
$admin = Auth::user();
|
||||
|
||||
|
||||
// Fetch the target and set the asset's new location_id
|
||||
if (request('assigned_user')) {
|
||||
$target = User::find(request('assigned_user'));
|
||||
$asset->location_id = ($target) ? $target->location_id : '';
|
||||
|
||||
} elseif (request('assigned_asset')) {
|
||||
// This item is checked out to a location
|
||||
if (request('checkout_to_type')=='location') {
|
||||
$target = Location::find(request('assigned_location'));
|
||||
$asset->location_id = ($target) ? $target->id : '';
|
||||
|
||||
} elseif (request('checkout_to_type')=='asset') {
|
||||
$target = Asset::where('id','!=',$assetId)->find(request('assigned_asset'));
|
||||
$asset->location_id = $target->rtd_location_id;
|
||||
|
||||
// Override with the asset's location_id if it has one
|
||||
if ($target->location_id!='') {
|
||||
$asset->location_id = ($target) ? $target->location_id : '';
|
||||
}
|
||||
|
||||
} elseif (request('assigned_location')) {
|
||||
$target = Location::find(request('assigned_location'));
|
||||
$asset->location_id = ($target) ? $target->id : '';
|
||||
} elseif (request('checkout_to_type')=='user') {
|
||||
// Fetch the target and set the asset's new location_id
|
||||
$target = User::find(request('assigned_user'));
|
||||
$asset->location_id = ($target) ? $target->location_id : '';
|
||||
}
|
||||
|
||||
// No valid target was found - error out
|
||||
if (!$target) {
|
||||
return redirect()->to("hardware/$assetId/checkout")->with('error', trans('admin/hardware/message.checkout.error'))->withErrors($asset->getErrors());
|
||||
return redirect()->back()->with('error', trans('admin/hardware/message.checkout.error'))->withErrors($asset->getErrors());
|
||||
}
|
||||
|
||||
$admin = Auth::user();
|
||||
|
||||
if ((Input::has('checkout_at')) && (Input::get('checkout_at')!= date("Y-m-d"))) {
|
||||
$checkout_at = Input::get('checkout_at');
|
||||
@@ -496,7 +500,6 @@ class AssetsController extends Controller
|
||||
|
||||
|
||||
if ($asset->checkOut($target, $admin, $checkout_at, $expected_checkin, e(Input::get('note')), Input::get('name'))) {
|
||||
// Redirect to the new asset page
|
||||
return redirect()->route("hardware.index")->with('success', trans('admin/hardware/message.checkout.success'));
|
||||
}
|
||||
|
||||
@@ -1078,70 +1081,73 @@ class AssetsController extends Controller
|
||||
* @internal param array $assets
|
||||
* @since [v2.0]
|
||||
*/
|
||||
public function postBulkSave()
|
||||
public function postBulkSave(Request $request)
|
||||
{
|
||||
$this->authorize('update', Asset::class);
|
||||
if (Input::has('ids')) {
|
||||
$assets = Input::get('ids');
|
||||
if ((Input::has('purchase_date'))
|
||||
|| (Input::has('purchase_cost'))
|
||||
|| (Input::has('supplier_id'))
|
||||
|| (Input::has('order_number'))
|
||||
|| (Input::has('warranty_months'))
|
||||
|| (Input::has('rtd_location_id'))
|
||||
|| (Input::has('requestable'))
|
||||
|| (Input::has('company_id'))
|
||||
|| (Input::has('status_id'))
|
||||
|| (Input::has('model_id'))
|
||||
|
||||
\Log::debug($request->input('ids'));
|
||||
|
||||
if (($request->has('ids')) && (count($request->input('ids') > 0))) {
|
||||
$assets = $request->input('ids');
|
||||
if (($request->has('purchase_date'))
|
||||
|| ($request->has('purchase_cost'))
|
||||
|| ($request->has('supplier_id'))
|
||||
|| ($request->has('order_number'))
|
||||
|| ($request->has('warranty_months'))
|
||||
|| ($request->has('rtd_location_id'))
|
||||
|| ($request->has('requestable'))
|
||||
|| ($request->has('company_id'))
|
||||
|| ($request->has('status_id'))
|
||||
|| ($request->has('model_id'))
|
||||
) {
|
||||
foreach ($assets as $key => $value) {
|
||||
$update_array = array();
|
||||
|
||||
if (Input::has('purchase_date')) {
|
||||
$update_array['purchase_date'] = e(Input::get('purchase_date'));
|
||||
if ($request->has('purchase_date')) {
|
||||
$update_array['purchase_date'] = $request->input('purchase_date');
|
||||
}
|
||||
if (Input::has('purchase_cost')) {
|
||||
$update_array['purchase_cost'] = Helper::ParseFloat(e(Input::get('purchase_cost')));
|
||||
if ($request->has('purchase_cost')) {
|
||||
$update_array['purchase_cost'] = Helper::ParseFloat($request->input('purchase_cost'));
|
||||
}
|
||||
if (Input::has('supplier_id')) {
|
||||
$update_array['supplier_id'] = e(Input::get('supplier_id'));
|
||||
if ($request->has('supplier_id')) {
|
||||
$update_array['supplier_id'] = $request->input('supplier_id');
|
||||
}
|
||||
if (Input::has('model_id')) {
|
||||
$update_array['model_id'] = e(Input::get('model_id'));
|
||||
if ($request->has('model_id')) {
|
||||
$update_array['model_id'] = $request->input('model_id');
|
||||
}
|
||||
if (Input::has('company_id')) {
|
||||
if (Input::get('company_id')=="clear") {
|
||||
if ($request->has('company_id')) {
|
||||
if ($request->input('company_id')=="clear") {
|
||||
$update_array['company_id'] = null;
|
||||
} else {
|
||||
$update_array['company_id'] = e(Input::get('company_id'));
|
||||
$update_array['company_id'] = $request->input('company_id');
|
||||
}
|
||||
}
|
||||
if (Input::has('order_number')) {
|
||||
$update_array['order_number'] = e(Input::get('order_number'));
|
||||
if ($request->has('order_number')) {
|
||||
$update_array['order_number'] = $request->input('order_number');
|
||||
}
|
||||
if (Input::has('warranty_months')) {
|
||||
$update_array['warranty_months'] = e(Input::get('warranty_months'));
|
||||
if ($request->has('warranty_months')) {
|
||||
$update_array['warranty_months'] = $request->input('warranty_months');
|
||||
}
|
||||
if (Input::has('rtd_location_id')) {
|
||||
$update_array['rtd_location_id'] = e(Input::get('rtd_location_id'));
|
||||
if ($request->has('rtd_location_id')) {
|
||||
$update_array['rtd_location_id'] = $request->input('rtd_location_id');
|
||||
}
|
||||
if (Input::has('status_id')) {
|
||||
$update_array['status_id'] = e(Input::get('status_id'));
|
||||
if ($request->has('status_id')) {
|
||||
$update_array['status_id'] = $request->input('status_id');
|
||||
}
|
||||
if (Input::has('requestable')) {
|
||||
$update_array['requestable'] = e(Input::get('requestable'));
|
||||
if ($request->has('requestable')) {
|
||||
$update_array['requestable'] = $request->input('requestable');
|
||||
}
|
||||
|
||||
DB::table('assets')
|
||||
->where('id', $key)
|
||||
->update($update_array);
|
||||
} // endforeach
|
||||
return redirect()->to("hardware")->with('success', trans('admin/hardware/message.update.success'));
|
||||
return redirect()->route("hardware.index")->with('success', trans('admin/hardware/message.update.success'));
|
||||
// no values given, nothing to update
|
||||
}
|
||||
return redirect()->to("hardware")->with('info', trans('admin/hardware/message.update.nothing_updated'));
|
||||
return redirect()->route("hardware.index")->with('warning', trans('admin/hardware/message.update.nothing_updated'));
|
||||
} // endif
|
||||
return redirect()->to("hardware");
|
||||
return redirect()->route("hardware.index")->with('warning', trans('No assets selected, so nothing was updated.'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1242,8 +1248,9 @@ class AssetsController extends Controller
|
||||
|
||||
public function audit($id)
|
||||
{
|
||||
$settings = Setting::getSettings();
|
||||
$this->authorize('audit', Asset::class);
|
||||
$dt = Carbon::now()->addMonths(12)->toDateString();
|
||||
$dt = Carbon::now()->addMonths($settings->audit_interval)->toDateString();
|
||||
$asset = Asset::findOrFail($id);
|
||||
return view('hardware/audit')->with('asset', $asset)->with('next_audit_date', $dt)->with('locations_list');
|
||||
}
|
||||
|
||||
@@ -275,12 +275,18 @@ class LicensesController extends Controller
|
||||
if ($license->getAvailSeatsCountAttribute() < 1) {
|
||||
return redirect()->route('licenses.index')->with('error', 'There are no available seats for this license');
|
||||
}
|
||||
|
||||
// Get the next available seat for this license
|
||||
$next = $license->freeSeat();
|
||||
|
||||
if (!$next) {
|
||||
return redirect()->route('licenses.index')->with('error', 'There are no available seats for this license');
|
||||
}
|
||||
|
||||
if (!$licenseSeat = LicenseSeat::where('id', '=', $next->id)->first()) {
|
||||
return redirect()->route('licenses.index')->with('error', 'There are no available seats for this license');
|
||||
}
|
||||
|
||||
$licenseSeat = LicenseSeat::where('license_id',$license->id)->find($next)->first();
|
||||
$assigned_to = $request->input('assigned_to');
|
||||
$asset_id = $request->input('asset_id');
|
||||
|
||||
$this->authorize('checkout', $licenseSeat);
|
||||
|
||||
@@ -299,52 +305,34 @@ class LicensesController extends Controller
|
||||
return redirect()->back()->withInput()->withErrors($validator);
|
||||
}
|
||||
$target = null;
|
||||
if ($assigned_to!='') {
|
||||
// Check if the user exists
|
||||
if (is_null($target = User::find($assigned_to))) {
|
||||
// Redirect to the asset management page with error
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.user_does_not_exist'));
|
||||
}
|
||||
}
|
||||
|
||||
if ($asset_id!='') {
|
||||
if (is_null($target = Asset::find($asset_id))) {
|
||||
// Redirect to the asset management page with error
|
||||
|
||||
// This item is checked out to a an asset
|
||||
if (request('checkout_to_type')=='asset') {
|
||||
if (is_null($target = Asset::find(request('asset_id')))) {
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.asset_does_not_exist'));
|
||||
}
|
||||
|
||||
if (($request->has('assigned_to')) && ($request->has('asset_id'))) {
|
||||
return redirect()->back()->withInput()->with('error', trans('admin/licenses/message.select_asset_or_person'));
|
||||
}
|
||||
}
|
||||
|
||||
// Check if the asset exists
|
||||
if (is_null($licenseSeat)) {
|
||||
// Redirect to the asset management page with error
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.not_found'));
|
||||
}
|
||||
|
||||
if ($request->input('asset_id') == '') {
|
||||
$licenseSeat->asset_id = null;
|
||||
} else {
|
||||
$licenseSeat->asset_id = $request->input('asset_id');
|
||||
}
|
||||
|
||||
// Update the asset data
|
||||
if ($request->input('assigned_to') == '') {
|
||||
$licenseSeat->assigned_to = null;
|
||||
// Override asset's assigned user if available
|
||||
if ($target->assigned_to!='') {
|
||||
$licenseSeat->assigned_to = $target->assigned_to;
|
||||
}
|
||||
|
||||
} else {
|
||||
$licenseSeat->assigned_to = $request->input('assigned_to');
|
||||
|
||||
// Fetch the target and set the license user
|
||||
if (is_null($target = User::find(request('assigned_to')))) {
|
||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.user_does_not_exist'));
|
||||
}
|
||||
$licenseSeat->assigned_to = request('assigned_to');
|
||||
}
|
||||
|
||||
// Was the asset updated?
|
||||
$licenseSeat->user_id = Auth::user()->id;
|
||||
|
||||
|
||||
if ($licenseSeat->save()) {
|
||||
$licenseSeat->logCheckout($request->input('note'), $target);
|
||||
|
||||
$data['license_id'] = $licenseSeat->license_id;
|
||||
$data['note'] = $request->input('note');
|
||||
|
||||
// Redirect to the new asset page
|
||||
return redirect()->route("licenses.index")->with('success', trans('admin/licenses/message.checkout.success'));
|
||||
}
|
||||
|
||||
|
||||
@@ -156,6 +156,7 @@ class ReportsController extends Controller
|
||||
trans('admin/hardware/form.order'),
|
||||
trans('general.supplier'),
|
||||
trans('admin/hardware/table.checkoutto'),
|
||||
trans('general.type'),
|
||||
trans('admin/hardware/table.checkout_date'),
|
||||
trans('admin/hardware/table.location'),
|
||||
trans('general.notes'),
|
||||
@@ -166,6 +167,8 @@ class ReportsController extends Controller
|
||||
fputcsv($handle, $headers);
|
||||
|
||||
foreach ($assets as $asset) {
|
||||
|
||||
|
||||
// Add a new row with data
|
||||
$values=[
|
||||
($asset->company) ? $asset->company->name : '',
|
||||
@@ -175,12 +178,13 @@ class ReportsController extends Controller
|
||||
($asset->model->model_number) ? $asset->model->model_number : '',
|
||||
($asset->name) ? $asset->name : '',
|
||||
($asset->serial) ? $asset->serial : '',
|
||||
($asset->assetstatus) ? e($asset->assetstatus->name) : '',
|
||||
($asset->assetstatus) ? e($asset->present()->statusText) : '',
|
||||
($asset->purchase_date) ? e($asset->purchase_date) : '',
|
||||
($asset->purchase_cost > 0) ? Helper::formatCurrencyOutput($asset->purchase_cost) : '',
|
||||
($asset->order_number) ? e($asset->order_number) : '',
|
||||
($asset->supplier) ? e($asset->supplier->name) : '',
|
||||
($asset->assignedTo) ? e($asset->assignedTo->present()->name()) : '',
|
||||
($asset->checkedOutToUser() && $asset->assigned) ? e($asset->assigned->getFullNameAttribute()) : ($asset->assigned ? e($asset->assigned->display_name) : ''),
|
||||
($asset->checkedOutToUser() && $asset->assigned) ? 'user' : e($asset->assignedType()),
|
||||
($asset->last_checkout!='') ? e($asset->last_checkout) : '',
|
||||
($asset->location) ? e($asset->location->name) : '',
|
||||
($asset->notes) ? e($asset->notes) : '',
|
||||
|
||||
@@ -24,9 +24,10 @@ class AssetCheckoutRequest extends Request
|
||||
public function rules()
|
||||
{
|
||||
$rules = [
|
||||
"assigned_user" => 'required_without_all:assigned_asset,assigned_location',
|
||||
"assigned_asset" => 'required_without_all:assigned_user,assigned_location|different:'.$this->id,
|
||||
"assigned_location" => 'required_without_all:assigned_user,assigned_asset',
|
||||
"assigned_user" => 'required_without_all:assigned_asset,assigned_location',
|
||||
"assigned_asset" => 'required_without_all:assigned_user,assigned_location|different:'.$this->id,
|
||||
"assigned_location" => 'required_without_all:assigned_user,assigned_asset',
|
||||
"checkout_to_type" => 'required|in:asset,location,user'
|
||||
];
|
||||
|
||||
|
||||
|
||||
@@ -86,24 +86,21 @@ class AssetsTransformer
|
||||
$decrypted = \App\Helpers\Helper::gracefulDecrypt($field,$asset->{$field->convertUnicodeDbSlug()});
|
||||
$value = (Gate::allows('superadmin')) ? $decrypted : strtoupper(trans('admin/custom_fields/general.encrypted'));
|
||||
|
||||
// $fields_array = [$field->convertUnicodeDbSlug() => $value];
|
||||
|
||||
|
||||
$fields_array[$field->name] = [
|
||||
'field' => $field->convertUnicodeDbSlug(),
|
||||
'value' => $value
|
||||
'value' => $value,
|
||||
'field_format' => $field->format,
|
||||
];
|
||||
|
||||
} else {
|
||||
$fields_array[$field->name] = [
|
||||
'field' => $field->convertUnicodeDbSlug(),
|
||||
'value' => $asset->{$field->convertUnicodeDbSlug()}
|
||||
'value' => $asset->{$field->convertUnicodeDbSlug()},
|
||||
'field_format' => $field->format,
|
||||
];
|
||||
//$fields_array = [$field->convertUnicodeDbSlug() => $asset->{$field->convertUnicodeDbSlug()}];
|
||||
|
||||
|
||||
}
|
||||
//array += $fields_array;
|
||||
$array['custom_fields'] = $fields_array;
|
||||
}
|
||||
} else {
|
||||
@@ -114,10 +111,23 @@ class AssetsTransformer
|
||||
'checkout' => (bool) Gate::allows('checkout', Asset::class),
|
||||
'checkin' => (bool) Gate::allows('checkin', Asset::class),
|
||||
'clone' => Gate::allows('create', Asset::class) ? true : false,
|
||||
'restore' => false,
|
||||
'update' => (bool) Gate::allows('update', Asset::class),
|
||||
'delete' => (bool) Gate::allows('delete', Asset::class),
|
||||
];
|
||||
|
||||
if ($asset->deleted_at!='') {
|
||||
$permissions_array['available_actions'] = [
|
||||
'checkout' => true,
|
||||
'checkin' => false,
|
||||
'clone' => Gate::allows('create', Asset::class) ? true : false,
|
||||
'restore' => Gate::allows('create', Asset::class) ? true : false,
|
||||
'update' => false,
|
||||
'delete' => false,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
$array += $permissions_array;
|
||||
return $array;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ class CategoriesTransformer
|
||||
'id' => (int) $category->id,
|
||||
'name' => e($category->name),
|
||||
'image' => ($category->image) ? app('categories_upload_url').e($category->image) : null,
|
||||
'type' => e($category->category_type),
|
||||
'category_type' => e($category->category_type),
|
||||
'eula' => ($category->getEula()) ? true : false,
|
||||
'checkin_email' => ($category->checkin_email =='1') ? true : false,
|
||||
'require_acceptance' => ($category->require_acceptance =='1') ? true : false,
|
||||
|
||||
@@ -31,7 +31,9 @@ class AssetImporter extends ItemImporter
|
||||
$this->item['custom_fields'][$customField->db_column_name()] = $customFieldValue;
|
||||
$this->log('Custom Field '. $customField->name.': '.$customFieldValue);
|
||||
} else {
|
||||
$this->item['custom_fields'][$customField->db_column_name()] = '';
|
||||
// This removes custom fields when updating if the column doesn't exist in file.
|
||||
// Commented out becausee not sure if it's needed anywhere.
|
||||
// $this->item['custom_fields'][$customField->db_column_name()] = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -77,17 +79,20 @@ class AssetImporter extends ItemImporter
|
||||
}
|
||||
|
||||
$this->item['asset_tag'] = $asset_tag;
|
||||
// By default we're set this to location_id in the item.
|
||||
$item = $this->sanitizeItemForStoring($asset, $editingAsset);
|
||||
// By default we're set this to location_id in the item.
|
||||
if (isset($this->item["location_id"])) {
|
||||
$item['rtd_location_id'] = $this->item['location_id'];
|
||||
unset($item['location_id']);
|
||||
}
|
||||
|
||||
if ($editingAsset) {
|
||||
$asset->update($item);
|
||||
} else {
|
||||
$asset->fill($item);
|
||||
}
|
||||
// If we're updating, we don't want to overwrite old fields.
|
||||
|
||||
if (array_key_exists('custom_fields', $this->item)) {
|
||||
foreach ($this->item['custom_fields'] as $custom_field => $val) {
|
||||
$asset->{$custom_field} = $val;
|
||||
|
||||
@@ -40,6 +40,7 @@ class ConsumableImporter extends ItemImporter
|
||||
$this->log("No matching consumable, creating one");
|
||||
$consumable = new Consumable();
|
||||
$consumable->fill($this->sanitizeItemForStoring($consumable));
|
||||
|
||||
if ($consumable->save()) {
|
||||
$consumable->logCreate('Imported using CSV Importer');
|
||||
$this->log("Consumable " . $this->item["name"] . ' was created');
|
||||
|
||||
@@ -63,7 +63,7 @@ class ItemImporter extends Importer
|
||||
$this->item["qty"] = $this->findCsvMatch($row, "quantity");
|
||||
$this->item["requestable"] = $this->findCsvMatch($row, "requestable");
|
||||
$this->item["user_id"] = $this->user_id;
|
||||
$this->item['serial'] = $this->findCsvMatch($row, "serial_number");
|
||||
$this->item['serial'] = $this->findCsvMatch($row, "serial");
|
||||
// NO need to call this method if we're running the user import.
|
||||
// TODO: Merge these methods.
|
||||
if(get_class($this) !== UserImporter::class) {
|
||||
@@ -92,6 +92,7 @@ class ItemImporter extends Importer
|
||||
$item = collect($this->item);
|
||||
// First Filter the item down to the model's fillable fields
|
||||
$item = $item->only($model->getFillable());
|
||||
|
||||
// Then iterate through the item and, if we are updating, remove any blank values.
|
||||
if ($updating) {
|
||||
$item = $item->reject(function ($value) {
|
||||
|
||||
+67
-11
@@ -765,11 +765,11 @@ class Asset extends Depreciable
|
||||
{
|
||||
$search = explode(' OR ', $search);
|
||||
|
||||
return $query->leftJoin('users',function ($leftJoin) {
|
||||
$leftJoin->on("users.id", "=", "assets.assigned_to")
|
||||
return $query->leftJoin('users as assets_users',function ($leftJoin) {
|
||||
$leftJoin->on("assets_users.id", "=", "assets.assigned_to")
|
||||
->where("assets.assigned_type", "=", User::class);
|
||||
})->leftJoin('locations',function ($leftJoin) {
|
||||
$leftJoin->on("locations.id","=","assets.assigned_to")
|
||||
})->leftJoin('locations as assets_locations',function ($leftJoin) {
|
||||
$leftJoin->on("assets_locations.id","=","assets.assigned_to")
|
||||
->where("assets.assigned_type","=",Location::class);
|
||||
})->leftJoin('assets as assigned_assets',function ($leftJoin) {
|
||||
$leftJoin->on('assigned_assets.id', '=', 'assets.assigned_to')
|
||||
@@ -808,10 +808,10 @@ class Asset extends Depreciable
|
||||
$query->where('locations.name', 'LIKE', '%'.$search.'%');
|
||||
});
|
||||
})->orWhere(function ($query) use ($search) {
|
||||
$query->where('users.first_name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('users.last_name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('users.username', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('locations.name', 'LIKE', '%'.$search.'%')
|
||||
$query->where('assets_users.first_name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets_users.last_name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets_users.username', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets_locations.name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assigned_assets.name', 'LIKE', '%'.$search.'%');
|
||||
})->orWhere('assets.name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets.asset_tag', 'LIKE', '%'.$search.'%')
|
||||
@@ -826,6 +826,62 @@ class Asset extends Depreciable
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Query builder scope to search on text for complex Bootstrap Tables API.
|
||||
*
|
||||
* @param \Illuminate\Database\Query\Builder $query Query builder instance
|
||||
* @param text $search Search term
|
||||
*
|
||||
* @return \Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
public function scopeAssignedSearch($query, $search)
|
||||
{
|
||||
$search = explode(' OR ', $search);
|
||||
|
||||
return $query->leftJoin('users as assets_users',function ($leftJoin) {
|
||||
$leftJoin->on("assets_users.id", "=", "assets.assigned_to")
|
||||
->where("assets.assigned_type", "=", User::class);
|
||||
})->leftJoin('locations as assets_locations',function ($leftJoin) {
|
||||
$leftJoin->on("assets_locations.id","=","assets.assigned_to")
|
||||
->where("assets.assigned_type","=",Location::class);
|
||||
})->leftJoin('assets as assigned_assets',function ($leftJoin) {
|
||||
$leftJoin->on('assigned_assets.id', '=', 'assets.assigned_to')
|
||||
->where('assets.assigned_type', '=', Asset::class);
|
||||
})->where(function ($query) use ($search) {
|
||||
foreach ($search as $search) {
|
||||
$query->whereHas('model', function ($query) use ($search) {
|
||||
$query->whereHas('category', function ($query) use ($search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->where('categories.name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('models.name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('models.model_number', 'LIKE', '%'.$search.'%');
|
||||
});
|
||||
});
|
||||
})->orWhereHas('model', function ($query) use ($search) {
|
||||
$query->whereHas('manufacturer', function ($query) use ($search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->where('manufacturers.name', 'LIKE', '%'.$search.'%');
|
||||
});
|
||||
});
|
||||
})->orWhere(function ($query) use ($search) {
|
||||
$query->where('assets_users.first_name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets_users.last_name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets_users.username', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets_locations.name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assigned_assets.name', 'LIKE', '%'.$search.'%');
|
||||
})->orWhere('assets.name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets.asset_tag', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets.serial', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets.order_number', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('assets.notes', 'LIKE', '%'.$search.'%');
|
||||
}
|
||||
foreach (CustomField::all() as $field) {
|
||||
$query->orWhere('assets.'.$field->db_column_name(), 'LIKE', "%$search%");
|
||||
}
|
||||
})->withTrashed()->whereNull("assets.deleted_at"); //workaround for laravel bug
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Query builder scope to search on text filters for complex Bootstrap Tables API
|
||||
@@ -963,7 +1019,7 @@ class Asset extends Depreciable
|
||||
*/
|
||||
public function scopeOrderModels($query, $order)
|
||||
{
|
||||
return $query->join('models as asset_models', 'assets.model_id', '=', 'models.id')->orderBy('models.name', $order);
|
||||
return $query->join('models as asset_models', 'assets.model_id', '=', 'asset_models.id')->orderBy('asset_models.name', $order);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1091,7 +1147,7 @@ class Asset extends Depreciable
|
||||
*/
|
||||
public function scopeOrderLocation($query, $order)
|
||||
{
|
||||
return $query->leftJoin('locations as asset_locations', 'asset_locations.id', '=', 'assets.rtd_location_id')->orderBy('asset_locations.name', $order);
|
||||
return $query->leftJoin('locations as asset_locations', 'asset_locations.id', '=', 'assets.location_id')->orderBy('asset_locations.name', $order);
|
||||
}
|
||||
|
||||
|
||||
@@ -1119,7 +1175,7 @@ class Asset extends Depreciable
|
||||
public function scopeByLocationId($query, $search)
|
||||
{
|
||||
return $query->where(function ($query) use ($search) {
|
||||
$query->whereHas('defaultLoc', function ($query) use ($search) {
|
||||
$query->whereHas('location', function ($query) use ($search) {
|
||||
$query->where('locations.id', '=', $search);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -16,12 +16,17 @@ class CustomField extends Model
|
||||
public static $PredefinedFormats=[
|
||||
"ANY" => "",
|
||||
"ALPHA" => "alpha",
|
||||
"ALPHA-DASH" => "alpha_dash",
|
||||
"NUMERIC" => "numeric",
|
||||
"ALPHA-NUMERIC" => "alpha_num",
|
||||
"EMAIL" => "email",
|
||||
"DATE" => "date",
|
||||
"URL" => "url",
|
||||
"NUMERIC" => "numeric",
|
||||
"MAC" => "regex:/^[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}$/",
|
||||
"IP" => "ip",
|
||||
"IPV4" => "ipv4",
|
||||
"IPV6" => "ipv6",
|
||||
"MAC" => "regex:/^[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}$/",
|
||||
"BOOLEAN" => "boolean",
|
||||
];
|
||||
|
||||
public $rules = [
|
||||
@@ -30,27 +35,54 @@ class CustomField extends Model
|
||||
|
||||
// This is confusing, since it's actually the custom fields table that
|
||||
// we're usually modifying, but since we alter the assets table, we have to
|
||||
// say that here
|
||||
// say that here, otherwise the new fields get added onto the custom fields
|
||||
// table instead of the assets table.
|
||||
public static $table_name = "assets";
|
||||
|
||||
|
||||
/**
|
||||
* Convert the custom field's name property to a db-safe string.
|
||||
*
|
||||
* We could probably have used str_slug() here but not sure what it would
|
||||
* do with previously existing values. - @snipe
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v3.4]
|
||||
* @return String
|
||||
*/
|
||||
public static function name_to_db_name($name)
|
||||
{
|
||||
return "_snipeit_" . preg_replace("/[^a-zA-Z0-9]/", "_", strtolower($name));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set some boot methods for creating and updating.
|
||||
*
|
||||
* There is never ever a time when we wouldn't want to be updating those asset
|
||||
* column names and the values of the db column name in the custom fields table
|
||||
* if they have changed, so we handle that here so that we don't have to remember
|
||||
* to do it in the controllers.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v3.4]
|
||||
* @return Boolean
|
||||
*/
|
||||
public static function boot()
|
||||
{
|
||||
self::created(function ($custom_field) {
|
||||
|
||||
// column exists - nothing to do here
|
||||
// Column already exists on the assets table - nothing to do here.
|
||||
// This *shouldn't* happen in the wild.
|
||||
if (Schema::hasColumn(CustomField::$table_name, $custom_field->convertUnicodeDbSlug())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Update the column name in the assets table
|
||||
Schema::table(CustomField::$table_name, function ($table) use ($custom_field) {
|
||||
$table->text($custom_field->convertUnicodeDbSlug())->nullable();
|
||||
});
|
||||
|
||||
// Update the db_column property in the custom fields table
|
||||
$custom_field->db_column = $custom_field->convertUnicodeDbSlug();
|
||||
$custom_field->save();
|
||||
});
|
||||
@@ -58,8 +90,9 @@ class CustomField extends Model
|
||||
|
||||
self::updating(function ($custom_field) {
|
||||
|
||||
// Column already exists. Nothing to update.
|
||||
// Column already exists on the assets table - nothing to do here.
|
||||
if ($custom_field->isDirty("name")) {
|
||||
|
||||
if (Schema::hasColumn(CustomField::$table_name, $custom_field->convertUnicodeDbSlug())) {
|
||||
return true;
|
||||
}
|
||||
@@ -113,11 +146,21 @@ class CustomField extends Model
|
||||
return $this->db_column;
|
||||
}
|
||||
|
||||
// mutators for 'format' attribute
|
||||
/**
|
||||
* Mutator for the 'format' attribute.
|
||||
*
|
||||
* This is used by the dropdown to store the laravel-specific
|
||||
* validator strings in the database but still return the
|
||||
* user-friendly text in the dropdowns, and in the custom fields display.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v3.4]
|
||||
* @return Array
|
||||
*/
|
||||
public function getFormatAttribute($value)
|
||||
{
|
||||
foreach (self::$PredefinedFormats as $name => $pattern) {
|
||||
if ($pattern===$value) {
|
||||
if ($pattern === $value) {
|
||||
return $name;
|
||||
}
|
||||
}
|
||||
@@ -168,6 +211,13 @@ class CustomField extends Model
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the field is encrypted
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v3.4]
|
||||
* @return Boolean
|
||||
*/
|
||||
public function isFieldDecryptable($string)
|
||||
{
|
||||
if (($this->field_encrypted=='1') && ($string!='')) {
|
||||
@@ -177,6 +227,14 @@ class CustomField extends Model
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert non-UTF-8 or weirdly encoded text into something that
|
||||
* won't break the database.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v3.4]
|
||||
* @return Boolean
|
||||
*/
|
||||
public function convertUnicodeDbSlug($original = null)
|
||||
{
|
||||
$name = $original ? $original : $this->name;
|
||||
|
||||
@@ -347,10 +347,13 @@ class License extends Depreciable
|
||||
*/
|
||||
public function freeSeat()
|
||||
{
|
||||
return $this->licenseseats()
|
||||
return $this->licenseseats()
|
||||
->whereNull('deleted_at')
|
||||
->whereNull('assigned_to')
|
||||
->whereNull('asset_id')
|
||||
->where(function ($query) {
|
||||
$query->whereNull('assigned_to')
|
||||
->whereNull('asset_id');
|
||||
})
|
||||
->orderBy('id', 'asc')
|
||||
->first();
|
||||
}
|
||||
|
||||
|
||||
@@ -89,6 +89,18 @@ class Setting extends Model
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes the custom CSS, and then un-escapes the greater-than symbol
|
||||
* so it can work with direct descendant characters for bootstrap
|
||||
* menu overrides like:
|
||||
*
|
||||
* .skin-blue .sidebar-menu>li.active>a, .skin-blue .sidebar-menu>li:hover>a
|
||||
*
|
||||
* Important: Do not remove the e() escaping here, as we output raw in the blade.
|
||||
*
|
||||
* @return string escaped CSS
|
||||
* @author A. Gianotto <snipe@snipe.net>
|
||||
*/
|
||||
public function show_custom_css()
|
||||
{
|
||||
$custom_css = Setting::getSettings()->custom_css;
|
||||
|
||||
@@ -24,6 +24,7 @@ class SnipeModel extends Model
|
||||
public function setPurchaseCostAttribute($value)
|
||||
{
|
||||
$value = Helper::ParseFloat($value);
|
||||
|
||||
if ($value == '0.0') {
|
||||
$value = null;
|
||||
}
|
||||
|
||||
@@ -289,10 +289,8 @@ class AssetPresenter extends Presenter
|
||||
$imagePath = '';
|
||||
if ($this->image && !empty($this->image)) {
|
||||
$imagePath = $this->image;
|
||||
return 'poop';
|
||||
} elseif ($this->model && !empty($this->model->image)) {
|
||||
$imagePath = $this->model->image;
|
||||
return 'fart';
|
||||
}
|
||||
if (!empty($imagePath)) {
|
||||
return config('app.url').'/uploads/assets/'.$imagePath;
|
||||
|
||||
@@ -40,7 +40,7 @@ class CategoryPresenter extends Presenter
|
||||
"visible" => true,
|
||||
"formatter" => 'imageFormatter',
|
||||
],[
|
||||
"field" => "type",
|
||||
"field" => "category_type",
|
||||
"searchable" => true,
|
||||
"sortable" => true,
|
||||
"title" => trans('general.type'),
|
||||
|
||||
@@ -40,7 +40,7 @@ class LocationPresenter extends Presenter
|
||||
|
||||
public function glyph()
|
||||
{
|
||||
return '<i class="fa fa-globe"></i>';
|
||||
return '<i class="fa fa-map-marker"></i>';
|
||||
}
|
||||
|
||||
public function fullName() {
|
||||
|
||||
@@ -352,6 +352,6 @@ class UserPresenter extends Presenter
|
||||
|
||||
public function glyph()
|
||||
{
|
||||
return '<i class="fa fa-users"></i>';
|
||||
return '<i class="fa fa-user"></i>';
|
||||
}
|
||||
}
|
||||
|
||||
+7
-4
@@ -1,7 +1,10 @@
|
||||
<?php
|
||||
return array (
|
||||
'app_version' => 'v4.1.4',
|
||||
'build_version' => '173',
|
||||
'hash_version' => 'gba38b84',
|
||||
'full_hash' => 'v4.1.4-173-gba38b84',
|
||||
'app_version' => 'v4.1.6',
|
||||
'full_app_version' => 'v4.1.6 - build 2963-g83c8449',
|
||||
'build_version' => '2963',
|
||||
'prerelease_version' => '',
|
||||
'hash_version' => 'g83c8449',
|
||||
'full_hash' => 'v4.1.5-76-gb934d2e',
|
||||
'branch' => 'master',
|
||||
);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\CustomField;
|
||||
use App\Models\CustomFieldset;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
|
||||
@@ -21,6 +22,8 @@ class CustomFieldSeeder extends Seeder
|
||||
}
|
||||
}
|
||||
CustomField::truncate();
|
||||
CustomFieldset::truncate();
|
||||
DB::table('custom_field_custom_fieldset')->truncate();
|
||||
factory(CustomField::class, 4)->create();
|
||||
|
||||
}
|
||||
|
||||
@@ -33,6 +33,10 @@ class DatabaseSeeder extends Seeder
|
||||
$this->call(ActionlogSeeder::class);
|
||||
$this->call(CustomFieldSeeder::class);
|
||||
|
||||
Artisan::call('snipeit:sync-asset-locations', ['--output' => 'all']);
|
||||
$output = Artisan::output();
|
||||
\Log::info($output);
|
||||
|
||||
Model::reguard();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,8 @@ MAIL_PASSWORD=${MAIL_ENV_PASSWORD}
|
||||
MAIL_ENCRYPTION=${MAIL_ENV_ENCRYPTION}
|
||||
MAIL_FROM_ADDR=${MAIL_ENV_FROM_ADDR}
|
||||
MAIL_FROM_NAME=${MAIL_ENV_FROM_NAME}
|
||||
MAIL_REPLYTO_ADDR=${MAIL_ENV_FROM_ADDR}
|
||||
MAIL_REPLYTO_NAME=${MAIL_ENV_FROM_NAME}
|
||||
|
||||
|
||||
# --------------------------------------------
|
||||
|
||||
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -8,7 +8,7 @@
|
||||
"/css/app.css.map": "/css/app.css.map?id=bdbe05e6ecd70ccfac72",
|
||||
"/css/overrides.css.map": "/css/overrides.css.map?id=898c91d4a425b01b589b",
|
||||
"/css/dist/all.css": "/css/dist/all.css?id=7c3842d2639193ac7e88",
|
||||
"/js/dist/all.js": "/js/dist/all.js?id=0d558c3ed637f4c81a77",
|
||||
"/js/dist/all.js": "/js/dist/all.js?id=7b52ead3a55086ea1f8d",
|
||||
"/css/build/all.css": "/css/build/all.css?id=7c3842d2639193ac7e88",
|
||||
"/js/build/all.js": "/js/build/all.js?id=0d558c3ed637f4c81a77"
|
||||
"/js/build/all.js": "/js/build/all.js?id=7b52ead3a55086ea1f8d"
|
||||
}
|
||||
@@ -255,8 +255,40 @@ $(document).ready(function () {
|
||||
return datalist.text;
|
||||
}
|
||||
|
||||
// This handles the radio button selectors for the checkout-to-foo options
|
||||
// on asset checkout and also on asset edit
|
||||
$(function() {
|
||||
$('input[name=checkout_to_type]').on("change",function () {
|
||||
var assignto_type = $('input[name=checkout_to_type]:checked').val();
|
||||
var userid = $('#assigned_user option:selected').val();
|
||||
|
||||
if (assignto_type == 'asset') {
|
||||
$('#current_assets_box').fadeOut();
|
||||
$('#assigned_asset').show();
|
||||
$('#assigned_user').hide();
|
||||
$('#assigned_location').hide();
|
||||
$('.notification-callout').fadeOut();
|
||||
|
||||
} else if (assignto_type == 'location') {
|
||||
$('#current_assets_box').fadeOut();
|
||||
$('#assigned_asset').hide();
|
||||
$('#assigned_user').hide();
|
||||
$('#assigned_location').show();
|
||||
$('.notification-callout').fadeOut();
|
||||
} else {
|
||||
|
||||
$('#assigned_asset').hide();
|
||||
$('#assigned_user').show();
|
||||
$('#assigned_location').hide();
|
||||
if (userid) {
|
||||
$('#current_assets_box').fadeIn();
|
||||
}
|
||||
$('.notification-callout').fadeIn();
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'element',
|
||||
'field_format' => 'formaat',
|
||||
'field_custom_format' => 'Gepasmaakte formaat',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'vereis',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Gebruik deur modelle',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Die gekose: attribuut is ongeldig.',
|
||||
'numeric' => 'Die: Attribuut moet \'n nommer wees.',
|
||||
'present' => 'Die: attribuut veld moet teenwoordig wees.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Die: Attribuutformaat is ongeldig.',
|
||||
'required' => 'Die: attribuut veld is nodig.',
|
||||
'required_if' => 'Die: attribuut veld is nodig wanneer: ander is: waarde.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'عنصر',
|
||||
'field_format' => 'صيغة',
|
||||
'field_custom_format' => 'صيغة مخصصة',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'مطلوب',
|
||||
'req' => 'مطلوب',
|
||||
'used_by_models' => 'مستخدم في الموديلات',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'السمة المحددة: غير صالحة.',
|
||||
'numeric' => 'يجب أن تكون السمة رقم.',
|
||||
'present' => 'يجب أن يكون حقل السمة موجود.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'تنسيق السمة: غير صالح.',
|
||||
'required' => 'حقل السمة: مطلوب.',
|
||||
'required_if' => 'حقل السمة: مطلوب عند: أوثر إس: فالو.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Елемент',
|
||||
'field_format' => 'Формат',
|
||||
'field_custom_format' => 'Персонализиран формат',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Задължителен',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Използвани от модели ',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Избраният :attribute е невалиден.',
|
||||
'numeric' => ':attribute трябва да бъде число.',
|
||||
'present' => 'Полето на атрибута трябва да е налице.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Форматът на :attribute е невалиден.',
|
||||
'required' => 'Полето :attribute е задължително.',
|
||||
'required_if' => 'Полето :attribute е задължително, когато :other е :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Typ',
|
||||
'field_format' => 'Formát',
|
||||
'field_custom_format' => 'Vlastní formát',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Povinné',
|
||||
'req' => 'Pov.',
|
||||
'used_by_models' => 'Užito u modelů',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Zvolený :attribute je neplatný.',
|
||||
'numeric' => ':attribute musí být číslo.',
|
||||
'present' => 'Pole atributu musí být přítomno.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Formát :attribute je neplatný.',
|
||||
'required' => 'Pole :attribute je požadováno.',
|
||||
'required_if' => 'Položka :attribute je vyžadována, když :other je :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Element',
|
||||
'field_format' => 'Format',
|
||||
'field_custom_format' => 'Brugerdefineret Format',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Påkrævet',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Bruges af modeller',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Den valgte :attribute er ugyldig.',
|
||||
'numeric' => ':attribute skal være et tal.',
|
||||
'present' => 'Attributfeltet skal være til stede.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => ':attribute formatet er ugyldigt.',
|
||||
'required' => ':attribute feltet er krævet.',
|
||||
'required_if' => ':attribute feltet er krævet når :other er :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Element',
|
||||
'field_format' => 'Format',
|
||||
'field_custom_format' => 'Benutzerdefiniertes Format',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Erforderlich',
|
||||
'req' => 'Erf.',
|
||||
'used_by_models' => 'Von Modellen benutzt',
|
||||
|
||||
@@ -63,7 +63,7 @@ return array(
|
||||
'success' => 'Asset wurde erfolgreich herausgegeben.',
|
||||
'user_does_not_exist' => 'Dieser Benutzer existiert nicht. Bitte versuchen Sie es erneut.',
|
||||
'not_available' => 'Dieses Asset kann nicht herausgegeben werden!',
|
||||
'no_assets_selected' => 'You must select at least one asset from the list'
|
||||
'no_assets_selected' => 'Mind. 1 Eintrag muss ausgewählt werden'
|
||||
),
|
||||
|
||||
'checkin' => array(
|
||||
|
||||
@@ -23,8 +23,8 @@ return array(
|
||||
'confirm_purge_help' => 'Geben Sie das Wort "DELETE" in das untere Feld ein um die gelöschten Einträge zu bereinigen. Dies kann nicht rückgängig gemacht werden.',
|
||||
'custom_css' => 'Eigenes CSS',
|
||||
'custom_css_help' => 'Füge eigenes CSS hinzu. Benutze keine <style></style> tags.',
|
||||
'custom_forgot_pass_url' => 'Custom Password Reset URL',
|
||||
'custom_forgot_pass_url_help' => 'This replaces the built-in forgotten password URL on the login screen, useful to direct people to internal or hosted LDAP password reset functionality. It will effectively disable local user forgotten password functionality.',
|
||||
'custom_forgot_pass_url' => 'Benutzerdefinierte Passwort Reset URL',
|
||||
'custom_forgot_pass_url_help' => 'Dadurch wird die integrierte URL für vergessene Passwörter auf dem Anmeldebildschirm ersetzt. Dies ist nützlich, um Benutzer zur internen oder gehosteten Funktion zum Zurücksetzen von LDAP-Passwörtern zu leiten. Es wird effektiv die Funktionalität des lokalen, vergessenen Passworts deaktiviert.',
|
||||
'default_currency' => 'Standardwährung',
|
||||
'default_eula_text' => 'Standard EULA',
|
||||
'default_language' => 'Standardsprache',
|
||||
@@ -46,8 +46,8 @@ return array(
|
||||
'ldap_enabled' => 'LDAP aktiviert',
|
||||
'ldap_integration' => 'LDAP Integration',
|
||||
'ldap_settings' => 'LDAP Einstellungen',
|
||||
'ldap_login_test_help' => 'Enter a valid LDAP username and password from the base DN you specified above to test whether your LDAP login is configured correctly. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
|
||||
'ldap_login_sync_help' => 'This only tests that LDAP can sync correctly. If your LDAP Authentication query is not correct, users may still not be able to login. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
|
||||
'ldap_login_test_help' => 'Geben Sie einen gültigen LDAP-Benutzernamen und ein Passwort von der oben angegebenen Basis-DN ein, um zu testen, ob Ihre LDAP-Anmeldung korrekt konfiguriert ist. SIE MÜSSEN IHRE AKTUALISIERTEN LDAP-EINSTELLUNGEN ZUERST SPEICHERN.',
|
||||
'ldap_login_sync_help' => 'Dies testet nur, ob LDAP korrekt synchronisiert werden kann. Wenn Ihre LDAP-Authentifizierungsabfrage nicht korrekt ist, können sich Benutzer möglicherweise nicht anmelden. SIE MÜSSEN IHRE AKTUALISIERTEN LDAP-EINSTELLUNGEN ZUERST SPEICHERN.',
|
||||
'ldap_server' => 'LDAP Server',
|
||||
'ldap_server_help' => 'Sollte mit ldap:// (für unencrypted oder TLS) oder ldaps:// (für SSL) starten',
|
||||
'ldap_server_cert' => 'LDAP SSL Zertifikatsüberprüfung',
|
||||
|
||||
@@ -19,9 +19,9 @@ return array(
|
||||
'confirm' => 'Sind Sie sicher, dass Sie diesen Lieferanten löschen möchten?',
|
||||
'error' => 'Beim löschen des Lieferanten ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.',
|
||||
'success' => 'Lieferant wurde erfolgreich gelöscht.',
|
||||
'assoc_assets' => 'This supplier is currently associated with :asset_count asset(s) and cannot be deleted. Please update your assets to no longer reference this supplier and try again. ',
|
||||
'assoc_licenses' => 'This supplier is currently associated with :licenses_count licences(s) and cannot be deleted. Please update your licenses to no longer reference this supplier and try again. ',
|
||||
'assoc_maintenances' => 'This supplier is currently associated with :asset_maintenances_count asset maintenances(s) and cannot be deleted. Please update your asset maintenances to no longer reference this supplier and try again. ',
|
||||
'assoc_assets' => 'Dieser Lieferant ist derzeit :asset_count Asset(s) zugeordnet und kann nicht gelöscht werden. Bitte aktualisieren Sie Ihre Assets so, dass sie nicht mehr auf diesen Lieferant verweisen und versuchen Sie es erneut. ',
|
||||
'assoc_licenses' => 'Dieser Lieferant ist derzeit mit :licenses_count Lizenze(n) verknüpft und kann nicht gelöscht werden. Bitte aktualisieren Sie Ihre Lizenzen so, dass sie nicht mehr auf diesen Lieferant verweisen und versuchen Sie es erneut. ',
|
||||
'assoc_maintenances' => 'Diese Lieferant ist derzeit mindestens einem Modell zugeordnet und kann nicht gelöscht werden. Bitte aktualisieren Sie Ihre Modelle, um nicht mehr auf diesen Lieferant zu verweisen und versuchen Sie es erneut. ',
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
'checkout' => 'Checkout Asset to User',
|
||||
'city' => 'Stadt',
|
||||
'click_here' => 'Hier klicken',
|
||||
'clear_selection' => 'Clear Selection',
|
||||
'clear_selection' => 'Auswahl löschen',
|
||||
'companies' => 'Firmen',
|
||||
'company' => 'Firma',
|
||||
'component' => 'Komponente',
|
||||
@@ -90,7 +90,7 @@
|
||||
'history' => 'Historie',
|
||||
'history_for' => 'Verlauf für',
|
||||
'id' => 'Id',
|
||||
'image' => 'Image',
|
||||
'image' => 'Abbildung',
|
||||
'image_delete' => 'Bild löschen',
|
||||
'image_upload' => 'Bild hinzufügen',
|
||||
'import' => 'Import',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Auswahl :attribute ist ungültig.',
|
||||
'numeric' => ':attribute muss eine Zahl sein.',
|
||||
'present' => 'Das Attributfeld muss vorhanden sein.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => ':attribute Format ungültig.',
|
||||
'required' => ':attribute Feld muss ausgefüllt sein.',
|
||||
'required_if' => ':attribute wird benötigt wenn :other :value entspricht.',
|
||||
@@ -87,7 +88,7 @@ return array(
|
||||
'unique' => ':attribute schon benutzt.',
|
||||
'uploaded' => ':attribute konnte nicht hochgeladen werden.',
|
||||
'url' => ':attribute Format ist ungültig.',
|
||||
"unique_undeleted" => "The :attribute must be unique.",
|
||||
"unique_undeleted" => "Die Variable :attribute muss eindeutig sein.",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Στοιχείο',
|
||||
'field_format' => 'Τύπος',
|
||||
'field_custom_format' => 'Προσαρμοσμένος τύπος',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Απαιτείται',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Χρησιμοποιήθηκε από τα μοντέλα',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Το επιλεγμένο: χαρακτηριστικό δεν είναι έγκυρο.',
|
||||
'numeric' => 'Το χαρακτηριστικό πρέπει να είναι ένας αριθμός.',
|
||||
'present' => 'Πρέπει να υπάρχει το πεδίο ιδιοτήτων: attribute.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Η μορφή του χαρακτηριστικού είναι μη έγκυρη.',
|
||||
'required' => 'Το πεδίο ιδιοτήτων: απαιτείται.',
|
||||
'required_if' => 'Το πεδίο ιδιοτήτων: απαιτείται όταν: το άλλο είναι: τιμή.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Element',
|
||||
'field_format' => 'Format',
|
||||
'field_custom_format' => 'Custom Format',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Required',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Used By Models',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Element',
|
||||
'field_format' => 'Format',
|
||||
'field_custom_format' => 'Custom Format',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Required',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Used By Models',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Elemento',
|
||||
'field_format' => 'Formato',
|
||||
'field_custom_format' => 'Formato personalizado',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Obligatorio',
|
||||
'req' => 'Obl.',
|
||||
'used_by_models' => 'Usado Por Modelos',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'El :attribute seleccionado no es correcto.',
|
||||
'numeric' => ':attribute debe ser un número.',
|
||||
'present' => 'El campo: atributo debe estar presente.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => ':attribute formato incorrecto.',
|
||||
'required' => ':attribute es obligatorio.',
|
||||
'required_if' => ':attribute es obligatrio cuando :other es :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Elemento',
|
||||
'field_format' => 'Formato',
|
||||
'field_custom_format' => 'Formato personalizado',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Obligatorio',
|
||||
'req' => 'Obl.',
|
||||
'used_by_models' => 'Usado Por Modelos',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'El :attribute seleccionado no es correcto.',
|
||||
'numeric' => ':attribute debe ser un número.',
|
||||
'present' => 'El campo: atributo debe estar presente.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => ':attribute formato incorrecto.',
|
||||
'required' => ':attribute es obligatorio.',
|
||||
'required_if' => ':attribute es obligatrio cuando :other es :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Element',
|
||||
'field_format' => 'Vorming',
|
||||
'field_custom_format' => 'Kohandatud vorming',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Nõutud',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Kasutatud mudelite järgi',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Valitud atribuut on kehtetu.',
|
||||
'numeric' => 'Atribuut peab olema number.',
|
||||
'present' => 'Atribuudiväli peab olema kohal.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Atribuudivorming on vale.',
|
||||
'required' => 'Atribuudiväljandus on kohustuslik.',
|
||||
'required_if' => 'Atribuudiväljastus on vajalik, kui: muu on: väärtus.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'عنصر',
|
||||
'field_format' => 'شکل دادن',
|
||||
'field_custom_format' => 'شکل دادن سفارشی',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'نیازمندی',
|
||||
'req' => 'نیازمندی',
|
||||
'used_by_models' => 'استفاده شده توسط مدل ها',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'ویژگی انتخاب شده نامعتبر است.',
|
||||
'numeric' => 'ویژگی باید عدد باشد.',
|
||||
'present' => 'فیلد attribute باید باشد.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'شکل ویژگی نامعتبر است.',
|
||||
'required' => 'فیلد ویژگی ضروری است.',
|
||||
'required_if' => 'فیلد ویژگی ضروری است، وقتی که دیگری ارزش است.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'elementti',
|
||||
'field_format' => 'Muoto',
|
||||
'field_custom_format' => 'Mukautettu muoto',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Edellytetään',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Käytetään mallien mukaan',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Valittu :attribute on virheellinen.',
|
||||
'numeric' => ':attribute tulee olla numero.',
|
||||
'present' => 'Attribuutti-kentän on oltava läsnä.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => ':attribute muotoilu on virheellinen.',
|
||||
'required' => ':attribute on vaadittu.',
|
||||
'required_if' => ':attribute on vaadittu kun :other on :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Elément',
|
||||
'field_format' => 'Format',
|
||||
'field_custom_format' => 'Format personnalisé',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Requis',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Utilisé par les modèles',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'L\'attribut ":attribute" est invalide.',
|
||||
'numeric' => 'L\'attribut ":attribute" doit être un nombre.',
|
||||
'present' => 'Le champ d\'attribut: doit être présent.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Le format de l\'attribut ":attribute" est invalide.',
|
||||
'required' => 'Le champs :attribute est nécessaire.',
|
||||
'required_if' => 'Le champ :attribute est nécessaire quand :other vaut :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Eilimint',
|
||||
'field_format' => 'Formáid',
|
||||
'field_custom_format' => 'Formáid Chustaim',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Riachtanach',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Úsáidte trí Mhúnlaí',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'An roghnaithe: tá tréith neamhbhailí.',
|
||||
'numeric' => 'An: Ní mór tréith a bheith ina líon.',
|
||||
'present' => 'Ní mór an réimse tréith a bheith i láthair.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Tá an fhormáid tréithbhail neamhbhailí.',
|
||||
'required' => 'An: Tá réimse tréith ag teastáil.',
|
||||
'required_if' => 'An: Tá réimse tréith ag teastáil nuair: eile é: luach.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'אֵלֵמֶנט',
|
||||
'field_format' => 'פוּרמָט',
|
||||
'field_custom_format' => 'פורמט מותאם אישית',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'נדרש',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'דגמים משומשים',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'התכונה שנבחרה: אינה חוקית.',
|
||||
'numeric' => 'התכונה: חייבת להיות מספר.',
|
||||
'present' => 'שדה התכונה: חייב להיות נוכח.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'תבנית התכונה: אינה חוקית.',
|
||||
'required' => 'שדה התכונה: נדרש.',
|
||||
'required_if' => 'שדה התכונה: נדרש כאשר: other is: value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Element',
|
||||
'field_format' => 'Format',
|
||||
'field_custom_format' => 'Prilagođeni format',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Potreban',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Koristi se po modelu',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Odabrani: atribut nije važeći.',
|
||||
'numeric' => 'Atribut mora biti broj.',
|
||||
'present' => 'Polje atributa mora biti prisutno.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Format atributa nije važeći.',
|
||||
'required' => 'Potrebno je: polje atributa.',
|
||||
'required_if' => 'Polje atributa je obavezno kada: druga vrijednost: vrijednost.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Elem',
|
||||
'field_format' => 'Formátum',
|
||||
'field_custom_format' => 'Egyéni formátum',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Kötelező',
|
||||
'req' => 'Kötelező.',
|
||||
'used_by_models' => 'Modellek szerint ',
|
||||
|
||||
@@ -62,7 +62,7 @@ return array(
|
||||
'success' => 'A készlet sikeresen ki lett állítva.',
|
||||
'user_does_not_exist' => 'Ez a felhasználó érvénytelen. Kérlek próbáld újra.',
|
||||
'not_available' => 'Ez az eszköz nem áll rendelkezésre pénztárnál!',
|
||||
'no_assets_selected' => 'You must select at least one asset from the list'
|
||||
'no_assets_selected' => 'Ki kell választania legalább egy elemet a listából'
|
||||
),
|
||||
|
||||
'checkin' => array(
|
||||
|
||||
@@ -23,8 +23,8 @@ return array(
|
||||
'confirm_purge_help' => 'Az alábbi mezőbe írja be a "DELETE" szöveget a törölt rekordok törléséhez. Ez a művelet nem vonható vissza.',
|
||||
'custom_css' => 'Egyéni CSS',
|
||||
'custom_css_help' => 'Adjon meg olyan egyedi CSS felülírást, amelyet használni szeretne. Ne tüntesse fel a <style></style> címkéket.',
|
||||
'custom_forgot_pass_url' => 'Custom Password Reset URL',
|
||||
'custom_forgot_pass_url_help' => 'This replaces the built-in forgotten password URL on the login screen, useful to direct people to internal or hosted LDAP password reset functionality. It will effectively disable local user forgotten password functionality.',
|
||||
'custom_forgot_pass_url' => 'Egyéni jelszó visszaállítási URL',
|
||||
'custom_forgot_pass_url_help' => 'Ez felváltja a beépített elfelejtett jelszó URL-jét a bejelentkezési képernyőn, amely hasznos lehet arra, hogy az embereket belső vagy hosztolt LDAP jelszó-visszaállítási funkciókra irányítsa. Hatékonyan kikapcsolja a helyi felhasználók elfelejtett jelszavát.',
|
||||
'default_currency' => 'Alapértelmezett pénznem',
|
||||
'default_eula_text' => 'Alapértelmezett EULA',
|
||||
'default_language' => 'Alapértelmezett nyelv',
|
||||
@@ -46,8 +46,8 @@ return array(
|
||||
'ldap_enabled' => 'LDAP bekapcsolva',
|
||||
'ldap_integration' => 'LDAP integráció',
|
||||
'ldap_settings' => 'LDAP beállítások',
|
||||
'ldap_login_test_help' => 'Enter a valid LDAP username and password from the base DN you specified above to test whether your LDAP login is configured correctly. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
|
||||
'ldap_login_sync_help' => 'This only tests that LDAP can sync correctly. If your LDAP Authentication query is not correct, users may still not be able to login. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
|
||||
'ldap_login_test_help' => 'Adjon meg egy érvényes LDAP felhasználónevet és jelszót a fenti alapszintű DN-ből, hogy ellenőrizze, hogy az LDAP-bejelentkezés megfelelően van-e beállítva. EL KELL MENTENIE A MÓDOSÍTOTT LDAP BEÁLLÍTÁSOKAT ELŐBB.',
|
||||
'ldap_login_sync_help' => 'Ez csak azt teszteli, hogy az LDAP helyesen szinkronizálható. Ha az LDAP hitelesítési lekérdezése nem megfelelő, a felhasználók még mindig nem tudnak bejelentkezni. EL KELL MENTENIE A MÓDOSÍTOTT LDAP BEÁLLÍTÁSOKAT ELŐBB.',
|
||||
'ldap_server' => 'LDAP szerver',
|
||||
'ldap_server_help' => 'Ezt az ldap: // (titkosítatlan vagy TLS) vagy az ldaps:',
|
||||
'ldap_server_cert' => 'LDAP SSL tanúsítvány érvényesítés',
|
||||
|
||||
@@ -19,9 +19,9 @@ return array(
|
||||
'confirm' => 'Biztosan törölni szeretné ezt a szállítót?',
|
||||
'error' => 'A szállító törlését okozta. Kérlek próbáld újra.',
|
||||
'success' => 'A szállító sikeresen törölve lett.',
|
||||
'assoc_assets' => 'This supplier is currently associated with :asset_count asset(s) and cannot be deleted. Please update your assets to no longer reference this supplier and try again. ',
|
||||
'assoc_licenses' => 'This supplier is currently associated with :licenses_count licences(s) and cannot be deleted. Please update your licenses to no longer reference this supplier and try again. ',
|
||||
'assoc_maintenances' => 'This supplier is currently associated with :asset_maintenances_count asset maintenances(s) and cannot be deleted. Please update your asset maintenances to no longer reference this supplier and try again. ',
|
||||
'assoc_assets' => 'Ez a beszállító jelenleg :asset_count eszközhöz van társítva és nem törölhető. Kérem frissítse az eszközeit hogy ne hivatkozzon erre a beszállítóra és próbálja újra. ',
|
||||
'assoc_licenses' => 'Ez a beszállító jelenleg :asset_count licenszhez van társítva és nem törölhető. Kérem frissítse az licenszeit hogy ne hivatkozzonak erre a beszállítóra és próbálja újra. ',
|
||||
'assoc_maintenances' => 'Ez a beszállító jelenleg :asset_maintenances_count eszköz karbantartáshoz van társítva és nem törölhető. Kérem frissítse az eszköz karbantartásait hogy ne hivatkozzon erre a beszállítóra és próbálja újra. ',
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'A kiválasztott :attribute étvénytelen.',
|
||||
'numeric' => 'A :attribute csak szám lehet.',
|
||||
'present' => 'A: attribútum mezőnek jelen kell lennie.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Az :attribute formátuma érvénytelen.',
|
||||
'required' => 'A :attribute mező kötelező.',
|
||||
'required_if' => 'A :attribute mező kötelező ha :other egy :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Elemen',
|
||||
'field_format' => 'Format',
|
||||
'field_custom_format' => 'Format Ubahan',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Harus diisi',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Digunakan oleh Model',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => ':attribute yang di pilih tidak benar.',
|
||||
'numeric' => ':attribute harus dalam angka.',
|
||||
'present' => 'Bidang atribut: harus ada.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Format :attribute tidak benar.',
|
||||
'required' => 'Kolom :attribute wajib di-isi.',
|
||||
'required_if' => 'Kolom :attribute wajib di-isi ketika :other nya :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Elemento',
|
||||
'field_format' => 'Formato',
|
||||
'field_custom_format' => 'Formato personalizzato',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Obbligatorio',
|
||||
'req' => 'Obbl.',
|
||||
'used_by_models' => 'Usato dai Modelli',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'L\' :attribute selezionato è invalido.',
|
||||
'numeric' => 'L\' :attribute deve essere un numero.',
|
||||
'present' => 'Il campo attributo deve essere presente.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Il formato dell\' :attribute è invalido.',
|
||||
'required' => 'Il campo :attribute è obblogatorio.',
|
||||
'required_if' => 'L\' :attribute è richiesto quando :other è :value.',
|
||||
|
||||
@@ -21,6 +21,7 @@ return array(
|
||||
'field_element_short' => 'エレメント',
|
||||
'field_format' => 'フォーマット',
|
||||
'field_custom_format' => 'カスタム形式:',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => '必須',
|
||||
'req' => '必須',
|
||||
'used_by_models' => '型番で使用',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => '選択された :attribute は不正です。',
|
||||
'numeric' => ':attribute は数字にして下さい。',
|
||||
'present' => ':attribute フィールドは必須です。',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => ':attribute フォーマットが不正です。',
|
||||
'required' => ':attribute フィールドは、必須です。',
|
||||
'required_if' => ':other が :value の時、:attribute フィールドは必須です。',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => '성분',
|
||||
'field_format' => '형식',
|
||||
'field_custom_format' => '사용자 형식',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => '필수사항',
|
||||
'req' => '필수',
|
||||
'used_by_models' => '적용 모델',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => '선택한 :attribute 가 부정확 합니다.',
|
||||
'numeric' => ':attribute 는 숫자만 가능합니다.',
|
||||
'present' => ':attribute 항목이 있어야 합니다.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => ':attribute 형식이 부정확 합니다.',
|
||||
'required' => ':attribute 항목을 입력해 주세요.',
|
||||
'required_if' => ':attribute 항목은 :other가 :value 일때 필요합니다.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Elementas',
|
||||
'field_format' => 'Formatas',
|
||||
'field_custom_format' => 'Pritaikomas formatas',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Privalomas',
|
||||
'req' => 'Privaloma.',
|
||||
'used_by_models' => 'Naudojama modelių',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Pasirinktas :attribute neteisingas.',
|
||||
'numeric' => ':attribute privalo būti skaičius.',
|
||||
'present' => 'Atributo laukas turi būti.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => ':attribute formatas neteisingas.',
|
||||
'required' => ':attribute laukelis privalomas.',
|
||||
'required_if' => ':attribute laukelis yra privalomas kai :other yra :value.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Elements',
|
||||
'field_format' => 'Formāts',
|
||||
'field_custom_format' => 'Pielāgotais formāts',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Obligāts',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Izmantoti modeļi',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Atlasītais: atribūts nav derīgs.',
|
||||
'numeric' => 'Atribūts ir jābūt skaitlim.',
|
||||
'present' => 'Atribūta laukam jābūt klāt.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Atribūta formāts nav derīgs.',
|
||||
'required' => 'Atribūta lauks ir nepieciešams.',
|
||||
'required_if' => 'Atribūta lauks ir nepieciešams, ja: cits ir: vērtība.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Tuhinga',
|
||||
'field_format' => 'Whakahōputu',
|
||||
'field_custom_format' => 'Whakaritenga Ritenga',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'E hiahiatia ana',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Kua Whakamahia Ma Nga Tauira',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Ko te mea i tīpakohia: he muhu te huanga.',
|
||||
'numeric' => 'Ko te: me tohu he huanga.',
|
||||
'present' => 'Ko te: ko te waahi tohu kia noho.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Ko te: ko te hōputu huanga he muhu.',
|
||||
'required' => 'Ko te: e hiahiatia ana te waahi huanga.',
|
||||
'required_if' => 'Ko te: ka hiahiatia te waahi huanga ina: ko etahi atu: te uara.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Бүрэлдэхүүн',
|
||||
'field_format' => 'Формат',
|
||||
'field_custom_format' => 'Гаалийн формат',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Шаардлагатай',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Загвар ашиглана',
|
||||
|
||||
@@ -67,6 +67,7 @@ return array(
|
||||
'not_in' => 'Сонгосон: шинж чанар буруу байна.',
|
||||
'numeric' => 'Үүнд: атрибут нь тоо байх ёстой.',
|
||||
'present' => 'Үүнд: атрибутын талбар байх ёстой.',
|
||||
'valid_regex' => 'That is not a valid regex. ',
|
||||
'regex' => 'Агуулга формат буруу байна.',
|
||||
'required' => 'Үүнд: атрибутын талбар шаардлагатай.',
|
||||
'required_if' => 'Үүнд: аттрибутын талбар шаардлагатай үед: бусад нь: утга.',
|
||||
|
||||
@@ -20,6 +20,7 @@ return array(
|
||||
'field_element_short' => 'Elemen',
|
||||
'field_format' => 'Format',
|
||||
'field_custom_format' => 'Format Tersuai',
|
||||
'field_custom_format_help' => 'This field allows you to use a regex expression for validation. It should start with "regex:" - for example, to validate that a custom field value contains a valid IMEI (15 numeric digits), you would use <code>regex:/^[0-9]{15}$/</code>.',
|
||||
'required' => 'Diperlukan',
|
||||
'req' => 'Req.',
|
||||
'used_by_models' => 'Digunakan Oleh Model',
|
||||
|
||||
@@ -62,7 +62,7 @@ return array(
|
||||
'success' => 'Harta berjaya diagihkan.',
|
||||
'user_does_not_exist' => 'Pengguna tak sah. Sila cuba lagi.',
|
||||
'not_available' => 'Aset itu tidak tersedia untuk checkout!',
|
||||
'no_assets_selected' => 'You must select at least one asset from the list'
|
||||
'no_assets_selected' => 'Anda mesti memilih sekurang-kurangnya satu aset dari senarai'
|
||||
),
|
||||
|
||||
'checkin' => array(
|
||||
|
||||
@@ -23,8 +23,8 @@ return array(
|
||||
'confirm_purge_help' => 'Masukkan teks "DELETE" dalam kotak di bawah untuk membersihkan rekod anda yang dihapuskan. Tindakan ini tidak dapat dibatalkan.',
|
||||
'custom_css' => 'CSS tersuai',
|
||||
'custom_css_help' => 'Masukkan mana-mana CSS ubah khas yang anda mahu gunakan. Jangan masukkan tag <style></style>.',
|
||||
'custom_forgot_pass_url' => 'Custom Password Reset URL',
|
||||
'custom_forgot_pass_url_help' => 'This replaces the built-in forgotten password URL on the login screen, useful to direct people to internal or hosted LDAP password reset functionality. It will effectively disable local user forgotten password functionality.',
|
||||
'custom_forgot_pass_url' => 'URL Khas untuk Penetapan Semula Kata Laluan',
|
||||
'custom_forgot_pass_url_help' => 'Ini menggantikan URL terlupa kata laluan terbina pada skrin log masuk, berguna untuk mengarahkan pengguna ke fungsi semula kata laluan LDAP dalaman atau dihoskan. Ia secara langsung akan melumpuhkan fungsi kata laluan terlupa pengguna tempatan.',
|
||||
'default_currency' => 'Mata Wang Default',
|
||||
'default_eula_text' => 'EULA lalai',
|
||||
'default_language' => 'Bahasa Lalai',
|
||||
@@ -46,8 +46,8 @@ return array(
|
||||
'ldap_enabled' => 'LDAP diaktifkan',
|
||||
'ldap_integration' => 'Integrasi LDAP',
|
||||
'ldap_settings' => 'Tetapan LDAP',
|
||||
'ldap_login_test_help' => 'Enter a valid LDAP username and password from the base DN you specified above to test whether your LDAP login is configured correctly. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
|
||||
'ldap_login_sync_help' => 'This only tests that LDAP can sync correctly. If your LDAP Authentication query is not correct, users may still not be able to login. YOU MUST SAVE YOUR UPDATED LDAP SETTINGS FIRST.',
|
||||
'ldap_login_test_help' => 'Masukkan nama pengguna dan kata laluan LDAP yang sah dari pangkalan DN yang anda tentukan di atas untuk menguji sama ada log masuk LDAP anda dikonfigurasi dengan betul. ANDA MESTI SIMPAN KONFIGURASI LDAP TERKINI DAHULU.',
|
||||
'ldap_login_sync_help' => 'Ini hanya ujian bahawa LDAP boleh diselaraskan dengan betul. Jika pertanyaan Pengesahan LDAP anda tidak betul, pengguna mungkin masih tidak boleh log masuk. ANDA MESTI SIMPAN KONFIGURASI LDAP TERKINI DAHULU.',
|
||||
'ldap_server' => 'Pelayan LDAP',
|
||||
'ldap_server_help' => 'Ini harus bermula dengan ldap: // (untuk tidak disulitkan atau TLS) atau ldaps: // (untuk SSL)',
|
||||
'ldap_server_cert' => 'Pengesahan sijil LDAP SSL',
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user