Compare commits
118 Commits
v3.0-alpha
...
v3.0.0-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ced24b127 | ||
|
|
fd32f6d4d5 | ||
|
|
c5d96812f3 | ||
|
|
6de6052185 | ||
|
|
402c955f1c | ||
|
|
2f8cbe4ac2 | ||
|
|
95f94c1cfb | ||
|
|
485fb26393 | ||
|
|
9551c07528 | ||
|
|
2d5a0deb31 | ||
|
|
7d2ea36997 | ||
|
|
97691726f0 | ||
|
|
dce549cc5c | ||
|
|
049e13e365 | ||
|
|
dddb0f7267 | ||
|
|
5de6b8e016 | ||
|
|
a3e9b3df86 | ||
|
|
89e656e709 | ||
|
|
5f5fddb7a4 | ||
|
|
46d3a784a2 | ||
|
|
4998b5ab1b | ||
|
|
368bb77cf0 | ||
|
|
37b416d5c7 | ||
|
|
c7e695d3fe | ||
|
|
a152b0ae54 | ||
|
|
9c77de6473 | ||
|
|
71ca17649c | ||
|
|
41f3d5ccbc | ||
|
|
e32d5490d3 | ||
|
|
d85d3b14f7 | ||
|
|
1daa6abf48 | ||
|
|
5d206f2c20 | ||
|
|
2ff1ee4d33 | ||
|
|
04610e7864 | ||
|
|
da01591ab8 | ||
|
|
cffa76e627 | ||
|
|
9c4cd9c3ce | ||
|
|
eacf70ee3f | ||
|
|
33a35ec7f5 | ||
|
|
e0c07d8921 | ||
|
|
99f6207a69 | ||
|
|
d786be4fc0 | ||
|
|
8a7a659a87 | ||
|
|
f3c6275f8d | ||
|
|
0a2fb2ace7 | ||
|
|
1c1ef951e9 | ||
|
|
45d3d90c94 | ||
|
|
a9870db83f | ||
|
|
697ed0d53c | ||
|
|
3ddaa88694 | ||
|
|
b3454b1c24 | ||
|
|
fcc79456fd | ||
|
|
11c400f12b | ||
|
|
823273f565 | ||
|
|
a542b18a04 | ||
|
|
f2a5337ad2 | ||
|
|
4af5cdd64f | ||
|
|
0fa82743a1 | ||
|
|
45d93ffa8c | ||
|
|
4b98711e07 | ||
|
|
a729038ccd | ||
|
|
e5bd6a8a26 | ||
|
|
5e03fe40a7 | ||
|
|
dab2a50982 | ||
|
|
0e0b31bba6 | ||
|
|
c9d00b1f06 | ||
|
|
9bb258bb99 | ||
|
|
ac10a199ea | ||
|
|
5952181454 | ||
|
|
0da1e186d7 | ||
|
|
d92de14413 | ||
|
|
004c63cd5d | ||
|
|
715e385925 | ||
|
|
891c37b2ed | ||
|
|
e353df588f | ||
|
|
fd0d04eba4 | ||
|
|
22c6f32e92 | ||
|
|
04428d2d07 | ||
|
|
c89f357e4a | ||
|
|
8a968b4dfb | ||
|
|
9aff515c0a | ||
|
|
5f91329397 | ||
|
|
37be587c39 | ||
|
|
0c33575962 | ||
|
|
84edc9cf25 | ||
|
|
14dac9b371 | ||
|
|
8e18d02f7a | ||
|
|
d0ebdd03bd | ||
|
|
bfc3f69adb | ||
|
|
cde0d49e18 | ||
|
|
abf027059f | ||
|
|
4edc2a7a66 | ||
|
|
3b838ca867 | ||
|
|
8b023adba3 | ||
|
|
293b8c0dea | ||
|
|
d6dc57286f | ||
|
|
52b61c9d49 | ||
|
|
780c0e678d | ||
|
|
5bceb5ce52 | ||
|
|
de5e1ca86b | ||
|
|
6c6e65b8ca | ||
|
|
64d818e56e | ||
|
|
d6715914e1 | ||
|
|
f10b3b7cdb | ||
|
|
f844bf4b41 | ||
|
|
6e006a6873 | ||
|
|
cb91829729 | ||
|
|
fb35e40342 | ||
|
|
b796e72faf | ||
|
|
c56ceebb40 | ||
|
|
78fc6dec3c | ||
|
|
7fd6051514 | ||
|
|
072923826d | ||
|
|
c52e3b5f9c | ||
|
|
f6cdd90e41 | ||
|
|
975b266cb0 | ||
|
|
aad1ba4ab3 | ||
|
|
6b5d0a5abf |
@@ -5,7 +5,7 @@ APP_ENV=production
|
||||
APP_DEBUG=false
|
||||
APP_KEY=ChangeMe
|
||||
APP_URL=null
|
||||
APP_TIMEZONE='US/Pacific'
|
||||
APP_TIMEZONE='UTC'
|
||||
APP_LOCALE=en
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ DB_DATABASE=null
|
||||
DB_USERNAME=null
|
||||
DB_PASSWORD=null
|
||||
DB_PREFIX=null
|
||||
DB_DUMP_PATH='/usr/local/bin'
|
||||
DB_DUMP_PATH='/usr/bin'
|
||||
|
||||
# --------------------------------------------
|
||||
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
|
||||
|
||||
12
README.md
12
README.md
@@ -19,10 +19,10 @@ __This is web-based software__. This means there there is no executable file (ak
|
||||
|
||||
### Installation
|
||||
|
||||
__Installation and configuration documentation for this project has been moved to http://docs.snipeitapp.com.__
|
||||
__Installation and configuration documentation for this project has been moved to https://snipe-it.readme.io.__
|
||||
|
||||
#### Server Requirements
|
||||
Please see the [requirements documentation](http://docs.snipeitapp.com/requirements.html) for full requirements.
|
||||
Please see the [requirements documentation](https://snipe-it.readme.io/docs/requirements) for full requirements.
|
||||
|
||||
-----
|
||||
### Bug Reports & Feature Requests
|
||||
@@ -31,13 +31,13 @@ Feel free to check out the [GitHub Issues for this project](https://github.com/s
|
||||
|
||||
We use Waffle.io to help better communicate our roadmap with users. Our [project page there](http://waffle.io/snipe/snipe-it) will show you the backlog, what's ready to be worked on, what's in progress, and what's completed.
|
||||
|
||||
If you're having trouble with the installation, please check the [Common Issues](http://docs.snipeitapp.com/common-issues.html) and [Getting Help](http://docs.snipeitapp.com/getting-help.html) documentation.
|
||||
If you're having trouble with the installation, please check the [Common Issues](https://snipe-it.readme.io/docs/common-issues) and [Getting Help](https://snipe-it.readme.io/docs/getting-help) documentation.
|
||||
|
||||
-----
|
||||
|
||||
### Upgrading
|
||||
|
||||
Please see the [upgrading documentation](http://docs.snipeitapp.com/upgrading.html) for instructions on upgrading Snipe-IT.
|
||||
Please see the [upgrading documentation](https://snipe-it.readme.io/docs/upgrading) for instructions on upgrading Snipe-IT.
|
||||
|
||||
------
|
||||
### Announcement List
|
||||
@@ -48,13 +48,13 @@ To be notified of important news (such as new releases, security advisories, etc
|
||||
|
||||
### Translations!
|
||||
|
||||
Please see the [translations documentation](http://docs.snipeitapp.com/translations.html) for information about available languages and how to add translations to Snipe-IT.
|
||||
Please see the [translations documentation](https://snipe-it.readme.io/docs/translations) for information about available languages and how to add translations to Snipe-IT.
|
||||
|
||||
-----
|
||||
|
||||
### Contributing
|
||||
|
||||
Please see the documentation on [contributing and developing for Snipe-IT](http://docs.snipeitapp.com/contributing.html).
|
||||
Please see the documentation on [contributing and developing for Snipe-IT](https://snipe-it.readme.io/docs/contributing).
|
||||
|
||||
[](http://waffle.io/snipe/snipe-it)
|
||||
|
||||
|
||||
@@ -5,6 +5,10 @@ use Illuminate\Console\Command;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use League\Csv\Reader;
|
||||
use App\Models\User;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\License;
|
||||
use App\Models\LicenseSeat;
|
||||
|
||||
class LicenseImportCommand extends Command {
|
||||
|
||||
@@ -240,26 +244,24 @@ class LicenseImportCommand extends Command {
|
||||
if ($user = User::where('username', $user_username)->whereNotNull('username')->first()) {
|
||||
$this->comment('User '.$user_username.' already exists');
|
||||
} else {
|
||||
// Create the user
|
||||
$user = Sentry::createUser(array(
|
||||
'first_name' => $first_name,
|
||||
'last_name' => $last_name,
|
||||
'email' => $user_email,
|
||||
'username' => $user_username,
|
||||
'password' => substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10),
|
||||
'activated' => true,
|
||||
'permissions' => array(
|
||||
'admin' => 0,
|
||||
'user' => 1,
|
||||
),
|
||||
'notes' => 'User importerd through license importer'
|
||||
));
|
||||
|
||||
// Find the group using the group id
|
||||
$userGroup = Sentry::findGroupById(3);
|
||||
$user = new \App\Models\User;
|
||||
$password = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 20);
|
||||
|
||||
$user->first_name = $first_name;
|
||||
$user->last_name = $last_name;
|
||||
$user->username = $user_username;
|
||||
$user->email = $user_email;
|
||||
$user->permissions = '{user":1}';
|
||||
$user->password = bcrypt($password);
|
||||
$user->activated = 1;
|
||||
if ($user->save()) {
|
||||
$this->comment('User '.$first_name.' created');
|
||||
} else {
|
||||
$this->error('ERROR CREATING User '.$first_name.' '.$last_name);
|
||||
$this->error($user->getErrors());
|
||||
}
|
||||
|
||||
// Assign the group to the user
|
||||
$user->addGroup($userGroup);
|
||||
$this->comment('User '.$first_name.' created');
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -14,6 +14,7 @@ use App\Models\Company;
|
||||
use App\Models\Consumable;
|
||||
use App\Models\Location;
|
||||
use App\Models\Manufacturer;
|
||||
use App\Models\Statuslabel;
|
||||
use App\Models\Supplier;
|
||||
use App\Models\User;
|
||||
use DB;
|
||||
@@ -56,12 +57,16 @@ class ObjectImportCommand extends Command {
|
||||
$filename = $this->argument('filename');
|
||||
|
||||
|
||||
if ($this->option('testrun')) {
|
||||
$this->comment('====== TEST ONLY Asset Import for '.$filename.' ====');
|
||||
$this->comment('============== NO DATA WILL BE WRITTEN ==============');
|
||||
} else {
|
||||
if(!$this->option('web-importer')) {
|
||||
$logFile = $this->option('logfile');
|
||||
\Log::useFiles($logFile);
|
||||
if ($this->option('testrun')) {
|
||||
$this->comment('====== TEST ONLY Asset Import for '.$filename.' ====');
|
||||
$this->comment('============== NO DATA WILL BE WRITTEN ==============');
|
||||
} else {
|
||||
|
||||
$this->comment('======= Importing Assets from '.$filename.' =========');
|
||||
$this->comment('======= Importing Assets from '.$filename.' =========');
|
||||
}
|
||||
}
|
||||
|
||||
if (! ini_get("auto_detect_line_endings")) {
|
||||
@@ -85,12 +90,15 @@ class ObjectImportCommand extends Command {
|
||||
$this->manufacturers = Manufacturer::All(['name', 'id']);
|
||||
$this->asset_models = AssetModel::All(['name','modelno','category_id','manufacturer_id', 'id']);
|
||||
$this->companies = Company::All(['name', 'id']);
|
||||
$this->status_labels = Statuslabel::All(['name', 'id']);
|
||||
$this->suppliers = Supplier::All(['name', 'id']);
|
||||
$this->assets = Asset::all(['asset_tag']);
|
||||
$this->suppliers = Supplier::All(['name']);
|
||||
$this->accessories = Accessory::All(['name']);
|
||||
$this->consumables = Consumable::All(['name']);
|
||||
|
||||
// Loop through the records
|
||||
DB::transaction(function() use (&$newarray){
|
||||
$item_type = strtolower($this->option('item-type'));
|
||||
foreach( $newarray as $row ) {
|
||||
|
||||
// Let's just map some of these entries to more user friendly words
|
||||
@@ -102,11 +110,7 @@ class ObjectImportCommand extends Command {
|
||||
$item_company_name = $this->array_smart_fetch($row, "company");
|
||||
$item_location = $this->array_smart_fetch($row, "location");
|
||||
|
||||
$item["item_type"] = strtolower($this->array_smart_fetch($row, "item type"));
|
||||
if(empty($item["item_type"])) {
|
||||
$this->comment("Item Type not set. Assuming asset");
|
||||
$item["item_type"] = 'asset';
|
||||
}
|
||||
$item_status_name = $this->array_smart_fetch($row, "status");
|
||||
|
||||
$item["item_name"] = $this->array_smart_fetch($row, "item name");
|
||||
$item["purchase_date"] = date("Y-m-d 00:00:01", strtotime($this->array_smart_fetch($row, "purchase date")));
|
||||
@@ -115,23 +119,27 @@ class ObjectImportCommand extends Command {
|
||||
$item["notes"] = $this->array_smart_fetch($row, "notes");
|
||||
$item["quantity"] = $this->array_smart_fetch($row, "quantity");
|
||||
$item["requestable"] = $this->array_smart_fetch($row, "requestable");
|
||||
|
||||
|
||||
|
||||
$this->comment("Item Type: " . $item["item_type"]);
|
||||
$this->comment('Category Name: ' . $item_category);
|
||||
$this->comment('Location: ' . $item_location);
|
||||
$this->comment('Purchase Date: ' . $item["purchase_date"]);
|
||||
$this->comment('Purchase Cost: ' . $item["purchase_cost"]);
|
||||
$this->comment('Company Name: ' . $item_company_name);
|
||||
$this->current_assetId = $item["item_name"];
|
||||
$this->log('Category Name: ' . $item_category);
|
||||
$this->log('Location: ' . $item_location);
|
||||
$this->log('Purchase Date: ' . $item["purchase_date"]);
|
||||
$this->log('Purchase Cost: ' . $item["purchase_cost"]);
|
||||
$this->log('Company Name: ' . $item_company_name);
|
||||
$this->log('Status: ' . $item_status_name);
|
||||
|
||||
$item["user"] = $this->createOrFetchUser($row);
|
||||
|
||||
$item["location"] = $this->createOrFetchLocation($item_location);
|
||||
$item["category"] = $this->createOrFetchCategory($item_category, $item["item_type"]);
|
||||
$item["category"] = $this->createOrFetchCategory($item_category, $item_type);
|
||||
$item["manufacturer"] = $this->createOrFetchManufacturer($row);
|
||||
$item["company"] = $this->createOrFetchCompany($item_company_name);
|
||||
|
||||
switch ($item["item_type"]) {
|
||||
$item["status_label"] = $this->createOrFetchStatusLabel($item_status_name);
|
||||
|
||||
switch ($item_type) {
|
||||
case "asset":
|
||||
$this->createAssetIfNotExists($row, $item);
|
||||
break;
|
||||
@@ -142,13 +150,69 @@ class ObjectImportCommand extends Command {
|
||||
$this->createConsumableIfNotExists($item);
|
||||
break;
|
||||
}
|
||||
$this->comment('------------- Action Summary ----------------');
|
||||
$this->log('------------- Action Summary ----------------');
|
||||
|
||||
}
|
||||
});
|
||||
$this->comment('=====================================');
|
||||
|
||||
return true;
|
||||
$this->log('=====================================');
|
||||
if(!$this->option('web-importer'))
|
||||
{
|
||||
if(!empty($this->errors)) {
|
||||
$this->comment("The following Errors were encountered.");
|
||||
foreach($this->errors as $asset => $error)
|
||||
{
|
||||
$this->comment('Error: Item: ' . $asset . 'failed validation: ' . json_encode($error));
|
||||
}
|
||||
} else {
|
||||
$this->comment("All Items imported successfully!");
|
||||
}
|
||||
} else {
|
||||
if(empty($this->errors))
|
||||
return 0;
|
||||
else {
|
||||
$this->comment(json_encode($this->errors)); //Send a big string to the
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
$this->comment("");
|
||||
|
||||
return 2;
|
||||
}
|
||||
// Tracks the current item for error messages
|
||||
private $current_assetId;
|
||||
|
||||
// An array of errors encountered while parsing
|
||||
private $errors;
|
||||
|
||||
public function jsonError($field, $errorString)
|
||||
{
|
||||
$this->errors[$this->current_assetId] = array($field => $errorString);
|
||||
if($this->option('verbose'))
|
||||
parent::error($errorString);
|
||||
}
|
||||
|
||||
/**
|
||||
* Log a message to file, configurable by the --log-file parameter.
|
||||
* If a warning message is passed, we'll spit it to the console as well.
|
||||
* @param string $string
|
||||
* @param string $level
|
||||
*/
|
||||
private function log($string, $level = 'info')
|
||||
{
|
||||
if($this->option('web-importer'))
|
||||
return;
|
||||
if($level === 'warning')
|
||||
{
|
||||
\Log::warning($string);
|
||||
$this->comment($string);
|
||||
}
|
||||
else {
|
||||
\Log::Info($string);
|
||||
if($this->option('verbose')) {
|
||||
$this->comment($string);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -179,17 +243,17 @@ class ObjectImportCommand extends Command {
|
||||
$asset_model_name='Unknown';
|
||||
if(empty($asset_modelno))
|
||||
$asset_modelno=0;
|
||||
$this->comment('Model Name: ' . $asset_model_name);
|
||||
$this->comment('Model No: ' . $asset_modelno);
|
||||
$this->log('Model Name: ' . $asset_model_name);
|
||||
$this->log('Model No: ' . $asset_modelno);
|
||||
|
||||
|
||||
foreach ($this->asset_models as $tempmodel) {
|
||||
if ($tempmodel->name === $asset_model_name
|
||||
if ((strcasecmp($tempmodel->name, $asset_model_name) == 0)
|
||||
&& $tempmodel->modelno == $asset_modelno
|
||||
&& $tempmodel->category_id == $category->id
|
||||
&& $tempmodel->manufacturer_id == $manufacturer->id )
|
||||
{
|
||||
$this->comment('A matching model ' . $asset_model_name . ' with model number ' . $asset_modelno . ' already exists');
|
||||
$this->log('A matching model ' . $asset_model_name . ' with model number ' . $asset_modelno . ' already exists');
|
||||
return $tempmodel;
|
||||
}
|
||||
}
|
||||
@@ -199,18 +263,19 @@ class ObjectImportCommand extends Command {
|
||||
$asset_model->modelno = $asset_modelno;
|
||||
$asset_model->category_id = $category->id;
|
||||
$asset_model->user_id = 1;
|
||||
$this->asset_models->add($asset_model);
|
||||
|
||||
|
||||
if(!$this->option('testrun')) {
|
||||
if ($asset_model->save()) {
|
||||
$this->comment('Asset Model ' . $asset_model_name . ' with model number ' . $asset_modelno . ' was created');
|
||||
$this->asset_models->add($asset_model);
|
||||
$this->log('Asset Model ' . $asset_model_name . ' with model number ' . $asset_modelno . ' was created');
|
||||
return $asset_model;
|
||||
} else {
|
||||
$this->comment('Something went wrong! Asset Model ' . $asset_model_name . ' was NOT created');
|
||||
dd($asset_model);
|
||||
$this->jsonError('Asset Model', $asset_model->getErrors());
|
||||
return $asset_model;
|
||||
}
|
||||
} else {
|
||||
$this->asset_models->add($asset_model);
|
||||
return $asset_model;
|
||||
}
|
||||
|
||||
@@ -230,8 +295,8 @@ class ObjectImportCommand extends Command {
|
||||
$asset_category = 'Unnamed Category';
|
||||
|
||||
foreach($this->categories as $tempcategory) {
|
||||
if( $tempcategory->name === $asset_category && $tempcategory->category_type === $item_type) {
|
||||
$this->comment('Category ' . $asset_category . ' already exists');
|
||||
if( (strcasecmp($tempcategory->name, $asset_category) == 0) && $tempcategory->category_type === $item_type) {
|
||||
$this->log('Category ' . $asset_category . ' already exists');
|
||||
return $tempcategory;
|
||||
}
|
||||
}
|
||||
@@ -241,18 +306,19 @@ class ObjectImportCommand extends Command {
|
||||
$category->name = $asset_category;
|
||||
$category->category_type = $item_type;
|
||||
$category->user_id = 1;
|
||||
$this->categories->add($category);
|
||||
|
||||
|
||||
if(!$this->option('testrun')) {
|
||||
if ($category->save()) {
|
||||
$this->comment('Category ' . $asset_category . ' was created');
|
||||
$this->categories->add($category);
|
||||
$this->log('Category ' . $asset_category . ' was created');
|
||||
return $category;
|
||||
} else {
|
||||
$this->comment('Something went wrong! Category ' . $asset_category . ' was NOT created');
|
||||
dd($category);
|
||||
return $category;
|
||||
$this->jsonError('Category', $category->getErrors());
|
||||
return $category;
|
||||
}
|
||||
} else {
|
||||
$this->categories->add($category);
|
||||
return $category;
|
||||
}
|
||||
|
||||
@@ -267,30 +333,62 @@ class ObjectImportCommand extends Command {
|
||||
public function createOrFetchCompany($asset_company_name)
|
||||
{
|
||||
foreach ($this->companies as $tempcompany) {
|
||||
if ($tempcompany->name === $asset_company_name) {
|
||||
$this->comment('A matching Company ' . $asset_company_name . ' already exists');
|
||||
if (strcasecmp($tempcompany->name, $asset_company_name) == 0) {
|
||||
$this->log('A matching Company ' . $asset_company_name . ' already exists');
|
||||
return $tempcompany;
|
||||
}
|
||||
}
|
||||
|
||||
$company = new Company();
|
||||
$company->name = $asset_company_name;
|
||||
$this->companies->add($company);
|
||||
|
||||
if(!$this->option('testrun')) {
|
||||
if ($company->save()) {
|
||||
$this->comment('Company ' . $asset_company_name . ' was created');
|
||||
$this->companies->add($company);
|
||||
$this->log('Company ' . $asset_company_name . ' was created');
|
||||
return $company;
|
||||
} else {
|
||||
$this->comment('Something went wrong! Company ' . $asset_company_name . ' was NOT created');
|
||||
return $company;
|
||||
$this->log('Company', $company->getErrors());
|
||||
}
|
||||
} else {
|
||||
$this->companies->add($company);
|
||||
return $company;
|
||||
}
|
||||
}
|
||||
private $status_labels;
|
||||
/**
|
||||
* @param string $asset_statuslabel_name
|
||||
* @return Company
|
||||
*/
|
||||
public function createOrFetchStatusLabel($asset_statuslabel_name)
|
||||
{
|
||||
if(empty($asset_statuslabel_name))
|
||||
return;
|
||||
foreach ($this->status_labels as $tempstatus) {
|
||||
if (strcasecmp($tempstatus->name, $asset_statuslabel_name) == 0 ) {
|
||||
$this->log('A matching Status ' . $asset_statuslabel_name . ' already exists');
|
||||
return $tempstatus;
|
||||
}
|
||||
}
|
||||
$status = new Statuslabel();
|
||||
$status->name = $asset_statuslabel_name;
|
||||
|
||||
|
||||
if(!$this->option('testrun')) {
|
||||
if ($status->save()) {
|
||||
$this->status_labels->add($status);
|
||||
$this->log('Status ' . $asset_statuslabel_name . ' was created');
|
||||
return $status;
|
||||
} else {
|
||||
$this->jsonError('Status', $status->getErrors());
|
||||
return $status;
|
||||
}
|
||||
} else {
|
||||
$this->status_labels->add($status);
|
||||
return $status;
|
||||
}
|
||||
}
|
||||
|
||||
private $manufacturers;
|
||||
|
||||
/**
|
||||
@@ -307,11 +405,11 @@ class ObjectImportCommand extends Command {
|
||||
if(empty($asset_mfgr)) {
|
||||
$asset_mfgr='Unknown';
|
||||
}
|
||||
$this->comment('Manufacturer ID: ' . $asset_mfgr);
|
||||
$this->log('Manufacturer ID: ' . $asset_mfgr);
|
||||
|
||||
foreach ($this->manufacturers as $tempmanufacturer) {
|
||||
if ($tempmanufacturer->name === $asset_mfgr) {
|
||||
$this->comment('Manufacturer ' . $asset_mfgr . ' already exists');
|
||||
if (strcasecmp($tempmanufacturer->name, $asset_mfgr) == 0 ) {
|
||||
$this->log('Manufacturer ' . $asset_mfgr . ' already exists') ;
|
||||
return $tempmanufacturer;
|
||||
}
|
||||
}
|
||||
@@ -321,19 +419,19 @@ class ObjectImportCommand extends Command {
|
||||
$manufacturer = new Manufacturer();
|
||||
$manufacturer->name = $asset_mfgr;
|
||||
$manufacturer->user_id = 1;
|
||||
$this->manufacturers->add($manufacturer);
|
||||
|
||||
if (!$this->option('testrun')) {
|
||||
if ($manufacturer->save()) {
|
||||
$this->comment('Manufacturer ' . $manufacturer->name . ' was created');
|
||||
$this->manufacturers->add($manufacturer);
|
||||
$this->log('Manufacturer ' . $manufacturer->name . ' was created');
|
||||
return $manufacturer;
|
||||
} else {
|
||||
$this->comment('Something went wrong! Manufacturer ' . $asset_mfgr . ' was NOT created');
|
||||
dd($manufacturer);
|
||||
$this->jsonError('Manufacturer', $manufacturer->getErrors());
|
||||
return $manufacturer;
|
||||
}
|
||||
|
||||
} else {
|
||||
$this->manufacturers->add($manufacturer);
|
||||
return $manufacturer;
|
||||
}
|
||||
}
|
||||
@@ -350,8 +448,8 @@ class ObjectImportCommand extends Command {
|
||||
public function createOrFetchLocation($asset_location)
|
||||
{
|
||||
foreach($this->locations as $templocation) {
|
||||
if( $templocation->name === $asset_location ) {
|
||||
$this->comment('Location ' . $asset_location . ' already exists');
|
||||
if( strcasecmp($templocation->name, $asset_location) == 0 ) {
|
||||
$this->log('Location ' . $asset_location . ' already exists');
|
||||
return $templocation;
|
||||
}
|
||||
}
|
||||
@@ -365,22 +463,22 @@ class ObjectImportCommand extends Command {
|
||||
$location->state = '';
|
||||
$location->country = '';
|
||||
$location->user_id = 1;
|
||||
$this->locations->add($location);
|
||||
|
||||
if (!$this->option('testrun')) {
|
||||
if ($location->save()) {
|
||||
$this->comment('Location ' . $asset_location . ' was created');
|
||||
$this->locations->add($location);
|
||||
$this->log('Location ' . $asset_location . ' was created');
|
||||
return $location;
|
||||
} else {
|
||||
$this->comment('Something went wrong! Location ' . $asset_location . ' was NOT created');
|
||||
dd($location);
|
||||
$this->log('Location', $location->getErrors()) ;
|
||||
return $location;
|
||||
}
|
||||
} else {
|
||||
$this->locations->add($location);
|
||||
return $location;
|
||||
}
|
||||
} else {
|
||||
$this->comment('No location given, so none created.');
|
||||
$this->log('No location given, so none created.');
|
||||
return $location;
|
||||
}
|
||||
|
||||
@@ -398,8 +496,8 @@ class ObjectImportCommand extends Command {
|
||||
if(empty($supplier_name))
|
||||
$supplier_name='Unknown';
|
||||
foreach ($this->suppliers as $tempsupplier) {
|
||||
if ($tempsupplier->name === $supplier_name) {
|
||||
$this->comment('A matching Company ' . $supplier_name . ' already exists');
|
||||
if (strcasecmp($tempsupplier->name, $supplier_name) == 0) {
|
||||
$this->log('A matching Company ' . $supplier_name . ' already exists');
|
||||
return $tempsupplier;
|
||||
}
|
||||
}
|
||||
@@ -407,18 +505,18 @@ class ObjectImportCommand extends Command {
|
||||
$supplier = new Supplier();
|
||||
$supplier->name = $supplier_name;
|
||||
$supplier->user_id = 1;
|
||||
$this->suppliers->add($supplier);
|
||||
|
||||
if(!$this->option('testrun')) {
|
||||
if ($supplier->save()) {
|
||||
$this->comment('Supplier ' . $supplier_name . ' was created');
|
||||
$this->suppliers->add($supplier);
|
||||
$this->log('Supplier ' . $supplier_name . ' was created');
|
||||
return $supplier;
|
||||
} else {
|
||||
$this->comment('Something went wrong! Supplier ' . $supplier_name . ' was NOT created');
|
||||
dd($supplier);
|
||||
return $supplier;
|
||||
$this->log('Supplier', $supplier->getErrors());
|
||||
return $supplier;
|
||||
}
|
||||
} else {
|
||||
$this->suppliers->add($supplier);
|
||||
return $supplier;
|
||||
}
|
||||
}
|
||||
@@ -440,14 +538,14 @@ class ObjectImportCommand extends Command {
|
||||
|
||||
// A number was given instead of a name
|
||||
if (is_numeric($user_name)) {
|
||||
$this->comment('User '.$user_name.' is not a name - assume this user already exists');
|
||||
$this->log('User '.$user_name.' is not a name - assume this user already exists');
|
||||
$user_username = '';
|
||||
$first_name = '';
|
||||
$last_name = '';
|
||||
|
||||
// No name was given
|
||||
} elseif (empty($user_name)) {
|
||||
$this->comment('No user data provided - skipping user creation, just adding asset');
|
||||
$this->log('No user data provided - skipping user creation, just adding asset');
|
||||
$first_name = '';
|
||||
$last_name = '';
|
||||
//$user_username = '';
|
||||
@@ -471,13 +569,13 @@ class ObjectImportCommand extends Command {
|
||||
}
|
||||
|
||||
}
|
||||
$this->comment("--- User Data ---");
|
||||
$this->comment('Full Name: ' . $user_name);
|
||||
$this->comment('First Name: ' . $first_name);
|
||||
$this->comment('Last Name: ' . $last_name);
|
||||
$this->comment('Username: ' . $user_username);
|
||||
$this->comment('Email: ' . $user_email);
|
||||
$this->comment('--- End User Data ---');
|
||||
$this->log("--- User Data ---");
|
||||
$this->log('Full Name: ' . $user_name);
|
||||
$this->log('First Name: ' . $first_name);
|
||||
$this->log('Last Name: ' . $last_name);
|
||||
$this->log('Username: ' . $user_username);
|
||||
$this->log('Email: ' . $user_email);
|
||||
$this->log('--- End User Data ---');
|
||||
|
||||
if($this->option('testrun'))
|
||||
return new User;
|
||||
@@ -485,8 +583,9 @@ class ObjectImportCommand extends Command {
|
||||
if (!empty($user_username)) {
|
||||
if ($user = User::MatchEmailOrUsername($user_username, $user_email)
|
||||
->whereNotNull('username')->first()) {
|
||||
$this->comment('User '.$user_username.' already exists');
|
||||
} else {
|
||||
|
||||
$this->log('User '.$user_username.' already exists');
|
||||
} else if(( $first_name != '') && ($last_name != '') && ($user_username != '')) {
|
||||
$user = new \App\Models\User;
|
||||
$password = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 20);
|
||||
|
||||
@@ -497,12 +596,13 @@ class ObjectImportCommand extends Command {
|
||||
$user->password = bcrypt($password);
|
||||
$user->activated = 1;
|
||||
if ($user->save()) {
|
||||
$this->comment('User '.$first_name.' created');
|
||||
$this->log('User '.$first_name.' created');
|
||||
} else {
|
||||
$this->error('ERROR CREATING User '.$first_name.' '.$last_name);
|
||||
$this->error($user->getErrors());
|
||||
$this->jsonError('User', $user->getErrors());
|
||||
}
|
||||
|
||||
} else {
|
||||
$user = new User;
|
||||
}
|
||||
} else {
|
||||
$user = new User;
|
||||
@@ -518,25 +618,39 @@ class ObjectImportCommand extends Command {
|
||||
*/
|
||||
public function createAssetIfNotExists(array $row, array $item )
|
||||
{
|
||||
$status_id = 1;
|
||||
$asset_serial = $this->array_smart_fetch($row, "serial number");
|
||||
$asset_tag = $this->array_smart_fetch($row, "asset tag");
|
||||
$asset_image = $this->array_smart_fetch($row, "image");
|
||||
$asset_warranty_months = intval($this->array_smart_fetch($row, "warranty months"));
|
||||
if(empty($asset_warranty_months)) {
|
||||
$asset_warranty_months = NULL;
|
||||
}
|
||||
// Check for the asset model match and create it if it doesn't exist
|
||||
$asset_model = $this->createOrFetchAssetModel($row, $item["category"], $item["manufacturer"]);
|
||||
$supplier = $this->createOrFetchSupplier($row);
|
||||
|
||||
$this->comment('Serial No: '.$asset_serial);
|
||||
$this->comment('Asset Tag: '.$asset_tag);
|
||||
$this->comment('Notes: '.$item["notes"]);
|
||||
$this->current_assetId = $asset_tag;
|
||||
|
||||
$this->log('Serial No: '.$asset_serial);
|
||||
$this->log('Asset Tag: '.$asset_tag);
|
||||
$this->log('Notes: '.$item["notes"]);
|
||||
|
||||
foreach ($this->assets as $tempasset) {
|
||||
if ($tempasset->asset_tag === $asset_tag ) {
|
||||
$this->comment('A matching Asset ' . $asset_tag . ' already exists');
|
||||
if (strcasecmp($tempasset->asset_tag, $asset_tag ) == 0 ) {
|
||||
$this->log('A matching Asset ' . $asset_tag . ' already exists');
|
||||
// $this->comment('A matching Asset ' . $asset_tag . ' already exists');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if($item["status_label"]) {
|
||||
$status_id = $item["status_label"]->id;
|
||||
|
||||
} else {
|
||||
$this->log("No status field found, defaulting to id 1.");
|
||||
$status_id = 1;
|
||||
}
|
||||
|
||||
$asset = new Asset();
|
||||
$asset->name = $item["item_name"];
|
||||
if ($item["purchase_date"] != '') {
|
||||
@@ -545,32 +659,40 @@ class ObjectImportCommand extends Command {
|
||||
$asset->purchase_date = NULL;
|
||||
}
|
||||
|
||||
if (!empty($item_purchase_cost)) {
|
||||
$asset->purchase_cost = number_format($item["purchase_cost"],2);
|
||||
$this->comment("Asset cost parsed: " . $asset->purchase_cost);
|
||||
if (!empty($item["purchase_cost"])) {
|
||||
//TODO How to generalize this for not USD?
|
||||
$purchase_cost = substr($item["purchase_cost"],0,1) === '$' ? substr($item["purchase_cost"],1) : $item["purchase_cost"];
|
||||
$asset->purchase_cost = number_format($purchase_cost,2);
|
||||
$this->log("Asset cost parsed: " . $asset->purchase_cost);
|
||||
} else {
|
||||
$asset->purchase_cost = 0.00;
|
||||
}
|
||||
$asset->serial = $asset_serial;
|
||||
$asset->asset_tag = $asset_tag;
|
||||
$asset->model_id = $asset_model->id;
|
||||
$asset->assigned_to = $item["user"]->id;
|
||||
$asset->rtd_location_id = $item["location"]->id;
|
||||
|
||||
if($asset_model)
|
||||
$asset->model_id = $asset_model->id;
|
||||
if($item["user"])
|
||||
$asset->assigned_to = $item["user"]->id;
|
||||
if($item["location"])
|
||||
$asset->rtd_location_id = $item["location"]->id;
|
||||
$asset->user_id = 1;
|
||||
$this->log("status_id: " . $status_id);
|
||||
$asset->status_id = $status_id;
|
||||
$asset->company_id = $item["company"]->id;
|
||||
if($item["company"])
|
||||
$asset->company_id = $item["company"]->id;
|
||||
$asset->order_number = $item["order_number"];
|
||||
$asset->supplier_id = $supplier->id;
|
||||
if($supplier)
|
||||
$asset->supplier_id = $supplier->id;
|
||||
$asset->notes = $item["notes"];
|
||||
$asset->image = $asset_image;
|
||||
$this->assets->add($asset);
|
||||
if (!$this->option('testrun')) {
|
||||
|
||||
if ($asset->save()) {
|
||||
$this->comment('Asset ' . $item["item_name"] . ' with serial number ' . $asset_serial . ' was created');
|
||||
$this->log('Asset ' . $item["item_name"] . ' with serial number ' . $asset_serial . ' was created');
|
||||
} else {
|
||||
$this->comment('Something went wrong! Asset ' . $item["item_name"] . ' was NOT created');
|
||||
// dd($asset);
|
||||
$this->jsonError('Asset', $asset->getErrors());
|
||||
}
|
||||
|
||||
} else {
|
||||
@@ -586,10 +708,10 @@ class ObjectImportCommand extends Command {
|
||||
*/
|
||||
public function createAccessoryIfNotExists(array $item )
|
||||
{
|
||||
$this->comment("Creating Accessory");
|
||||
$this->log("Creating Accessory");
|
||||
foreach ($this->accessories as $tempaccessory) {
|
||||
if ($tempaccessory->name === $item["item_name"] ) {
|
||||
$this->comment('A matching Accessory ' . $item["item_name"] . ' already exists. ');
|
||||
if (strcasecmp($tempaccessory->name, $item["item_name"] ) == 0 ) {
|
||||
$this->log('A matching Accessory ' . $item["item_name"] . ' already exists. ');
|
||||
// FUTURE: Adjust quantity on import maybe?
|
||||
return;
|
||||
}
|
||||
@@ -597,6 +719,7 @@ class ObjectImportCommand extends Command {
|
||||
|
||||
$accessory = new Accessory();
|
||||
$accessory->name = $item["item_name"];
|
||||
|
||||
if (!empty($item["purchase_date"])) {
|
||||
$accessory->purchase_date = $item["purchase_date"];
|
||||
} else {
|
||||
@@ -607,11 +730,14 @@ class ObjectImportCommand extends Command {
|
||||
} else {
|
||||
$accessory->purchase_cost = 0.00;
|
||||
}
|
||||
$accessory->location_id = $item["location"]->id;
|
||||
if($item["location"])
|
||||
$accessory->location_id = $item["location"]->id;
|
||||
$accessory->user_id = 1;
|
||||
$accessory->company_id = $item["company"]->id;
|
||||
if($item["company"])
|
||||
$accessory->company_id = $item["company"]->id;
|
||||
$accessory->order_number = $item["order_number"];
|
||||
$accessory->category_id = $item["category"]->id;
|
||||
if($item["category"])
|
||||
$accessory->category_id = $item["category"]->id;
|
||||
|
||||
//TODO: Implement
|
||||
// $accessory->notes = e($item_notes);
|
||||
@@ -626,12 +752,14 @@ class ObjectImportCommand extends Command {
|
||||
|
||||
if (!$this->option('testrun')) {
|
||||
if ($accessory->save()) {
|
||||
$this->comment('Accessory ' . $item["item_name"] . ' was created');
|
||||
$this->log('Accessory ' . $item["item_name"] . ' was created');
|
||||
// $this->comment('Accessory ' . $item["item_name"] . ' was created');
|
||||
|
||||
} else {
|
||||
$this->comment('Something went wrong! Accessory ' . $item["item_name"] . ' was NOT created');
|
||||
$this->jsonError('Accessory', $accessory->getErrors()) ;
|
||||
}
|
||||
} else {
|
||||
$this->comment('TEST RUN - Accessory ' . $item["item_name"] . ' not created');
|
||||
$this->log('TEST RUN - Accessory ' . $item["item_name"] . ' not created');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -643,10 +771,10 @@ class ObjectImportCommand extends Command {
|
||||
*/
|
||||
public function createConsumableIfNotExists(array $item)
|
||||
{
|
||||
$this->comment("Creating Consumable");
|
||||
$this->log("Creating Consumable");
|
||||
foreach($this->consumables as $tempconsumable) {
|
||||
if($tempconsumable->name === $item["item_name"]) {
|
||||
$this->comment("A matching sumable " . $item["item_name"] . " already exists");
|
||||
if(strcasecmp($tempconsumable->name, $item["item_name"]) == 0) {
|
||||
$this->log("A matching consumable " . $item["item_name"] . " already exists");
|
||||
//TODO: Adjust quantity if different maybe?
|
||||
return;
|
||||
}
|
||||
@@ -683,12 +811,14 @@ class ObjectImportCommand extends Command {
|
||||
|
||||
if(!$this->option("testrun")) {
|
||||
if($consumable->save()) {
|
||||
$this->comment("Consumable " . $item["item_name"] . ' was created');
|
||||
$this->log("Consumable " . $item["item_name"] . ' was created');
|
||||
// $this->comment("Consumable " . $item["item_name"] . ' was created');
|
||||
|
||||
} else {
|
||||
$this->comment('Something went wrong! Consumable ' . $item["item_name"] . ' not created');
|
||||
$this->jsonError('Consumable', $consumable->getErrors());
|
||||
}
|
||||
} else {
|
||||
$this->comment('TEST RUN - Consumable ' . $item['item_name'] . ' not created');
|
||||
$this->log('TEST RUN - Consumable ' . $item['item_name'] . ' not created');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -716,10 +846,13 @@ class ObjectImportCommand extends Command {
|
||||
array('email_format', null, InputOption::VALUE_REQUIRED, 'The format of the email addresses that should be generated. Options are firstname.lastname, firstname, filastname', null),
|
||||
array('username_format', null, InputOption::VALUE_REQUIRED, 'The format of the username that should be generated. Options are firstname.lastname, firstname, filastname, email', null),
|
||||
array('testrun', null, InputOption::VALUE_NONE, 'If set, will parse and output data without adding to database', null),
|
||||
array('logfile', null, InputOption::VALUE_REQUIRED, 'The path to log output to. storage/logs/importer.log by default', storage_path('logs/importer.log') ),
|
||||
array('item-type', null, InputOption::VALUE_REQUIRED, 'Item Type To import. Valid Options are Asset, Consumable, Or Accessory', 'Asset'),
|
||||
array('web-importer', null, InputOption::VALUE_NONE, 'Internal: packages output for use with the web importer')
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,19 +26,67 @@ use App\Models\Asset;
|
||||
class Helper
|
||||
{
|
||||
|
||||
// This doesn't do anything yet
|
||||
|
||||
public static function parseEscapedMarkedown($str) {
|
||||
$Parsedown = new \Parsedown();
|
||||
|
||||
if ($str) {
|
||||
return $Parsedown->text(e($str));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// This doesn't do anything yet
|
||||
public static function parseEmailList($emails)
|
||||
{
|
||||
$emails_array = explode(',', $emails);
|
||||
return array_walk($emails_array, 'trim_value');
|
||||
}
|
||||
|
||||
// This doesn't do anything yet
|
||||
// This doesn't do anything yet
|
||||
public static function trim_value(&$value)
|
||||
{
|
||||
return trim($value);
|
||||
}
|
||||
|
||||
// Static colors for pie charts
|
||||
public static function chartColors()
|
||||
{
|
||||
$colors = [
|
||||
'#f56954',
|
||||
'#00a65a',
|
||||
'#f39c12',
|
||||
'#00c0ef',
|
||||
'#3c8dbc',
|
||||
'#d2d6de',
|
||||
'#3c8dbc',
|
||||
'#3c8dbc',
|
||||
'#3c8dbc',
|
||||
|
||||
];
|
||||
return $colors;
|
||||
}
|
||||
|
||||
// Static background (highlight) colors for pie charts
|
||||
// This is not currently used, but might be in the near future.
|
||||
public static function chartBackgroundColors()
|
||||
{
|
||||
$colors = [
|
||||
'#f56954',
|
||||
'#00a65a',
|
||||
'#f39c12',
|
||||
'#00c0ef',
|
||||
'#3c8dbc',
|
||||
'#d2d6de',
|
||||
'#3c8dbc',
|
||||
'#3c8dbc',
|
||||
'#3c8dbc',
|
||||
|
||||
];
|
||||
return $colors;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static function ParseFloat($floatString)
|
||||
{
|
||||
@@ -63,8 +111,8 @@ class Helper
|
||||
public static function companyList()
|
||||
{
|
||||
$company_list = array('0' => trans('general.select_company')) + DB::table('companies')
|
||||
->orderBy('name', 'asc')
|
||||
->pluck('name', 'id');
|
||||
->orderBy('name', 'asc')
|
||||
->pluck('name', 'id');
|
||||
return $company_list;
|
||||
}
|
||||
|
||||
@@ -72,39 +120,39 @@ class Helper
|
||||
public static function categoryList()
|
||||
{
|
||||
$category_list = array('' => '') + Category::orderBy('name', 'asc')
|
||||
->whereNull('deleted_at')
|
||||
->orderBy('name', 'asc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
->whereNull('deleted_at')
|
||||
->orderBy('name', 'asc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
return $category_list;
|
||||
}
|
||||
|
||||
public static function suppliersList()
|
||||
{
|
||||
$supplier_list = array('' => trans('general.select_supplier')) + Supplier::orderBy('name', 'asc')
|
||||
->orderBy('name', 'asc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
->orderBy('name', 'asc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
return $supplier_list;
|
||||
}
|
||||
|
||||
public static function statusLabelList()
|
||||
{
|
||||
$statuslabel_list = array('' => trans('general.select_statuslabel')) + Statuslabel::orderBy('name', 'asc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
->pluck('name', 'id')->toArray();
|
||||
return $statuslabel_list;
|
||||
}
|
||||
|
||||
public static function locationsList()
|
||||
{
|
||||
$location_list = array('' => trans('general.select_location')) + Location::orderBy('name', 'asc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
->pluck('name', 'id')->toArray();
|
||||
return $location_list;
|
||||
}
|
||||
|
||||
public static function manufacturerList()
|
||||
{
|
||||
$manufacturer_list = array('' => 'Select One') +
|
||||
Manufacturer::orderBy('name', 'asc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
Manufacturer::orderBy('name', 'asc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
return $manufacturer_list;
|
||||
}
|
||||
|
||||
@@ -116,44 +164,45 @@ class Helper
|
||||
|
||||
public static function managerList()
|
||||
{
|
||||
$manager_list = array('' => '') + User::select(DB::raw('concat(last_name,", ",first_name," (",username,")") as full_name, id'))
|
||||
->whereNull('deleted_at', 'and')
|
||||
->orderBy('last_name', 'asc')
|
||||
->orderBy('first_name', 'asc')
|
||||
->pluck('full_name', 'id')->toArray();
|
||||
$manager_list = array('' => '') +
|
||||
User::where('deleted_at', '=', null)
|
||||
->orderBy('last_name', 'asc')
|
||||
->orderBy('first_name', 'asc')->get()
|
||||
->lists('complete_name', 'id')->toArray();
|
||||
|
||||
return $manager_list;
|
||||
}
|
||||
|
||||
public static function depreciationList()
|
||||
{
|
||||
$depreciation_list = ['' => 'Do Not Depreciate'] + Depreciation::orderBy('name', 'asc')
|
||||
->pluck('name', 'id')->toArray();
|
||||
->pluck('name', 'id')->toArray();
|
||||
return $depreciation_list;
|
||||
}
|
||||
|
||||
public static function categoryTypeList()
|
||||
{
|
||||
$category_types = array('' => '','accessory' => 'Accessory', 'asset' => 'Asset', 'consumable' => 'Consumable','component' => 'Component');
|
||||
return $category_types;
|
||||
$category_types = array('' => '','accessory' => 'Accessory', 'asset' => 'Asset', 'consumable' => 'Consumable','component' => 'Component');
|
||||
return $category_types;
|
||||
}
|
||||
|
||||
public static function usersList()
|
||||
{
|
||||
$users_list = array('' => trans('general.select_user')) + DB::table('users')
|
||||
->select(DB::raw('concat(last_name,", ",first_name," (",username,")") as full_name, id'))
|
||||
->whereNull('deleted_at')
|
||||
->where('show_in_list','=',1)
|
||||
->orderBy('last_name', 'asc')
|
||||
->orderBy('first_name', 'asc')
|
||||
->pluck('full_name', 'id');
|
||||
$users_list = array( '' => trans('general.select_user')) +
|
||||
User::where('deleted_at', '=', null)
|
||||
->where('show_in_list','=',1)
|
||||
->orderBy('last_name', 'asc')
|
||||
->orderBy('first_name', 'asc')->get()
|
||||
->lists('complete_name', 'id')->toArray();
|
||||
|
||||
return $users_list;
|
||||
}
|
||||
|
||||
public static function assetsList()
|
||||
{
|
||||
$assets_list = array('' => trans('general.select_asset')) + Asset::orderBy('name', 'asc')
|
||||
->whereNull('deleted_at')
|
||||
->pluck('name', 'id')->toArray();
|
||||
->whereNull('deleted_at')
|
||||
->pluck('name', 'id')->toArray();
|
||||
return $assets_list;
|
||||
}
|
||||
|
||||
@@ -197,10 +246,10 @@ class Helper
|
||||
return $randomString;
|
||||
}
|
||||
|
||||
/**
|
||||
* This nasty little method gets the low inventory info for the
|
||||
* alert dropdown
|
||||
**/
|
||||
/**
|
||||
* This nasty little method gets the low inventory info for the
|
||||
* alert dropdown
|
||||
**/
|
||||
public static function checkLowInventory()
|
||||
{
|
||||
$consumables = Consumable::with('users')->whereNotNull('min_amt')->get();
|
||||
@@ -214,7 +263,12 @@ class Helper
|
||||
foreach ($consumables as $consumable) {
|
||||
$avail = $consumable->numRemaining();
|
||||
if ($avail < ($consumable->min_amt) + \App\Models\Setting::getSettings()->alert_threshold) {
|
||||
$percent = number_format((($consumable->numRemaining() / $consumable->qty) * 100), 0);
|
||||
if ($consumable->total_qty > 0) {
|
||||
$percent = number_format((($consumable->numRemaining() / $consumable->total_qty) * 100), 0);
|
||||
} else {
|
||||
$percent = 100;
|
||||
}
|
||||
|
||||
$items_array[$all_count]['id'] = $consumable->id;
|
||||
$items_array[$all_count]['name'] = $consumable->name;
|
||||
$items_array[$all_count]['type'] = 'consumables';
|
||||
@@ -230,7 +284,13 @@ class Helper
|
||||
foreach ($accessories as $accessory) {
|
||||
$avail = $accessory->numRemaining();
|
||||
if ($avail < ($accessory->min_amt) + \App\Models\Setting::getSettings()->alert_threshold) {
|
||||
$percent = number_format((($accessory->numRemaining() / $accessory->qty) * 100), 0);
|
||||
|
||||
if ($accessory->total_qty > 0) {
|
||||
$percent = number_format((($accessory->numRemaining() / $accessory->total_qty) * 100), 0);
|
||||
} else {
|
||||
$percent = 100;
|
||||
}
|
||||
|
||||
$items_array[$all_count]['id'] = $accessory->id;
|
||||
$items_array[$all_count]['name'] = $accessory->name;
|
||||
$items_array[$all_count]['type'] = 'accessories';
|
||||
@@ -245,7 +305,12 @@ class Helper
|
||||
foreach ($components as $component) {
|
||||
$avail = $component->numRemaining();
|
||||
if ($avail < ($component->min_amt) + \App\Models\Setting::getSettings()->alert_threshold) {
|
||||
$percent = number_format((($component->numRemaining() / $component->total_qty) * 100), 0);
|
||||
if ($component->total_qty > 0) {
|
||||
$percent = number_format((($component->numRemaining() / $component->total_qty) * 100), 0);
|
||||
} else {
|
||||
$percent = 100;
|
||||
}
|
||||
|
||||
$items_array[$all_count]['id'] = $component->id;
|
||||
$items_array[$all_count]['name'] = $component->name;
|
||||
$items_array[$all_count]['type'] = 'components';
|
||||
@@ -280,22 +345,22 @@ class Helper
|
||||
}
|
||||
|
||||
/**
|
||||
* Walks through the permissions in the permissions config file and determines if
|
||||
* permissions are granted based on a $selected_arr array.
|
||||
*
|
||||
* The $permissions array is a multidimensional array broke down by section.
|
||||
* (Licenses, Assets, etc)
|
||||
*
|
||||
* The $selected_arr should be a flattened array that contains just the
|
||||
* corresponding permission name and a true or false boolean to determine
|
||||
* if that group/user has been granted that permission.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net]
|
||||
* @param array $permissions
|
||||
* @param array $selected_arr
|
||||
* @since [v1.0]
|
||||
* @return Array
|
||||
*/
|
||||
* Walks through the permissions in the permissions config file and determines if
|
||||
* permissions are granted based on a $selected_arr array.
|
||||
*
|
||||
* The $permissions array is a multidimensional array broke down by section.
|
||||
* (Licenses, Assets, etc)
|
||||
*
|
||||
* The $selected_arr should be a flattened array that contains just the
|
||||
* corresponding permission name and a true or false boolean to determine
|
||||
* if that group/user has been granted that permission.
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net]
|
||||
* @param array $permissions
|
||||
* @param array $selected_arr
|
||||
* @since [v1.0]
|
||||
* @return Array
|
||||
*/
|
||||
public static function selectedPermissionsArray($permissions, $selected_arr = array())
|
||||
{
|
||||
|
||||
@@ -324,7 +389,7 @@ class Helper
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
return $permissions_arr;
|
||||
}
|
||||
|
||||
|
||||
@@ -313,6 +313,7 @@ class AccessoriesController extends Controller
|
||||
|
||||
$logaction = new Actionlog();
|
||||
$logaction->accessory_id = $accessory->id;
|
||||
$logaction->asset_id = 0;
|
||||
$logaction->checkedout_to = $accessory->assigned_to;
|
||||
$logaction->asset_type = 'accessory';
|
||||
$logaction->location_id = $user->location_id;
|
||||
|
||||
@@ -155,41 +155,14 @@ class AssetMaintenancesController extends Controller
|
||||
] + AssetMaintenance::getImprovementOptions();
|
||||
// Mark the selected asset, if it came in
|
||||
$selectedAsset = $assetId;
|
||||
// Get the possible assets using a left join to get a list of assets and some other helpful info
|
||||
$asset = Company::scopeCompanyables(DB::table('assets'), 'assets.company_id')
|
||||
->leftJoin('users', 'users.id', '=', 'assets.assigned_to')
|
||||
->leftJoin('models', 'assets.model_id', '=', 'models.id')
|
||||
->select(
|
||||
'assets.id',
|
||||
'assets.name',
|
||||
'first_name',
|
||||
'last_name',
|
||||
'asset_tag',
|
||||
DB::raw('concat(first_name," ",last_name) as full_name, assets.id as id, models.name as modelname')
|
||||
)
|
||||
->whereNull('assets.deleted_at')
|
||||
->get();
|
||||
$asset_array = json_decode(json_encode($asset), true);
|
||||
$asset_element[ '' ] = 'Please select an asset';
|
||||
|
||||
// Build a list out of the data results
|
||||
for ($x = 0; $x < count($asset_array); $x++) {
|
||||
$assets = Company::scopeCompanyables(Asset::all(), 'assets.company_id')->lists('detailed_name', 'id');
|
||||
|
||||
if ($asset_array[ $x ][ 'full_name' ] != '') {
|
||||
$full_name = ' (' . $asset_array[ $x ][ 'full_name' ] . ') ' . $asset_array[ $x ][ 'modelname' ];
|
||||
} else {
|
||||
$full_name = ' (Unassigned) ' . $asset_array[ $x ][ 'modelname' ];
|
||||
}
|
||||
$asset_element[ $asset_array[ $x ][ 'id' ] ] =
|
||||
$asset_array[ $x ][ 'asset_tag' ] . ' - ' . $asset_array[ $x ][ 'name' ] . $full_name;
|
||||
}
|
||||
|
||||
// Get Supplier List
|
||||
$supplier_list = Helper::suppliersList();
|
||||
|
||||
// Render the view
|
||||
return View::make('asset_maintenances/edit')
|
||||
->with('asset_list', $asset_element)
|
||||
->with('asset_list', $assets)
|
||||
->with('selectedAsset', $selectedAsset)
|
||||
->with('supplier_list', $supplier_list)
|
||||
->with('assetMaintenanceType', $assetMaintenanceType)
|
||||
@@ -321,40 +294,13 @@ class AssetMaintenancesController extends Controller
|
||||
'' => 'Select an improvement type',
|
||||
] + AssetMaintenance::getImprovementOptions();
|
||||
|
||||
// Get the possible assets using a left join to get a list of assets and some other helpful info
|
||||
$asset = Company::scopeCompanyables(DB::table('assets'), 'assets.company_id')
|
||||
->leftJoin('users', 'users.id', '=', 'assets.assigned_to')
|
||||
->leftJoin('models', 'assets.model_id', '=', 'models.id')
|
||||
->select(
|
||||
'assets.id',
|
||||
'assets.name',
|
||||
'first_name',
|
||||
'last_name',
|
||||
'asset_tag',
|
||||
DB::raw('concat(first_name," ",last_name) as full_name, assets.id as id, models.name as modelname')
|
||||
)
|
||||
->whereNull('assets.deleted_at')
|
||||
->get();
|
||||
$asset_array = json_decode(json_encode($asset), true);
|
||||
$asset_element[ '' ] = 'Please select an asset';
|
||||
|
||||
// Build a list out of the data results
|
||||
for ($x = 0; $x < count($asset_array); $x++) {
|
||||
|
||||
if ($asset_array[ $x ][ 'full_name' ] != '') {
|
||||
$full_name = ' (' . $asset_array[ $x ][ 'full_name' ] . ') ' . $asset_array[ $x ][ 'modelname' ];
|
||||
} else {
|
||||
$full_name = ' (Unassigned) ' . $asset_array[ $x ][ 'modelname' ];
|
||||
}
|
||||
$asset_element[ $asset_array[ $x ][ 'id' ] ] =
|
||||
$asset_array[ $x ][ 'asset_tag' ] . ' - ' . $asset_array[ $x ][ 'name' ] . $full_name;
|
||||
}
|
||||
$assets = Company::scopeCompanyables(Asset::all(), 'assets.company_id')->lists('detailed_name', 'id');
|
||||
// Get Supplier List
|
||||
$supplier_list = Helper::suppliersList();
|
||||
|
||||
// Render the view
|
||||
return View::make('asset_maintenances/edit')
|
||||
->with('asset_list', $asset_element)
|
||||
->with('asset_list', $assets)
|
||||
->with('selectedAsset', null)
|
||||
->with('supplier_list', $supplier_list)
|
||||
->with('assetMaintenanceType', $assetMaintenanceType)
|
||||
|
||||
@@ -110,10 +110,10 @@ class AssetModelsController extends Controller
|
||||
$image = Input::file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
$path = public_path('uploads/models/'.$file_name);
|
||||
// Image::make($image->getRealPath())->resize(300, null, function ($constraint) {
|
||||
// $constraint->aspectRatio();
|
||||
// $constraint->upsize();
|
||||
// })->save($path);
|
||||
Image::make($image->getRealPath())->resize(500, null, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$model->image = $file_name;
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,6 @@ class AssetsController extends Controller
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a view that invokes the ajax tables which actually contains
|
||||
* the content for the assets listing, which is generated in getDatatable.
|
||||
@@ -74,6 +73,26 @@ class AssetsController extends Controller
|
||||
return View::make('hardware/index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Searches the assets table by asset tag, and redirects if it finds one
|
||||
*
|
||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||
* @since [v3.0]
|
||||
* @return Redirect
|
||||
*/
|
||||
public function getAssetByTag() {
|
||||
if (Input::get('topsearch')=="true") {
|
||||
$topsearch = true;
|
||||
} else {
|
||||
$topsearch = false;
|
||||
}
|
||||
if ($asset = Asset::where('asset_tag','=',Input::get('assetTag'))->first()) {
|
||||
return redirect()->route('view/hardware', $asset->id)->with('topsearch', $topsearch);
|
||||
}
|
||||
return redirect()->to('hardware')->with('error',trans('admin/hardware/message.does_not_exist'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a view that presents a form to create a new asset.
|
||||
*
|
||||
@@ -189,15 +208,21 @@ class AssetsController extends Controller
|
||||
}
|
||||
|
||||
// Create the image (if one was chosen.)
|
||||
if (Input::file('image')) {
|
||||
$image = Input::file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
if (Input::has('image')) {
|
||||
$image = Input::get('image');
|
||||
$header = explode(';', $image, 2)[0];
|
||||
$extension = substr( $header, strpos($header, '/')+1);
|
||||
$image = substr( $image, strpos($image, ',')+1);
|
||||
|
||||
$file_name = str_random(25).".".$extension;
|
||||
$path = public_path('uploads/assets/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(300, null, function ($constraint) {
|
||||
|
||||
//Currently resizing happens on Client. Maybe use this for thumbnails in the future?
|
||||
Image::make($image)->resize(500, 500, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
$asset->image = $file_name;
|
||||
$asset->image = $file_name;
|
||||
|
||||
}
|
||||
|
||||
@@ -214,11 +239,11 @@ class AssetsController extends Controller
|
||||
$log = $logaction->logaction('checkout');
|
||||
}
|
||||
// Redirect to the asset listing page
|
||||
return redirect()->to("hardware")->with('success', trans('admin/hardware/message.create.success'));
|
||||
\Session::flash('success', trans('admin/hardware/message.create.success'));
|
||||
return response()->json(['redirect_url' => route('hardware')]);
|
||||
}
|
||||
|
||||
return redirect()->back()->withInput()->withErrors($asset->getErrors());
|
||||
|
||||
return response()->json(['errors' => $asset->getErrors()]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -343,11 +368,17 @@ class AssetsController extends Controller
|
||||
$asset->physical = '1';
|
||||
|
||||
// Update the image
|
||||
if (Input::file('image')) {
|
||||
$image = Input::file('image');
|
||||
$file_name = str_random(25).".".$image->getClientOriginalExtension();
|
||||
if (Input::has('image')) {
|
||||
$image = Input::get('image');
|
||||
$header = explode(';', $image, 2)[0];
|
||||
$extension = substr( $header, strpos($header, '/')+1);
|
||||
$image = substr( $image, strpos($image, ',')+1);
|
||||
|
||||
$file_name = str_random(25).".".$extension;
|
||||
$path = public_path('uploads/assets/'.$file_name);
|
||||
Image::make($image->getRealPath())->resize(300, null, function ($constraint) {
|
||||
|
||||
|
||||
Image::make($image)->resize(500, 500, function ($constraint) {
|
||||
$constraint->aspectRatio();
|
||||
$constraint->upsize();
|
||||
})->save($path);
|
||||
@@ -725,6 +756,9 @@ class AssetsController extends Controller
|
||||
return redirect()->to('hardware')->with('error', trans('general.insufficient_permissions'));
|
||||
}
|
||||
|
||||
// Check if the uploads directory exists. If not, try to create it.
|
||||
if(!file_exists($path))
|
||||
mkdir($path, 0755);
|
||||
if ($handle = opendir($path)) {
|
||||
|
||||
/* This is the correct way to loop over the directory. */
|
||||
@@ -821,14 +855,20 @@ class AssetsController extends Controller
|
||||
return redirect()->to('hardware')->with('error', trans('general.insufficient_permissions'));
|
||||
}
|
||||
|
||||
$output = new BufferedOutput;
|
||||
Artisan::call('asset-import:csv', ['filename'=> config('app.private_uploads').'/imports/assets/'.$filename, '--email_format'=>'firstname.lastname', '--username_format'=>'firstname.lastname'], $output);
|
||||
$display_output = $output->fetch();
|
||||
$return = Artisan::call('snipeit:import',
|
||||
['filename'=> config('app.private_uploads').'/imports/assets/'.$filename,
|
||||
'--email_format'=>'firstname.lastname',
|
||||
'--username_format'=>'firstname.lastname',
|
||||
'--web-importer' => true
|
||||
]);
|
||||
$display_output = Artisan::output();
|
||||
$file = config('app.private_uploads').'/imports/assets/'.str_replace('.csv', '', $filename).'-output-'.date("Y-m-d-his").'.txt';
|
||||
file_put_contents($file, $display_output);
|
||||
|
||||
|
||||
return redirect()->to('hardware')->with('success', 'Your file has been imported');
|
||||
if( $return === 0) //Success
|
||||
return redirect()->to('hardware')->with('success', trans('admin/hardware/message.import.success'));
|
||||
else if( $return === 1) // Failure
|
||||
return redirect()->back()->with('import_errors', json_decode($display_output))->with('error', trans('admin/hardware/message.import.error'));
|
||||
dd("Shouldn't be here");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -319,6 +319,7 @@ class ConsumablesController extends Controller
|
||||
$logaction->consumable_id = $consumable->id;
|
||||
$logaction->checkedout_to = $consumable->assigned_to;
|
||||
$logaction->asset_type = 'consumable';
|
||||
$logaction->asset_id = 0;
|
||||
$logaction->location_id = $user->location_id;
|
||||
$logaction->user_id = Auth::user()->id;
|
||||
$logaction->note = e(Input::get('note'));
|
||||
|
||||
@@ -47,11 +47,11 @@ class GroupsController extends Controller
|
||||
$group = new Group;
|
||||
// Get all the available permissions
|
||||
$permissions = config('permissions');
|
||||
|
||||
$selectedPermissions = Input::old('permissions', array());
|
||||
$groupPermissions = array();
|
||||
$selectedPermissions = Input::old('permissions', $groupPermissions);
|
||||
|
||||
// Show the page
|
||||
return View::make('groups/edit', compact('permissions', 'selectedPermissions'))->with('group', $group);
|
||||
return View::make('groups/edit', compact('permissions', 'selectedPermissions', 'groupPermissions'))->with('group', $group);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -70,7 +70,7 @@ class GroupsController extends Controller
|
||||
$group->permissions = json_encode(Input::get('permission'));
|
||||
|
||||
if ($group->save()) {
|
||||
return redirect()->to("admin/groups")->with('success', trans('admin/groups/message.create.success'));
|
||||
return redirect()->to("admin/groups")->with('success', trans('admin/groups/message.success.create'));
|
||||
}
|
||||
|
||||
return redirect()->back()->withInput()->withErrors($group->getErrors());
|
||||
@@ -91,9 +91,9 @@ class GroupsController extends Controller
|
||||
{
|
||||
$group = Group::find($id);
|
||||
$permissions = config('permissions');
|
||||
$group->permissions = $group->decodePermissions();
|
||||
$selected_array = Helper::selectedPermissionsArray($permissions, $group->permissions);
|
||||
return View::make('groups/edit', compact('group', 'permissions','selected_array'));
|
||||
$groupPermissions = $group->decodePermissions();
|
||||
$selected_array = Helper::selectedPermissionsArray($permissions, $groupPermissions);
|
||||
return View::make('groups/edit', compact('group', 'permissions','selected_array','groupPermissions'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -119,7 +119,7 @@ class GroupsController extends Controller
|
||||
if (!config('app.lock_passwords')) {
|
||||
|
||||
if ($group->save()) {
|
||||
return redirect()->to("admin/groups")->with('success', trans('admin/groups/message.create.success'));
|
||||
return redirect()->to("admin/groups")->with('success', trans('admin/groups/message.success.update'));
|
||||
}
|
||||
return redirect()->back()->withInput()->withErrors($group->getErrors());
|
||||
|
||||
|
||||
@@ -156,6 +156,7 @@ class LicensesController extends Controller
|
||||
|
||||
$insertedId = $license->id;
|
||||
// Save the license seat data
|
||||
DB::transaction(function() use (&$insertedId,&$license) {
|
||||
for ($x=0; $x<$license->seats; $x++) {
|
||||
$license_seat = new LicenseSeat();
|
||||
$license_seat->license_id = $insertedId;
|
||||
@@ -164,6 +165,7 @@ class LicensesController extends Controller
|
||||
$license_seat->notes = null;
|
||||
$license_seat->save();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Redirect to the new license page
|
||||
@@ -435,40 +437,13 @@ class LicensesController extends Controller
|
||||
}
|
||||
|
||||
// Get the dropdown of users and then pass it to the checkout view
|
||||
$users_list = array('' => 'Select a User') + DB::table('users')->select(DB::raw('concat(last_name,", ",first_name," (",username,")") as full_name, id'))->whereNull('deleted_at')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc')->lists('full_name', 'id');
|
||||
$users_list = Helper::usersList();
|
||||
|
||||
$assets = Company::scopeCompanyables(Asset::all(), 'assets.company_id')->lists('detailed_name', 'id');
|
||||
|
||||
// Left join to get a list of assets and some other helpful info
|
||||
$asset = DB::table('assets')
|
||||
->leftJoin('users', 'users.id', '=', 'assets.assigned_to')
|
||||
->leftJoin('models', 'assets.model_id', '=', 'models.id')
|
||||
->select(
|
||||
'assets.id',
|
||||
'assets.name',
|
||||
'first_name',
|
||||
'last_name',
|
||||
'asset_tag',
|
||||
DB::raw('concat(first_name," ",last_name) as full_name, assets.id as id, models.name as modelname')
|
||||
)
|
||||
->whereNull('assets.deleted_at')
|
||||
->get();
|
||||
|
||||
$asset_array = json_decode(json_encode($asset), true);
|
||||
$asset_element[''] = 'Please select an asset';
|
||||
|
||||
// Build a list out of the data results
|
||||
for ($x=0; $x<count($asset_array); $x++) {
|
||||
|
||||
if ($asset_array[$x]['full_name']!='') {
|
||||
$full_name = ' ('.$asset_array[$x]['full_name'].') '.$asset_array[$x]['modelname'];
|
||||
} else {
|
||||
$full_name = ' (Unassigned) '.$asset_array[$x]['modelname'];
|
||||
}
|
||||
$asset_element[$asset_array[$x]['id']] = $asset_array[$x]['asset_tag'].' - '.$asset_array[$x]['name'].$full_name;
|
||||
|
||||
}
|
||||
|
||||
return View::make('licenses/checkout', compact('licenseseat'))->with('users_list', $users_list)->with('asset_list', $asset_element);
|
||||
return View::make('licenses/checkout', compact('licenseseat'))
|
||||
->with('users_list', $users_list)
|
||||
->with('asset_list', $assets);
|
||||
|
||||
}
|
||||
|
||||
@@ -525,8 +500,8 @@ class LicensesController extends Controller
|
||||
// Redirect to the asset management page with error
|
||||
return redirect()->to('admin/licenses')->with('error', trans('admin/licenses/message.asset_does_not_exist'));
|
||||
}
|
||||
|
||||
if (($is_asset_id->assigned_to!=$assigned_to) && ($assigned_to!='')) {
|
||||
$was_assigned_to = $is_asset_id->assigned_to;
|
||||
if (($was_assigned_to!=$assigned_to) && !is_null($was_assigned_to) && ($was_assigned_to != '')) {
|
||||
//echo 'asset assigned to: '.$is_asset_id->assigned_to.'<br>license assigned to: '.$assigned_to;
|
||||
return redirect()->to('admin/licenses')->with('error', trans('admin/licenses/message.owner_doesnt_match_asset'));
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ use Crypt;
|
||||
use Mail;
|
||||
use App\Models\User;
|
||||
use App\Http\Requests\SetupUserRequest;
|
||||
use App\Http\Requests\SettingRequest;
|
||||
|
||||
/**
|
||||
* This controller handles all actions related to Settings for
|
||||
@@ -176,15 +175,19 @@ class SettingsController extends Controller
|
||||
$settings->alert_email = e(Input::get('email'));
|
||||
$settings->alerts_enabled = 1;
|
||||
$settings->brand = 1;
|
||||
$settings->locale = 'en';
|
||||
$settings->default_currency = 'USD';
|
||||
$settings->user_id = 1;
|
||||
$settings->email_domain = e(Input::get('email_domain'));
|
||||
$settings->email_format = e(Input::get('email_format'));
|
||||
|
||||
if ((!$user->isValid('initial')) && (!$settings->isValid('initial'))) {
|
||||
|
||||
if ((!$user->isValid()) || (!$settings->isValid())) {
|
||||
return redirect()->back()->withInput()->withErrors($user->getErrors())->withErrors($settings->getErrors());
|
||||
} else {
|
||||
$user->save();
|
||||
$settings->save();
|
||||
|
||||
|
||||
if (Input::get('email_creds')=='1') {
|
||||
Mail::send(['text' => 'emails.firstadmin'], $data, function ($m) use ($data) {
|
||||
$m->to($data['email'], $data['first_name']);
|
||||
@@ -192,6 +195,7 @@ class SettingsController extends Controller
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
return redirect()->route('setup.done');
|
||||
}
|
||||
|
||||
@@ -288,11 +292,11 @@ class SettingsController extends Controller
|
||||
* @since [v1.0]
|
||||
* @return Redirect
|
||||
*/
|
||||
public function postEdit(SettingRequest $request)
|
||||
public function postEdit()
|
||||
{
|
||||
|
||||
// Check if the asset exists
|
||||
if (is_null($setting = Setting::find(1))) {
|
||||
if (is_null($setting = Setting::first())) {
|
||||
// Redirect to the asset management page with error
|
||||
return redirect()->to('admin')->with('error', trans('admin/settings/message.update.error'));
|
||||
}
|
||||
@@ -311,8 +315,7 @@ class SettingsController extends Controller
|
||||
$setting->logo = $file_name;
|
||||
}
|
||||
}
|
||||
|
||||
$setting->id = '1';
|
||||
|
||||
|
||||
if (config('app.lock_passwords')==false) {
|
||||
$setting->site_name = e(Input::get('site_name'));
|
||||
@@ -338,6 +341,9 @@ class SettingsController extends Controller
|
||||
$setting->auto_increment_assets = e(Input::get('auto_increment_assets', '0'));
|
||||
$setting->alert_interval = e(Input::get('alert_interval'));
|
||||
$setting->alert_threshold = e(Input::get('alert_threshold'));
|
||||
$setting->email_domain = e(Input::get('email_domain'));
|
||||
$setting->email_format = e(Input::get('email_format'));
|
||||
$setting->username_format = e(Input::get('username_format'));
|
||||
|
||||
|
||||
$setting->labels_per_page = e(Input::get('labels_per_page'));
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||
use Input;
|
||||
use Lang;
|
||||
use App\Models\Statuslabel;
|
||||
use App\Models\Asset;
|
||||
use Redirect;
|
||||
use DB;
|
||||
use App\Models\Setting;
|
||||
@@ -35,6 +36,39 @@ class StatuslabelsController extends Controller
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Show a count of assets by status label
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
|
||||
public function getAssetCountByStatuslabel()
|
||||
{
|
||||
$colors = [];
|
||||
|
||||
$statuslabels = Statuslabel::get();
|
||||
$labels=[];
|
||||
$points=[];
|
||||
|
||||
foreach ($statuslabels as $statuslabel) {
|
||||
$labels[]=$statuslabel->name;
|
||||
$points[]=$statuslabel->assets()->whereNull('assigned_to')->count();
|
||||
}
|
||||
$labels[]='Deployed';
|
||||
$points[]=Asset::whereNotNull('assigned_to')->count();
|
||||
|
||||
$result= [
|
||||
"labels" => $labels,
|
||||
"datasets" => [ [
|
||||
"data" => $points,
|
||||
"backgroundColor" => Helper::chartColors(),
|
||||
"hoverBackgroundColor" => Helper::chartColors()
|
||||
]]
|
||||
];
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Statuslabel create.
|
||||
*
|
||||
@@ -193,7 +227,7 @@ class StatuslabelsController extends Controller
|
||||
if ($statuslabel->has_assets() > 0) {
|
||||
|
||||
// Redirect to the asset management page
|
||||
return redirect()->to('admin/settings/statuslabels')->with('error', trans('admin/statuslabels/message.assoc_users'));
|
||||
return redirect()->to('admin/settings/statuslabels')->with('error', trans('admin/statuslabels/message.assoc_assets'));
|
||||
} else {
|
||||
|
||||
$statuslabel->delete();
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\SetupUserRequest;
|
||||
use App\Http\Requests\AssetFileRequest;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Accessory;
|
||||
@@ -30,7 +29,8 @@ use Str;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use URL;
|
||||
use View;
|
||||
use Request;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
|
||||
/**
|
||||
* This controller handles all actions related to Users for
|
||||
@@ -65,7 +65,6 @@ class UsersController extends Controller
|
||||
*/
|
||||
public function getCreate()
|
||||
{
|
||||
$user = new User;
|
||||
|
||||
$groups = Group::pluck('name', 'id');
|
||||
|
||||
@@ -96,7 +95,7 @@ class UsersController extends Controller
|
||||
* @since [v1.0]
|
||||
* @return Redirect
|
||||
*/
|
||||
public function postCreate(SetupUserRequest $request)
|
||||
public function postCreate(Request $request)
|
||||
{
|
||||
|
||||
$user = new User;
|
||||
@@ -110,11 +109,13 @@ class UsersController extends Controller
|
||||
$data['password'] = Input::get('password');
|
||||
|
||||
if ($user->save()) {
|
||||
if (Input::has('groups')) {
|
||||
if ($request->has('groups')) {
|
||||
$user->groups()->sync(Input::get('groups'));
|
||||
} else {
|
||||
$user->groups()->sync(array());
|
||||
}
|
||||
|
||||
if ((Input::get('email_user') == 1) && (Input::has('email'))) {
|
||||
if (($request->input('email_user') == 1) && ($request->has('email'))) {
|
||||
// Send the credentials through email
|
||||
$data = array();
|
||||
$data['email'] = e(Input::get('email'));
|
||||
@@ -227,12 +228,11 @@ class UsersController extends Controller
|
||||
* @param int $id
|
||||
* @return Redirect
|
||||
*/
|
||||
public function postEdit($id = null)
|
||||
public function postEdit(Request $request, $id = null)
|
||||
{
|
||||
// We need to reverse the UI specific logic for our
|
||||
// permissions here before we update the user.
|
||||
$permissions = Input::get('permissions', array());
|
||||
//$this->decodePermissions($permissions);
|
||||
app('request')->request->set('permissions', $permissions);
|
||||
|
||||
// Only update the email address if locking is set to false
|
||||
@@ -255,7 +255,7 @@ class UsersController extends Controller
|
||||
return redirect()->route('users')->with('error', $error);
|
||||
}
|
||||
|
||||
|
||||
$user_groups = array (Input::get('groups'));
|
||||
// Update the user
|
||||
$user->first_name = e(Input::get('first_name'));
|
||||
$user->last_name = e(Input::get('last_name'));
|
||||
@@ -274,7 +274,12 @@ class UsersController extends Controller
|
||||
$user->manager_id = e(Input::get('manager_id'));
|
||||
$user->notes = e(Input::get('notes'));
|
||||
$user->permissions = json_encode(Input::get('permission'));
|
||||
$user->groups()->sync(Input::get('groups'));
|
||||
if ($request->has('groups')) {
|
||||
$user->groups()->sync(Input::get('groups'));
|
||||
} else {
|
||||
$user->groups()->sync(array());
|
||||
}
|
||||
|
||||
|
||||
if ($user->manager_id == "") {
|
||||
$user->manager_id = null;
|
||||
@@ -642,14 +647,13 @@ class UsersController extends Controller
|
||||
$user->id = null;
|
||||
|
||||
// Get this user groups
|
||||
$userGroups = $user_to_clone->groups()->lists('group_id', 'name');
|
||||
$userGroups = $user_to_clone->groups()->lists('name', 'id');
|
||||
|
||||
// Get this user permissions
|
||||
$userPermissions = null;
|
||||
//$this->encodePermissions($userPermissions);
|
||||
|
||||
// Get a list of all the available groups
|
||||
//$groups = Sentry::getGroupProvider()->findAll();
|
||||
$groups = Group::pluck('name', 'id');
|
||||
|
||||
// Get all the available permissions
|
||||
$permissions = config('permissions');
|
||||
@@ -657,13 +661,7 @@ class UsersController extends Controller
|
||||
|
||||
$location_list = Helper::locationsList();
|
||||
$company_list = Helper::companyList();
|
||||
$manager_list = array('' => 'Select a User') + DB::table('users')
|
||||
->select(DB::raw('concat(last_name,", ",first_name," (",email,")") as full_name, id'))
|
||||
->whereNull('deleted_at')
|
||||
->where('id', '!=', $id)
|
||||
->orderBy('last_name', 'asc')
|
||||
->orderBy('first_name', 'asc')
|
||||
->lists('full_name', 'id');
|
||||
$manager_list = Helper::managerList();
|
||||
|
||||
// Show the page
|
||||
return View::make('users/edit', compact('groups', 'userGroups', 'permissions', 'userPermissions'))
|
||||
@@ -671,6 +669,8 @@ class UsersController extends Controller
|
||||
->with('company_list', $company_list)
|
||||
->with('manager_list', $manager_list)
|
||||
->with('user', $user)
|
||||
->with('groups',$groups)
|
||||
->with('userGroups',$userGroups)
|
||||
->with('clone_user', $user_to_clone);
|
||||
} catch (UserNotFoundException $e) {
|
||||
// Prepare the error message
|
||||
|
||||
@@ -58,7 +58,7 @@ class ViewAssetsController extends Controller
|
||||
public function getRequestableIndex()
|
||||
{
|
||||
|
||||
$assets = Asset::with('model', 'defaultLoc')->Hardware()->RequestableAssets()->get();
|
||||
$assets = Asset::with('model', 'defaultLoc', 'assetloc','assigneduser')->Hardware()->RequestableAssets()->get();
|
||||
|
||||
return View::make('account/requestable-assets', compact('user', 'assets'));
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace App\Http\Middleware;
|
||||
use Closure;
|
||||
use Config;
|
||||
use Route;
|
||||
use Gate;
|
||||
|
||||
class CheckPermissions
|
||||
{
|
||||
@@ -13,19 +14,22 @@ class CheckPermissions
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @param string|null $guard
|
||||
* @param string|null $section
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next, $section = null, $guard = null)
|
||||
public function handle($request, Closure $next, $section = null)
|
||||
{
|
||||
|
||||
if (($request->user()->hasAccess($section)) || ($request->user()->isSuperUser())) {
|
||||
if (Gate::allows($section)) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
return response()->view('layouts/basic', [
|
||||
'content' => view('errors/403')
|
||||
'content' => view('errors/403')
|
||||
]);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ namespace App\Http\Requests;
|
||||
|
||||
use App\Http\Requests\Request;
|
||||
use App\Models\AssetModel;
|
||||
|
||||
use Session;
|
||||
class AssetRequest extends Request
|
||||
{
|
||||
/**
|
||||
@@ -53,6 +53,10 @@ class AssetRequest extends Request
|
||||
|
||||
public function response(array $errors)
|
||||
{
|
||||
return $this->redirector->back()->withInput()->withErrors($errors, $this->errorBag);
|
||||
$this->session()->flash('errors', Session::get('errors', new \Illuminate\Support\ViewErrorBag)
|
||||
->put('default', new \Illuminate\Support\MessageBag($errors)));
|
||||
|
||||
return parent::response($errors);
|
||||
// return $this->redirector->back()->withInput()->withErrors($errors, $this->errorBag);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@ abstract class Request extends FormRequest
|
||||
return $this->rules;
|
||||
}
|
||||
|
||||
public function response(array $errors)
|
||||
{
|
||||
$this->session->flash('errorMessages', $errors);
|
||||
return $this->redirector->back()->withErrors($errors)->withInput();
|
||||
}
|
||||
// public function response(array $errors)
|
||||
// {
|
||||
// $this->session->flash('errorMessages', $errors);
|
||||
// return $this->redirector->back()->withErrors($errors)->withInput();
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use App\Http\Requests\Request;
|
||||
|
||||
class SettingRequest extends Request
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
"brand" => 'required|min:1|numeric',
|
||||
"qr_text" => 'min:1|max:31',
|
||||
"logo_img" => 'mimes:jpeg,bmp,png,gif',
|
||||
"custom_css" => 'string',
|
||||
"alert_email" => 'email_array',
|
||||
"slack_endpoint" => 'url',
|
||||
"default_currency" => 'required',
|
||||
"locale" => 'required',
|
||||
"slack_channel" => 'regex:/(?<!\w)#\w+/',
|
||||
"slack_botname" => 'string',
|
||||
'labels_per_page' => 'numeric',
|
||||
'labels_width' => 'numeric',
|
||||
'labels_height' => 'numeric',
|
||||
'labels_pmargin_left' => 'numeric',
|
||||
'labels_pmargin_right' => 'numeric',
|
||||
'labels_pmargin_top' => 'numeric',
|
||||
'labels_pmargin_bottom' => 'numeric',
|
||||
'labels_display_bgutter' => 'numeric',
|
||||
'labels_display_sgutter' => 'numeric',
|
||||
'labels_fontsize' => 'numeric|min:5',
|
||||
'labels_pagewidth' => 'numeric',
|
||||
'labels_pageheight' => 'numeric',
|
||||
"ldap_server" => 'sometimes|required_if:ldap_enabled,1|url',
|
||||
"ldap_uname" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_basedn" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_filter" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_username_field" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_lname_field" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_auth_filter_query" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_version" => 'sometimes|required_if:ldap_enabled,1',
|
||||
];
|
||||
}
|
||||
|
||||
public function response(array $errors)
|
||||
{
|
||||
return $this->redirector->back()->withInput()->withErrors($errors, $this->errorBag);
|
||||
}
|
||||
}
|
||||
@@ -24,14 +24,14 @@ class SetupUserRequest extends Request
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'site_name' => 'required|string|min:1',
|
||||
'first_name' => 'required|string|min:1',
|
||||
'last_name' => 'required|string|min:1',
|
||||
'location_id' => 'numeric',
|
||||
'username' => 'required|string|min:2|unique:users,username,NULL,deleted_at',
|
||||
'email' => 'email|unique:users,email',
|
||||
'password' => 'required|min:6',
|
||||
'password_confirm' => 'required|min:6|same:password',
|
||||
'company_id' => 'integer',
|
||||
'email_domain' => 'required|min:4',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ use App\Models\Location;
|
||||
Route::group([ 'prefix' => 'api', 'middleware' => 'auth' ], function () {
|
||||
|
||||
/*---Hardware API---*/
|
||||
Route::group([ 'prefix' => 'hardware','middleware' => ['web','auth','authorize:hardware']], function () {
|
||||
Route::group([ 'prefix' => 'hardware','middleware' => ['web','auth','authorize:assets.view']], function () {
|
||||
|
||||
Route::get('list/{status?}', [ 'as' => 'api.hardware.list', 'uses' => 'AssetsController@getDatatable' ]);
|
||||
|
||||
@@ -35,6 +35,7 @@ Route::group([ 'prefix' => 'api', 'middleware' => 'auth' ], function () {
|
||||
});
|
||||
|
||||
Route::get('list', [ 'as' => 'api.statuslabels.list', 'uses' => 'StatuslabelsController@getDatatable' ]);
|
||||
Route::get('assets', [ 'as' => 'api.statuslabels.assets', 'uses' => 'StatuslabelsController@getAssetCountByStatuslabel' ]);
|
||||
|
||||
});
|
||||
|
||||
@@ -161,7 +162,6 @@ Route::group([ 'prefix' => 'api', 'middleware' => 'auth' ], function () {
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
@@ -177,7 +177,7 @@ Route::group(
|
||||
[ 'prefix' => 'hardware',
|
||||
'middleware' => ['web',
|
||||
'auth',
|
||||
'authorize:hardware']],
|
||||
'authorize:assets.view']],
|
||||
function () {
|
||||
|
||||
Route::get('create/{model?}', [
|
||||
@@ -194,6 +194,10 @@ Route::group(
|
||||
'as' => 'update/hardware',
|
||||
'uses' => 'AssetsController@getEdit'
|
||||
]);
|
||||
Route::get('/bytag', [
|
||||
'as' => 'findbytag/hardware',
|
||||
'uses' => 'AssetsController@getAssetByTag'
|
||||
]);
|
||||
|
||||
Route::get('{assetId}/clone', [ 'as' => 'clone/hardware', 'uses' => 'AssetsController@getClone' ]);
|
||||
Route::post('{assetId}/clone', 'AssetsController@postCreate');
|
||||
@@ -296,10 +300,10 @@ Route::group(
|
||||
|
|
||||
*/
|
||||
|
||||
Route::group([ 'prefix' => 'admin','middleware' => ['web','auth','authorize:admin']], function () {
|
||||
Route::group([ 'prefix' => 'admin','middleware' => ['web','auth']], function () {
|
||||
|
||||
# Licenses
|
||||
Route::group([ 'prefix' => 'licenses' ], function () {
|
||||
Route::group([ 'prefix' => 'licenses', 'middleware'=>'authorize:licenses.view' ], function () {
|
||||
|
||||
Route::get('create', [ 'as' => 'create/licenses', 'uses' => 'LicensesController@getCreate' ]);
|
||||
Route::post('create', 'LicensesController@postCreate');
|
||||
@@ -339,7 +343,7 @@ Route::group([ 'prefix' => 'admin','middleware' => ['web','auth','authorize:admi
|
||||
});
|
||||
|
||||
# Asset Maintenances
|
||||
Route::group([ 'prefix' => 'asset_maintenances' ], function () {
|
||||
Route::group([ 'prefix' => 'asset_maintenances', 'middleware'=>'authorize:assets.view' ], function () {
|
||||
|
||||
Route::get(
|
||||
'create/{assetId?}',
|
||||
@@ -363,7 +367,7 @@ Route::group([ 'prefix' => 'admin','middleware' => ['web','auth','authorize:admi
|
||||
});
|
||||
|
||||
# Accessories
|
||||
Route::group([ 'prefix' => 'accessories' ], function () {
|
||||
Route::group([ 'prefix' => 'accessories', 'middleware'=>'authorize:accessories.view' ], function () {
|
||||
|
||||
Route::get('create', [ 'as' => 'create/accessory', 'uses' => 'AccessoriesController@getCreate' ]);
|
||||
Route::post('create', 'AccessoriesController@postCreate');
|
||||
@@ -392,7 +396,7 @@ Route::group([ 'prefix' => 'admin','middleware' => ['web','auth','authorize:admi
|
||||
});
|
||||
|
||||
# Consumables
|
||||
Route::group([ 'prefix' => 'consumables' ], function () {
|
||||
Route::group([ 'prefix' => 'consumables', 'middleware'=>'authorize:consumables.view' ], function () {
|
||||
|
||||
Route::get('create', [ 'as' => 'create/consumable', 'uses' => 'ConsumablesController@getCreate' ]);
|
||||
Route::post('create', 'ConsumablesController@postCreate');
|
||||
@@ -418,7 +422,7 @@ Route::group([ 'prefix' => 'admin','middleware' => ['web','auth','authorize:admi
|
||||
});
|
||||
|
||||
# Components
|
||||
Route::group([ 'prefix' => 'components' ], function () {
|
||||
Route::group([ 'prefix' => 'components', 'middleware'=>'authorize:components.view' ], function () {
|
||||
|
||||
Route::get('create', [ 'as' => 'create/component', 'uses' => 'ComponentsController@getCreate' ]);
|
||||
Route::post('create', 'ComponentsController@postCreate');
|
||||
@@ -446,7 +450,7 @@ Route::group([ 'prefix' => 'admin','middleware' => ['web','auth','authorize:admi
|
||||
});
|
||||
|
||||
# Admin Settings Routes (for categories, maufactureres, etc)
|
||||
Route::group([ 'prefix' => 'settings'], function () {
|
||||
Route::group([ 'prefix' => 'settings', 'middleware'=>'authorize:superuser'], function () {
|
||||
|
||||
|
||||
|
||||
@@ -727,7 +731,7 @@ Route::group([ 'prefix' => 'account', 'middleware' => ['web', 'auth']], function
|
||||
});
|
||||
|
||||
|
||||
Route::group(['middleware' => ['web','auth','authorize:reports']], function () {
|
||||
Route::group(['middleware' => ['web','auth','authorize:reports.view']], function () {
|
||||
|
||||
Route::get(
|
||||
'reports/depreciation',
|
||||
|
||||
@@ -172,6 +172,14 @@ class Asset extends Depreciable
|
||||
}
|
||||
|
||||
|
||||
public function getDetailedNameAttribute() {
|
||||
if($this->assigned_user) {
|
||||
$user_name = $user->fullName();
|
||||
} else {
|
||||
$user_name = "Unassigned";
|
||||
}
|
||||
return $this->asset_tag . ' - ' . $this->name . ' (' . $user_name . ') ' . $this->model->name;
|
||||
}
|
||||
public function validationRules($id = '0')
|
||||
{
|
||||
return $this->rules;
|
||||
@@ -348,7 +356,7 @@ class Asset extends Depreciable
|
||||
}
|
||||
|
||||
/**
|
||||
* Get total assets
|
||||
* Get asset status
|
||||
*/
|
||||
public function assetstatus()
|
||||
{
|
||||
|
||||
@@ -14,8 +14,7 @@ final class Company extends Model
|
||||
protected $table = 'companies';
|
||||
|
||||
// Declare the rules for the model validation
|
||||
protected $rules = ['name' => 'required|min:2|max:255|unique:companies,name'];
|
||||
|
||||
protected $rules = ['name' => 'required|min:1|max:255|unique:companies,name'];
|
||||
/**
|
||||
* Whether the model should inject it's identifier to the unique
|
||||
* validation rules before attempting validation. If this property
|
||||
|
||||
@@ -11,28 +11,39 @@ class Setting extends Model
|
||||
use ValidatingTrait;
|
||||
|
||||
protected $rules = [
|
||||
"site_name" => 'required|min:1',
|
||||
"brand" => 'required|min:1|numeric',
|
||||
"alert_threshold" => 'numeric',
|
||||
"alert_interval" => 'numeric',
|
||||
"qr_text" => 'min:1|max:31',
|
||||
"custom_css" => 'string',
|
||||
"slack_endpoint" => 'url',
|
||||
"default_currency" => 'required',
|
||||
"slack_channel" => 'regex:/(?<!\w)#\w+/',
|
||||
"slack_botname" => 'string',
|
||||
"ldap_server" => 'sometimes|required_if:ldap_enabled,1|url',
|
||||
"ldap_uname" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_pword" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_basedn" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_filter" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_username_field" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_lname_field" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_auth_filter_query" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_version" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"brand" => 'required|min:1|numeric',
|
||||
"qr_text" => 'min:1|max:31',
|
||||
"logo_img" => 'mimes:jpeg,bmp,png,gif',
|
||||
"custom_css" => 'string',
|
||||
"alert_email" => 'email_array',
|
||||
"slack_endpoint" => 'url',
|
||||
"default_currency" => 'required',
|
||||
"locale" => 'required',
|
||||
"slack_channel" => 'regex:/(?<!\w)#\w+/',
|
||||
"slack_botname" => 'string',
|
||||
'labels_per_page' => 'numeric',
|
||||
'labels_width' => 'numeric',
|
||||
'labels_height' => 'numeric',
|
||||
'labels_pmargin_left' => 'numeric',
|
||||
'labels_pmargin_right' => 'numeric',
|
||||
'labels_pmargin_top' => 'numeric',
|
||||
'labels_pmargin_bottom' => 'numeric',
|
||||
'labels_display_bgutter' => 'numeric',
|
||||
'labels_display_sgutter' => 'numeric',
|
||||
'labels_fontsize' => 'numeric|min:5',
|
||||
'labels_pagewidth' => 'numeric',
|
||||
'labels_pageheight' => 'numeric',
|
||||
"ldap_server" => 'sometimes|required_if:ldap_enabled,1|url',
|
||||
"ldap_uname" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_basedn" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_filter" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_username_field" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_lname_field" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_auth_filter_query" => 'sometimes|required_if:ldap_enabled,1',
|
||||
"ldap_version" => 'sometimes|required_if:ldap_enabled,1',
|
||||
];
|
||||
|
||||
protected $fillable = ['site_name'];
|
||||
protected $fillable = ['site_name','email_domain','email_format','username_format'];
|
||||
|
||||
public static function getSettings()
|
||||
{
|
||||
|
||||
@@ -23,11 +23,27 @@ class Statuslabel extends Model
|
||||
|
||||
protected $fillable = ['name'];
|
||||
|
||||
/**
|
||||
* Show count of assets with status label
|
||||
*
|
||||
* @todo Remove this. It's dumb.
|
||||
* @return Collection
|
||||
*/
|
||||
public function has_assets()
|
||||
{
|
||||
return $this->hasMany('\App\Models\Asset', 'status_id')->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get assets with associated status label
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function assets()
|
||||
{
|
||||
return $this->hasMany('\App\Models\Asset', 'status_id');
|
||||
}
|
||||
|
||||
public function getStatuslabelType()
|
||||
{
|
||||
|
||||
|
||||
@@ -24,48 +24,50 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
protected $fillable = ['first_name', 'last_name', 'email','password','username'];
|
||||
|
||||
|
||||
/**
|
||||
* Model validation rules
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
/**
|
||||
* Model validation rules
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
|
||||
protected $rules = [
|
||||
'first_name' => 'required|string|min:1',
|
||||
'last_name' => 'required|string|min:1',
|
||||
'username' => 'required|string|min:2|unique:users,username,NULL,deleted_at',
|
||||
'email' => 'email',
|
||||
'password' => 'required|min:6',
|
||||
'first_name' => 'required|string|min:1',
|
||||
'last_name' => 'required|string|min:1',
|
||||
'username' => 'required|string|min:2|unique:users,username,NULL,deleted_at',
|
||||
'email' => 'email',
|
||||
'password' => 'required|min:6',
|
||||
];
|
||||
|
||||
|
||||
// This is very coarse and should be changed
|
||||
public function hasAccess($section)
|
||||
{
|
||||
|
||||
if ($this->isSuperUser()) {
|
||||
return true;
|
||||
}
|
||||
$permitted = false;
|
||||
$user_groups = $this->groups;
|
||||
|
||||
if ($this->permissions=='') {
|
||||
|
||||
if (($this->permissions=='') && (count($user_groups) == 0)) {
|
||||
return false;
|
||||
}
|
||||
$user_permissions = json_decode($this->permissions, true);
|
||||
$user_groups = $this->groups();
|
||||
|
||||
if (((array_key_exists($section, $user_permissions)) && ($user_permissions[$section]=='1')) ||
|
||||
((array_key_exists('admin', $user_permissions)) && ($user_permissions['admin']=='1'))) {
|
||||
return true;
|
||||
$user_permissions = json_decode($this->permissions, true);
|
||||
|
||||
if (($user_permissions!='') && ((array_key_exists($section, $user_permissions)) && ($user_permissions[$section]=='1')) ) {
|
||||
$permitted = true;
|
||||
}
|
||||
|
||||
foreach ($user_groups as $user_group) {
|
||||
$group_permissions = json_decode($user_group->permissions, true);
|
||||
if (((array_key_exists($section, $group_permissions)) && ($group_permissions[$section]=='1')) ||
|
||||
((array_key_exists('admin', $group_permissions)) && ($group_permissions['admin']=='1'))) {
|
||||
return true;
|
||||
if (((array_key_exists($section, $group_permissions)) && ($group_permissions[$section]=='1'))) {
|
||||
$permitted = true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
return $permitted;
|
||||
}
|
||||
|
||||
public function isSuperUser() {
|
||||
@@ -73,22 +75,19 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
return false;
|
||||
}
|
||||
|
||||
$group_array = array();
|
||||
foreach ($this->groups() as $user_group) {
|
||||
foreach ($this->groups as $user_group) {
|
||||
$group_permissions = json_decode($user_group->permissions, true);
|
||||
$group_array[] = $group_permissions;
|
||||
$group_array = $group_permissions;
|
||||
if ((array_key_exists('superuser', $group_array)) && ($group_permissions['superuser']=='1')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if ((array_key_exists('superuser', $user_permissions)) && ($user_permissions['superuser']=='1')) {
|
||||
return true;
|
||||
} else {
|
||||
if ((array_key_exists('superuser', $group_array)) && ($group_array['superuser']=='1')) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -107,23 +106,32 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the user full name, it simply concatenates
|
||||
* the user first and last name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
/**
|
||||
* Returns the user full name, it simply concatenates
|
||||
* the user first and last name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function fullName()
|
||||
{
|
||||
return "{$this->first_name} {$this->last_name}";
|
||||
}
|
||||
|
||||
public function getFullNameAttribute()
|
||||
{
|
||||
return $this->first_name . " " . $this->last_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the user Gravatar image url.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getCompleteNameAttribute()
|
||||
{
|
||||
return $this->last_name . ", " . $this->first_name . " (" . $this->username . ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the user Gravatar image url.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function gravatar()
|
||||
{
|
||||
|
||||
@@ -132,9 +140,9 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
}
|
||||
|
||||
if ($this->email) {
|
||||
// Generate the Gravatar hash
|
||||
// Generate the Gravatar hash
|
||||
$gravatar = md5(strtolower(trim($this->email)));
|
||||
// Return the Gravatar url
|
||||
// Return the Gravatar url
|
||||
return "//gravatar.com/avatar/".$gravatar;
|
||||
}
|
||||
|
||||
@@ -142,68 +150,74 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get assets assigned to this user
|
||||
*/
|
||||
/**
|
||||
* Get assets assigned to this user
|
||||
*/
|
||||
public function assets()
|
||||
{
|
||||
return $this->hasMany('\App\Models\Asset', 'assigned_to')->withTrashed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get accessories assigned to this user
|
||||
*/
|
||||
/**
|
||||
* Get accessories assigned to this user
|
||||
*/
|
||||
public function accessories()
|
||||
{
|
||||
return $this->belongsToMany('\App\Models\Accessory', 'accessories_users', 'assigned_to', 'accessory_id')->withPivot('id')->withTrashed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get consumables assigned to this user
|
||||
*/
|
||||
/**
|
||||
* Get consumables assigned to this user
|
||||
*/
|
||||
public function consumables()
|
||||
{
|
||||
return $this->belongsToMany('\App\Models\Consumable', 'consumables_users', 'assigned_to', 'consumable_id')->withPivot('id')->withTrashed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get licenses assigned to this user
|
||||
*/
|
||||
/**
|
||||
* Get licenses assigned to this user
|
||||
*/
|
||||
public function licenses()
|
||||
{
|
||||
return $this->belongsToMany('\App\Models\License', 'license_seats', 'assigned_to', 'license_id')->withPivot('id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get action logs for this user
|
||||
*/
|
||||
/**
|
||||
* Get action logs for this user
|
||||
*/
|
||||
public function userlog()
|
||||
{
|
||||
return $this->hasMany('\App\Models\Actionlog', 'checkedout_to')->orderBy('created_at', 'DESC')->withTrashed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the asset's location based on the assigned user
|
||||
**/
|
||||
/**
|
||||
* Get the asset's location based on the assigned user
|
||||
**/
|
||||
public function userloc()
|
||||
{
|
||||
return $this->belongsTo('\App\Models\Location', 'location_id')->withTrashed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the user's manager based on the assigned user
|
||||
**/
|
||||
/**
|
||||
* Get the user's manager based on the assigned user
|
||||
**/
|
||||
public function manager()
|
||||
{
|
||||
return $this->belongsTo('\App\Models\User', 'manager_id')->withTrashed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user groups
|
||||
*/
|
||||
/**
|
||||
* Get user groups
|
||||
*/
|
||||
public function groups()
|
||||
{
|
||||
return $this->belongsToMany('\App\Models\Group', 'users_groups');
|
||||
static $static_cache = null;
|
||||
|
||||
if (!$static_cache) {
|
||||
$static_cache = $this->belongsToMany('\App\Models\Group', 'users_groups');
|
||||
}
|
||||
return $static_cache;
|
||||
//return $this->belongsToMany('\App\Models\Group', 'users_groups');
|
||||
}
|
||||
|
||||
|
||||
@@ -227,16 +241,16 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
return $this->hasMany('\App\Models\Asset', 'id')->withTrashed();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get uploads for this asset
|
||||
*/
|
||||
/**
|
||||
* Get uploads for this asset
|
||||
*/
|
||||
public function uploads()
|
||||
{
|
||||
return $this->hasMany('\App\Models\Actionlog', 'asset_id')
|
||||
->where('asset_type', '=', 'user')
|
||||
->where('action_type', '=', 'uploaded')
|
||||
->whereNotNull('filename')
|
||||
->orderBy('created_at', 'desc');
|
||||
->where('asset_type', '=', 'user')
|
||||
->where('action_type', '=', 'uploaded')
|
||||
->whereNotNull('filename')
|
||||
->orderBy('created_at', 'desc');
|
||||
}
|
||||
|
||||
public function sentryThrottle()
|
||||
@@ -254,10 +268,10 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
return $query->whereNull('deleted_at');
|
||||
}
|
||||
|
||||
/**
|
||||
* Override the SentryUser getPersistCode method for
|
||||
* multiple logins at one time
|
||||
**/
|
||||
/**
|
||||
* Override the SentryUser getPersistCode method for
|
||||
* multiple logins at one time
|
||||
**/
|
||||
public function getPersistCode()
|
||||
{
|
||||
|
||||
@@ -275,8 +289,8 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
public function scopeMatchEmailOrUsername($query, $user_username, $user_email)
|
||||
{
|
||||
return $query->where('email', '=', $user_email)
|
||||
->orWhere('username', '=', $user_username)
|
||||
->orWhere('username', '=', $user_email);
|
||||
->orWhere('username', '=', $user_username)
|
||||
->orWhere('username', '=', $user_email);
|
||||
}
|
||||
|
||||
|
||||
@@ -294,7 +308,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
$email_last_name = $last_name;
|
||||
$user_username = $first_name;
|
||||
|
||||
// There is a last name given
|
||||
// There is a last name given
|
||||
} else {
|
||||
|
||||
$last_name = str_replace($first_name, '', $users_name);
|
||||
@@ -330,46 +344,46 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
return json_decode($this->permissions, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query builder scope to search on text
|
||||
*
|
||||
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
||||
* @param text $search Search term
|
||||
*
|
||||
* @return Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
/**
|
||||
* Query builder scope to search on text
|
||||
*
|
||||
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
||||
* @param text $search Search term
|
||||
*
|
||||
* @return Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
public function scopeTextsearch($query, $search)
|
||||
{
|
||||
|
||||
return $query->where(function ($query) use ($search) {
|
||||
$query->where('users.first_name', 'LIKE', "%$search%")
|
||||
->orWhere('users.last_name', 'LIKE', "%$search%")
|
||||
->orWhere('users.email', 'LIKE', "%$search%")
|
||||
->orWhere('users.username', 'LIKE', "%$search%")
|
||||
->orWhere('users.notes', 'LIKE', "%$search%")
|
||||
->orWhere('users.employee_num', 'LIKE', "%$search%")
|
||||
->orWhere(function ($query) use ($search) {
|
||||
$query->whereHas('userloc', function ($query) use ($search) {
|
||||
$query->where('locations.name', 'LIKE', '%'.$search.'%');
|
||||
});
|
||||
})
|
||||
->orWhere('users.last_name', 'LIKE', "%$search%")
|
||||
->orWhere('users.email', 'LIKE', "%$search%")
|
||||
->orWhere('users.username', 'LIKE', "%$search%")
|
||||
->orWhere('users.notes', 'LIKE', "%$search%")
|
||||
->orWhere('users.employee_num', 'LIKE', "%$search%")
|
||||
->orWhere(function ($query) use ($search) {
|
||||
$query->whereHas('userloc', function ($query) use ($search) {
|
||||
$query->where('locations.name', 'LIKE', '%'.$search.'%');
|
||||
});
|
||||
})
|
||||
|
||||
// Ugly, ugly code because Laravel sucks at self-joins
|
||||
->orWhere(function ($query) use ($search) {
|
||||
$query->whereRaw("users.manager_id IN (select id from users where first_name LIKE '%".$search."%' OR last_name LIKE '%".$search."%') ");
|
||||
});
|
||||
// Ugly, ugly code because Laravel sucks at self-joins
|
||||
->orWhere(function ($query) use ($search) {
|
||||
$query->whereRaw("users.manager_id IN (select id from users where first_name LIKE '%".$search."%' OR last_name LIKE '%".$search."%') ");
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Query builder scope for Deleted users
|
||||
*
|
||||
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
||||
*
|
||||
* @return Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
/**
|
||||
* Query builder scope for Deleted users
|
||||
*
|
||||
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
||||
*
|
||||
* @return Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
|
||||
public function scopeDeleted($query)
|
||||
{
|
||||
@@ -377,28 +391,28 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Query builder scope to order on manager
|
||||
*
|
||||
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
||||
* @param text $order Order
|
||||
*
|
||||
* @return Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
/**
|
||||
* Query builder scope to order on manager
|
||||
*
|
||||
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
||||
* @param text $order Order
|
||||
*
|
||||
* @return Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
public function scopeOrderManager($query, $order)
|
||||
{
|
||||
// Left join here, or it will only return results with parents
|
||||
// Left join here, or it will only return results with parents
|
||||
return $query->leftJoin('users as manager', 'users.manager_id', '=', 'manager.id')->orderBy('manager.first_name', $order)->orderBy('manager.last_name', $order);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query builder scope to order on company
|
||||
*
|
||||
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
||||
* @param text $order Order
|
||||
*
|
||||
* @return Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
/**
|
||||
* Query builder scope to order on company
|
||||
*
|
||||
* @param Illuminate\Database\Query\Builder $query Query builder instance
|
||||
* @param text $order Order
|
||||
*
|
||||
* @return Illuminate\Database\Query\Builder Modified query builder
|
||||
*/
|
||||
public function scopeOrderLocation($query, $order)
|
||||
{
|
||||
return $query->leftJoin('locations', 'users.location_id', '=', 'locations.id')->orderBy('locations.name', $order);
|
||||
|
||||
@@ -13,7 +13,6 @@ class AuthServiceProvider extends ServiceProvider
|
||||
* @var array
|
||||
*/
|
||||
protected $policies = [
|
||||
'App\Model' => 'App\Policies\ModelPolicy',
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -26,6 +25,249 @@ class AuthServiceProvider extends ServiceProvider
|
||||
{
|
||||
$this->registerPolicies($gate);
|
||||
|
||||
//
|
||||
|
||||
// --------------------------------
|
||||
// BEFORE ANYTHING ELSE
|
||||
// --------------------------------
|
||||
// If this condition is true, ANYTHING else below will be asssumed
|
||||
// to be true. This can cause weird blade behavior.
|
||||
$gate->before(function ($user) {
|
||||
if ($user->isSuperUser()) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
// --------------------------------
|
||||
// GENERAL GATES
|
||||
// These control general sections of the admin
|
||||
// --------------------------------
|
||||
$gate->define('admin', function ($user) {
|
||||
if ($user->hasAccess('admin')) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
# -----------------------------------------
|
||||
# Reports
|
||||
# -----------------------------------------
|
||||
$gate->define('reports.view', function ($user) {
|
||||
if ($user->hasAccess('reports.view')) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
# -----------------------------------------
|
||||
# Assets
|
||||
# -----------------------------------------
|
||||
$gate->define('assets.view', function ($user) {
|
||||
if (($user->hasAccess('assets.view')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('assets.view.requestable', function ($user) {
|
||||
if (($user->hasAccess('assets.view.requestable')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('assets.create', function ($user) {
|
||||
if (($user->hasAccess('assets.create')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('assets.checkout', function ($user) {
|
||||
if (($user->hasAccess('assets.checkout')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('assets.checkin', function ($user) {
|
||||
if (($user->hasAccess('assets.checkin')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
# -----------------------------------------
|
||||
# Accessories
|
||||
# -----------------------------------------
|
||||
$gate->define('accessories.view', function ($user) {
|
||||
if (($user->hasAccess('accessories.view')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('accessories.create', function ($user) {
|
||||
if (($user->hasAccess('accessories.create')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('accessories.edit', function ($user) {
|
||||
if (($user->hasAccess('accessories.edit')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('accessories.delete', function ($user) {
|
||||
if (($user->hasAccess('accessories.delete')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('accessories.checkout', function ($user) {
|
||||
if (($user->hasAccess('accessories.checkout')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('accessories.checkin', function ($user) {
|
||||
if (($user->hasAccess('accessories.checkin')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
# -----------------------------------------
|
||||
# Consumables
|
||||
# -----------------------------------------
|
||||
$gate->define('consumables.view', function ($user) {
|
||||
if (($user->hasAccess('consumables.view')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('consumables.create', function ($user) {
|
||||
if (($user->hasAccess('consumables.create')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('consumables.edit', function ($user) {
|
||||
if (($user->hasAccess('consumables.edit')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('consumables.delete', function ($user) {
|
||||
if (($user->hasAccess('consumables.delete')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('consumables.checkout', function ($user) {
|
||||
if (($user->hasAccess('consumables.checkout')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('consumables.checkin', function ($user) {
|
||||
if (($user->hasAccess('consumables.checkin')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
# -----------------------------------------
|
||||
# Users
|
||||
# -----------------------------------------
|
||||
|
||||
$gate->define('users.view', function ($user) {
|
||||
if (($user->hasAccess('users.view')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('users.create', function ($user) {
|
||||
if (($user->hasAccess('users.create')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('users.edit', function ($user) {
|
||||
if (($user->hasAccess('users.edit')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('users.delete', function ($user) {
|
||||
if (($user->hasAccess('users.delete')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
# -----------------------------------------
|
||||
# Components
|
||||
# -----------------------------------------
|
||||
$gate->define('components.view', function ($user) {
|
||||
if (($user->hasAccess('components.create')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('components.create', function ($user) {
|
||||
if (($user->hasAccess('components.create')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('components.edit', function ($user) {
|
||||
if (($user->hasAccess('components.edit')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('components.delete', function ($user) {
|
||||
if (($user->hasAccess('components.delete')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
# -----------------------------------------
|
||||
# Licenses
|
||||
# -----------------------------------------
|
||||
$gate->define('licenses.view', function ($user) {
|
||||
if (($user->hasAccess('licenses.view')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('licenses.create', function ($user) {
|
||||
if (($user->hasAccess('licenses.create')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('licenses.edit', function ($user) {
|
||||
if (($user->hasAccess('licenses.edit')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('licenses.delete', function ($user) {
|
||||
if (($user->hasAccess('licenses.delete')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('licenses.checkout', function ($user) {
|
||||
if (($user->hasAccess('licenses.checkout')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
$gate->define('licenses.checkin', function ($user) {
|
||||
if (($user->hasAccess('licenses.checkin')) || ($user->hasAccess('admin'))) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,8 +99,8 @@ return array(
|
||||
'logs' => false, // Add the latest log messages
|
||||
'files' => false, // Show the included files
|
||||
'config' => false, // Display config settings
|
||||
'auth' => false, // Display Laravel authentication status
|
||||
'gate' => false, // Display Laravel Gate checks
|
||||
'auth' => true, // Display Laravel authentication status
|
||||
'gate' => true, // Display Laravel Gate checks
|
||||
'session' => true, // Display session data
|
||||
),
|
||||
|
||||
@@ -119,8 +119,8 @@ return array(
|
||||
),
|
||||
'db' => array(
|
||||
'with_params' => true, // Render SQL with the parameters substituted
|
||||
'timeline' => false, // Add the queries to the timeline
|
||||
'backtrace' => false, // EXPERIMENTAL: Use a backtrace to find the origin of the query in your files.
|
||||
'timeline' => true, // Add the queries to the timeline
|
||||
'backtrace' => true, // EXPERIMENTAL: Use a backtrace to find the origin of the query in your files.
|
||||
'explain' => array( // EXPERIMENTAL: Show EXPLAIN output on queries
|
||||
'enabled' => false,
|
||||
'types' => array('SELECT'), // array('SELECT', 'INSERT', 'UPDATE', 'DELETE'); for MySQL 5.6.3+
|
||||
|
||||
@@ -6,7 +6,7 @@ return array(
|
||||
array(
|
||||
'permission' => 'superuser',
|
||||
'label' => 'Super User',
|
||||
'note' => 'Determines whether the user has full access to all aspects of the admin. ',
|
||||
'note' => 'Determines whether the user has full access to all aspects of the admin. This setting overrides any more specific permissions throughout the system. ',
|
||||
'display' => true,
|
||||
),
|
||||
),
|
||||
@@ -15,16 +15,22 @@ return array(
|
||||
array(
|
||||
'permission' => 'admin',
|
||||
'label' => '',
|
||||
'note' => 'Determines whether the user has access to most aspects of the admin.',
|
||||
'note' => 'Determines whether the user has access to most aspects of the admin. ',
|
||||
'display' => true,
|
||||
),
|
||||
array(
|
||||
'permission' => 'admin.api_key',
|
||||
'label' => 'Create API Key',
|
||||
'note' => 'Determines whether the user can access the API via API key.',
|
||||
'display' => false,
|
||||
),
|
||||
),
|
||||
|
||||
'Reports' => array(
|
||||
array(
|
||||
'permission' => 'reports.view',
|
||||
'label' => '',
|
||||
'note' => 'Determines whether the user has the abiity to view reports.',
|
||||
'label' => 'View',
|
||||
'note' => 'Determines whether the user has the ability to view reports.',
|
||||
'display' => true,
|
||||
),
|
||||
),
|
||||
@@ -32,64 +38,92 @@ return array(
|
||||
'Assets' => array(
|
||||
array(
|
||||
'permission' => 'assets.view',
|
||||
'label' => '',
|
||||
'label' => 'View ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
'display' => true,
|
||||
),
|
||||
array(
|
||||
'permission' => 'assets.create',
|
||||
'label' => 'Create Assets',
|
||||
'label' => 'Create ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'assets.edit',
|
||||
'label' => 'Edit Assets',
|
||||
'label' => 'Edit ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'assets.delete',
|
||||
'label' => 'Delete Assets',
|
||||
'label' => 'Delete ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'assets.checkout',
|
||||
'label' => 'View Assets',
|
||||
'label' => 'Checkout ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
|
||||
array(
|
||||
'permission' => 'assets.checkin',
|
||||
'label' => 'Checkin ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
|
||||
array(
|
||||
'permission' => 'assets.audit',
|
||||
'label' => 'Audit ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
|
||||
|
||||
array(
|
||||
'permission' => 'assets.view.requestable',
|
||||
'label' => 'View Requestable Assets',
|
||||
'note' => '',
|
||||
'display' => true,
|
||||
),
|
||||
),
|
||||
|
||||
'Accessories' => array(
|
||||
array(
|
||||
'permission' => 'accessories.view',
|
||||
'label' => '',
|
||||
'label' => 'View ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
'display' => true,
|
||||
),
|
||||
array(
|
||||
'permission' => 'accessory.create',
|
||||
'label' => 'Create Assets',
|
||||
'label' => 'Create ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'accessories.edit',
|
||||
'label' => 'Edit Assets',
|
||||
'label' => 'Edit ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'accessories.delete',
|
||||
'label' => 'Delete Assets',
|
||||
'label' => 'Delete ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'accessories.checkout',
|
||||
'label' => 'View Assets',
|
||||
'label' => 'Checkout ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'accessories.checkin',
|
||||
'label' => 'Checkin ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
@@ -98,31 +132,31 @@ return array(
|
||||
'Consumables' => array(
|
||||
array(
|
||||
'permission' => 'consumables.view',
|
||||
'label' => '',
|
||||
'label' => 'View',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
'display' => true,
|
||||
),
|
||||
array(
|
||||
'permission' => 'consumables.create',
|
||||
'label' => 'Create Consumables',
|
||||
'label' => 'Create ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'consumables.edit',
|
||||
'label' => 'Edit Consumables',
|
||||
'label' => 'Edit ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'consumables.delete',
|
||||
'label' => 'Delete Consumables',
|
||||
'label' => 'Delete ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'consumables.checkout',
|
||||
'label' => 'Checkout Consumables',
|
||||
'label' => 'Checkout ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
@@ -132,9 +166,9 @@ return array(
|
||||
'Licenses' => array(
|
||||
array(
|
||||
'permission' => 'licenses.view',
|
||||
'label' => '',
|
||||
'label' => 'View',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
'display' => true,
|
||||
),
|
||||
array(
|
||||
'permission' => 'licenses.create',
|
||||
@@ -172,9 +206,9 @@ return array(
|
||||
'Components' => array(
|
||||
array(
|
||||
'permission' => 'components.view',
|
||||
'label' => '',
|
||||
'label' => 'View',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
'display' => true,
|
||||
),
|
||||
array(
|
||||
'permission' => 'components.create',
|
||||
@@ -200,15 +234,21 @@ return array(
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
array(
|
||||
'permission' => 'components.checkin',
|
||||
'label' => 'Checkin Components',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
'Users' => array(
|
||||
array(
|
||||
'permission' => 'users.view',
|
||||
'label' => 'View Users',
|
||||
'label' => 'View ',
|
||||
'note' => '',
|
||||
'display' => false,
|
||||
'display' => true,
|
||||
),
|
||||
array(
|
||||
'permission' => 'users.create',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
return array (
|
||||
'app_version' => 'v3.0.0-dev',
|
||||
'hash_version' => 'v3.0.0-dev-g6d810a9',
|
||||
'app_version' => 'v3.0.0-dev-3',
|
||||
'hash_version' => 'v3.0.0-dev-3-g6d810a9',
|
||||
);
|
||||
|
||||
@@ -14,8 +14,8 @@ class RemoveOptionKeysFromSettingsTable extends Migration
|
||||
{
|
||||
Schema::table('settings', function (Blueprint $table) {
|
||||
//
|
||||
$table->dropColumn('option_name');
|
||||
$table->dropColumn('option_value');
|
||||
if(Schema::hasColumn('settings', 'option_name'))
|
||||
$table->dropColumn('option_name');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ class RemoveOptionKeysFromSettingsTable extends Migration
|
||||
{
|
||||
Schema::table('Settings', function (Blueprint $table) {
|
||||
//
|
||||
$table->string('option_name')->nullable();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class RemoveOptionValueFromSettingsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('settings', function (Blueprint $table) {
|
||||
//
|
||||
if(Schema::hasColumn('settings', 'option_value'))
|
||||
$table->dropColumn('option_value');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
Schema::table('settings', function (Blueprint $table) {
|
||||
$table->string('option_value')->nullable();
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddEmailDomainAndFormatToSettings extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('settings', function (Blueprint $table) {
|
||||
$table->string('email_domain')->nullable()->default(NULL);
|
||||
$table->string('email_format')->nullable()->default('filastname');
|
||||
$table->string('username_format')->nullable()->default('filastname');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('settings', function ($table) {
|
||||
$table->dropColumn(
|
||||
'email_domain',
|
||||
'email_format',
|
||||
'username_format'
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -57,7 +57,6 @@ body {
|
||||
.content-wrapper,
|
||||
.right-side,
|
||||
.main-footer {
|
||||
transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out;
|
||||
transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out;
|
||||
margin-left: 230px;
|
||||
z-index: 820;
|
||||
@@ -85,7 +84,6 @@ body {
|
||||
.sidebar-open .content-wrapper,
|
||||
.sidebar-open .right-side,
|
||||
.sidebar-open .main-footer {
|
||||
-webkit-transform: translate(230px, 0);
|
||||
transform: translate(230px, 0);
|
||||
}
|
||||
}
|
||||
@@ -399,6 +397,21 @@ a:focus {
|
||||
right: 40px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991px) {
|
||||
.content-header {
|
||||
padding-top: 110px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991px) {
|
||||
ul.sidebar-menu {
|
||||
padding-top: 120px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991px) {
|
||||
.sidebar-toggle-mobile a {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Component: Sidebar
|
||||
* ------------------
|
||||
@@ -412,7 +425,6 @@ a:focus {
|
||||
min-height: 100%;
|
||||
width: 230px;
|
||||
z-index: 810;
|
||||
transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
@@ -424,21 +436,18 @@ a:focus {
|
||||
@media (max-width: 767px) {
|
||||
.main-sidebar,
|
||||
.left-side {
|
||||
-webkit-transform: translate(-230px, 0);
|
||||
transform: translate(-230px, 0);
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.sidebar-collapse .main-sidebar,
|
||||
.sidebar-collapse .left-side {
|
||||
-webkit-transform: translate(-230px, 0);
|
||||
transform: translate(-230px, 0);
|
||||
}
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.sidebar-open .main-sidebar,
|
||||
.sidebar-open .left-side {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
@@ -524,7 +533,6 @@ a:focus {
|
||||
margin-top: 3px;
|
||||
}
|
||||
.sidebar-menu li.active > a > .fa-angle-left {
|
||||
-webkit-transform: rotate(-90deg);
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
.sidebar-menu li.active > .treeview-menu {
|
||||
@@ -568,7 +576,6 @@ a:focus {
|
||||
z-index: 840;
|
||||
}
|
||||
.sidebar-mini.sidebar-collapse .main-sidebar {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
width: 50px!important;
|
||||
z-index: 850;
|
||||
@@ -1135,58 +1142,30 @@ a:focus {
|
||||
/* Add fade animation to dropdown menus by appending
|
||||
the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/
|
||||
.open:not(.dropup) > .animated-dropdown-menu {
|
||||
-webkit-backface-visibility: visible !important;
|
||||
backface-visibility: visible !important;
|
||||
-webkit-animation: flipInX 0.7s both;
|
||||
animation: flipInX 0.7s both;
|
||||
}
|
||||
@keyframes flipInX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes flipInX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
-webkit-transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
-webkit-transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
/* Fix dropdown menu in navbars */
|
||||
.navbar-custom-menu > .navbar-nav > li {
|
||||
position: relative;
|
||||
@@ -2029,102 +2008,6 @@ a:focus {
|
||||
.progress-description {
|
||||
margin: 0;
|
||||
}
|
||||
/*
|
||||
* Component: Timeline
|
||||
* -------------------
|
||||
*/
|
||||
.timeline {
|
||||
position: relative;
|
||||
margin: 0 0 30px 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.timeline:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 4px;
|
||||
background: #ddd;
|
||||
left: 31px;
|
||||
margin: 0;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.timeline > li {
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.timeline > li:before,
|
||||
.timeline > li:after {
|
||||
content: " ";
|
||||
display: table;
|
||||
}
|
||||
.timeline > li:after {
|
||||
clear: both;
|
||||
}
|
||||
.timeline > li > .timeline-item {
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 3px;
|
||||
margin-top: 0;
|
||||
background: #fff;
|
||||
color: #444;
|
||||
margin-left: 60px;
|
||||
margin-right: 15px;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
}
|
||||
.timeline > li > .timeline-item > .time {
|
||||
color: #999;
|
||||
float: right;
|
||||
padding: 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.timeline > li > .timeline-item > .timeline-header {
|
||||
margin: 0;
|
||||
color: #555;
|
||||
border-bottom: 1px solid #f4f4f4;
|
||||
padding: 10px;
|
||||
font-size: 16px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
.timeline > li > .timeline-item > .timeline-header > a {
|
||||
font-weight: 600;
|
||||
}
|
||||
.timeline > li > .timeline-item > .timeline-body,
|
||||
.timeline > li > .timeline-item > .timeline-footer {
|
||||
padding: 10px;
|
||||
}
|
||||
.timeline > li > .fa,
|
||||
.timeline > li > .glyphicon,
|
||||
.timeline > li > .ion {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
font-size: 15px;
|
||||
line-height: 30px;
|
||||
position: absolute;
|
||||
color: #666;
|
||||
background: #d2d6de;
|
||||
border-radius: 50%;
|
||||
text-align: center;
|
||||
left: 18px;
|
||||
top: 0;
|
||||
}
|
||||
.timeline > .time-label > span {
|
||||
font-weight: 600;
|
||||
padding: 5px;
|
||||
display: inline-block;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.timeline-inverse > li > .timeline-item {
|
||||
background: #f0f0f0;
|
||||
border: 1px solid #ddd;
|
||||
box-shadow: none;
|
||||
}
|
||||
.timeline-inverse > li > .timeline-item > .timeline-header {
|
||||
border-bottom-color: #ddd;
|
||||
}
|
||||
/*
|
||||
* Component: Button
|
||||
* -----------------
|
||||
@@ -2576,11 +2459,9 @@ table.text-center th {
|
||||
padding: 0;
|
||||
}
|
||||
.direct-chat.chat-pane-open .direct-chat-contacts {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
.direct-chat-messages {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
padding: 10px;
|
||||
height: 250px;
|
||||
@@ -2603,7 +2484,6 @@ table.text-center th {
|
||||
}
|
||||
.direct-chat-messages,
|
||||
.direct-chat-contacts {
|
||||
transition: -webkit-transform 0.5s ease-in-out;
|
||||
transition: transform 0.5s ease-in-out;
|
||||
}
|
||||
.direct-chat-text {
|
||||
@@ -2667,11 +2547,9 @@ table.text-center th {
|
||||
color: #999;
|
||||
}
|
||||
.direct-chat-contacts-open .direct-chat-contacts {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
.direct-chat-contacts {
|
||||
-webkit-transform: translate(101%, 0);
|
||||
transform: translate(101%, 0);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
@@ -4024,11 +3902,9 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
line-height: 30px;
|
||||
}
|
||||
.fc-color-picker > li .fa {
|
||||
transition: -webkit-transform linear 0.3s;
|
||||
transition: transform linear 0.3s;
|
||||
}
|
||||
.fc-color-picker > li .fa:hover {
|
||||
-webkit-transform: rotate(30deg);
|
||||
transform: rotate(30deg);
|
||||
}
|
||||
#add-new-event {
|
||||
@@ -4723,7 +4599,6 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
.main-footer {
|
||||
margin-left: 0!important;
|
||||
min-height: 0!important;
|
||||
-webkit-transform: translate(0, 0) !important;
|
||||
transform: translate(0, 0) !important;
|
||||
}
|
||||
.fixed .content-wrapper,
|
||||
@@ -4793,14 +4668,6 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
background: #367fa9;
|
||||
}
|
||||
}
|
||||
.skin-blue .main-header .logo {
|
||||
background-color: #367fa9;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent;
|
||||
}
|
||||
.skin-blue .main-header .logo:hover {
|
||||
background-color: #357ca5;
|
||||
}
|
||||
.skin-blue .main-header li.user-header {
|
||||
background-color: #3c8dbc;
|
||||
}
|
||||
@@ -4881,13 +4748,8 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
.skin-blue.layout-top-nav .main-header > .logo {
|
||||
background-color: #3c8dbc;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent;
|
||||
}
|
||||
.skin-blue.layout-top-nav .main-header > .logo:hover {
|
||||
background-color: #3b8ab8;
|
||||
.skin-blue.layout-top-nav .main-header > .logo .logo-variant {
|
||||
background-color: none;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -4947,8 +4809,11 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
background-color: inherit;
|
||||
}
|
||||
.main-header .logo {
|
||||
min-width: 430px;
|
||||
width: 100% !important;
|
||||
white-space: nowrap;
|
||||
text-align: left;
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
.huge {
|
||||
font-size: 40px;
|
||||
@@ -5235,114 +5100,66 @@ a.accordion-header {
|
||||
pointer-events: none;
|
||||
}
|
||||
/*END Form Wizard*/
|
||||
.left-navblock {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
text-align: left;
|
||||
color: white;
|
||||
padding: 0px;
|
||||
/* adjust based on your layout */
|
||||
}
|
||||
.skin-blue .main-header .navbar .dropdown-menu li a {
|
||||
color: #333;
|
||||
}
|
||||
a.logo.no-hover a:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* WRENCHING */
|
||||
@-webkit-keyframes wrench {
|
||||
0% {
|
||||
-webkit-transform: rotate(-12deg);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: rotate(12deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
28% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
38% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
48% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
58% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
68% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
@keyframes wrench {
|
||||
0% {
|
||||
-webkit-transform: rotate(-12deg);
|
||||
transform: rotate(-12deg);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: rotate(12deg);
|
||||
transform: rotate(12deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
28% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
38% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
48% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
58% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
68% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
@@ -5360,91 +5177,44 @@ a.accordion-header {
|
||||
-ms-transform-origin-x: 90%;
|
||||
-ms-transform-origin-y: 35%;
|
||||
-ms-transform-origin-z: initial;
|
||||
-webkit-animation: wrench 2.5s ease infinite;
|
||||
animation: wrench 2.5s ease infinite;
|
||||
transform-origin-x: 90%;
|
||||
transform-origin-y: 35%;
|
||||
transform-origin-z: initial;
|
||||
}
|
||||
/* BELL */
|
||||
@-webkit-keyframes ring {
|
||||
0% {
|
||||
-webkit-transform: rotate(-15deg);
|
||||
}
|
||||
2% {
|
||||
-webkit-transform: rotate(15deg);
|
||||
}
|
||||
4% {
|
||||
-webkit-transform: rotate(-18deg);
|
||||
}
|
||||
6% {
|
||||
-webkit-transform: rotate(18deg);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: rotate(-22deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: rotate(22deg);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: rotate(-18deg);
|
||||
}
|
||||
14% {
|
||||
-webkit-transform: rotate(18deg);
|
||||
}
|
||||
16% {
|
||||
-webkit-transform: rotate(-12deg);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: rotate(12deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
@keyframes ring {
|
||||
0% {
|
||||
-webkit-transform: rotate(-15deg);
|
||||
transform: rotate(-15deg);
|
||||
}
|
||||
2% {
|
||||
-webkit-transform: rotate(15deg);
|
||||
transform: rotate(15deg);
|
||||
}
|
||||
4% {
|
||||
-webkit-transform: rotate(-18deg);
|
||||
transform: rotate(-18deg);
|
||||
}
|
||||
6% {
|
||||
-webkit-transform: rotate(18deg);
|
||||
transform: rotate(18deg);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: rotate(-22deg);
|
||||
transform: rotate(-22deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: rotate(22deg);
|
||||
transform: rotate(22deg);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: rotate(-18deg);
|
||||
transform: rotate(-18deg);
|
||||
}
|
||||
14% {
|
||||
-webkit-transform: rotate(18deg);
|
||||
transform: rotate(18deg);
|
||||
}
|
||||
16% {
|
||||
-webkit-transform: rotate(-12deg);
|
||||
transform: rotate(-12deg);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: rotate(12deg);
|
||||
transform: rotate(12deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
@@ -5462,142 +5232,68 @@ a.accordion-header {
|
||||
-ms-transform-origin-x: 50%;
|
||||
-ms-transform-origin-y: 0px;
|
||||
-ms-transform-origin-z: initial;
|
||||
-webkit-animation: ring 2s ease infinite;
|
||||
animation: ring 2s ease infinite;
|
||||
transform-origin-x: 50%;
|
||||
transform-origin-y: 0px;
|
||||
transform-origin-z: initial;
|
||||
}
|
||||
/* VERTICAL */
|
||||
@-webkit-keyframes vertical {
|
||||
0% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
}
|
||||
4% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
}
|
||||
16% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
}
|
||||
22% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
@keyframes vertical {
|
||||
0% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
transform: translate(0, -3px);
|
||||
}
|
||||
4% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
transform: translate(0, 3px);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
transform: translate(0, -3px);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
transform: translate(0, 3px);
|
||||
}
|
||||
16% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
transform: translate(0, -3px);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
transform: translate(0, 3px);
|
||||
}
|
||||
22% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
.faa-vertical.animated,
|
||||
.faa-vertical.animated-hover:hover {
|
||||
-webkit-animation: vertical 2s ease infinite;
|
||||
animation: vertical 2s ease infinite;
|
||||
}
|
||||
/* HORIZONTAL */
|
||||
@-webkit-keyframes horizontal {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
6% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
}
|
||||
24% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
}
|
||||
36% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
@keyframes horizontal {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
6% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
transform: translate(5px, 0);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
transform: translate(5px, 0);
|
||||
}
|
||||
24% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
transform: translate(5px, 0);
|
||||
}
|
||||
36% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
.faa-horizontal.animated,
|
||||
.faa-horizontal.animated-hover:hover {
|
||||
-webkit-animation: horizontal 2s ease infinite;
|
||||
animation: horizontal 2s ease infinite;
|
||||
}
|
||||
/* FLASHING */
|
||||
@-webkit-keyframes flash {
|
||||
0%,
|
||||
100%,
|
||||
50% {
|
||||
opacity: 1;
|
||||
}
|
||||
25%,
|
||||
75% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes flash {
|
||||
0%,
|
||||
100%,
|
||||
@@ -5611,132 +5307,71 @@ a.accordion-header {
|
||||
}
|
||||
.faa-flash.animated,
|
||||
.faa-flash.animated-hover:hover {
|
||||
-webkit-animation: flash 2s ease infinite;
|
||||
animation: flash 2s ease infinite;
|
||||
}
|
||||
/* BOUNCE */
|
||||
@-webkit-keyframes bounce {
|
||||
0%,
|
||||
100%,
|
||||
20%,
|
||||
50%,
|
||||
80% {
|
||||
-webkit-transform: translateY(0);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: translateY(-15px);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: translateY(-15px);
|
||||
}
|
||||
}
|
||||
@keyframes bounce {
|
||||
0%,
|
||||
10%,
|
||||
20%,
|
||||
50%,
|
||||
80% {
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: translateY(-15px);
|
||||
transform: translateY(-15px);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: translateY(-15px);
|
||||
transform: translateY(-15px);
|
||||
}
|
||||
}
|
||||
.faa-bounce.animated,
|
||||
.faa-bounce.animated-hover:hover {
|
||||
-webkit-animation: bounce 2s ease infinite;
|
||||
animation: bounce 2s ease infinite;
|
||||
}
|
||||
/* SPIN */
|
||||
@-webkit-keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
.faa-spin.animated,
|
||||
.faa-spin.animated-hover:hover {
|
||||
-webkit-animation: spin 1.5s linear infinite;
|
||||
animation: spin 1.5s linear infinite;
|
||||
}
|
||||
/* FLOAT */
|
||||
@-webkit-keyframes float {
|
||||
0% {
|
||||
-webkit-transform: translateY(0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translateY(-6px);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: translateY(0);
|
||||
}
|
||||
}
|
||||
@keyframes float {
|
||||
0% {
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translateY(-6px);
|
||||
transform: translateY(-6px);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
.faa-float.animated,
|
||||
.faa-float.animated-hover:hover {
|
||||
-webkit-animation: float 2s linear infinite;
|
||||
animation: float 2s linear infinite;
|
||||
}
|
||||
/* PULSE */
|
||||
@-webkit-keyframes pulse {
|
||||
0% {
|
||||
-webkit-transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: scale(0.8);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: scale(1);
|
||||
}
|
||||
}
|
||||
@keyframes pulse {
|
||||
0% {
|
||||
-webkit-transform: scale(1.1);
|
||||
transform: scale(1.1);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: scale(0.8);
|
||||
transform: scale(0.8);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
.faa-pulse.animated,
|
||||
.faa-pulse.animated-hover:hover {
|
||||
-webkit-animation: pulse 2s linear infinite;
|
||||
animation: pulse 2s linear infinite;
|
||||
}
|
||||
/* SHAKE */
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -34217,6 +34217,47 @@ License: https://github.com/ashleydw/lightbox/blob/master/LICENSE
|
||||
* @param {JSON} settings Insulated `window.snipeit.settings` object.
|
||||
* @return {IIFE} Immediately invoked. Returns self.
|
||||
*/
|
||||
|
||||
|
||||
var pieOptions = {
|
||||
//Boolean - Whether we should show a stroke on each segment
|
||||
segmentShowStroke: true,
|
||||
//String - The colour of each segment stroke
|
||||
segmentStrokeColor: "#fff",
|
||||
//Number - The width of each segment stroke
|
||||
segmentStrokeWidth: 1,
|
||||
//Number - The percentage of the chart that we cut out of the middle
|
||||
percentageInnerCutout: 50, // This is 0 for Pie charts
|
||||
//Number - Amount of animation steps
|
||||
animationSteps: 100,
|
||||
//String - Animation easing effect
|
||||
animationEasing: "easeOutBounce",
|
||||
//Boolean - Whether we animate the rotation of the Doughnut
|
||||
animateRotate: true,
|
||||
//Boolean - Whether we animate scaling the Doughnut from the centre
|
||||
animateScale: false,
|
||||
//Boolean - whether to make the chart responsive to window resizing
|
||||
responsive: true,
|
||||
// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
|
||||
maintainAspectRatio: false,
|
||||
|
||||
//String - A legend template
|
||||
legendTemplate: "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li>" +
|
||||
"<i class='fa fa-circle-o' style='color: <%=segments[i].fillColor%>'></i>" +
|
||||
"<%if(segments[i].label){%><%=segments[i].label%><%}%> foo</li><%}%></ul>",
|
||||
//String - A tooltip template
|
||||
tooltipTemplate: "<%=value %> <%=label%> "
|
||||
};
|
||||
console.dir(pieOptions);
|
||||
//Create pie or douhnut chart
|
||||
// You can switch between pie and douhnut using the method below.
|
||||
//pieChart.Doughnut(PieData, pieOptions);
|
||||
//-----------------
|
||||
//- END PIE CHART -
|
||||
//-----------------
|
||||
|
||||
|
||||
|
||||
(function($, settings) {
|
||||
var Components = {};
|
||||
Components.modals = {};
|
||||
@@ -34262,6 +34303,9 @@ License: https://github.com/ashleydw/lightbox/blob/master/LICENSE
|
||||
});
|
||||
}(jQuery, window.snipeit.settings));
|
||||
|
||||
|
||||
|
||||
|
||||
/*! AdminLTE app.js
|
||||
* ================
|
||||
* Main JS application file for AdminLTE v2. This file
|
||||
@@ -34280,6 +34324,7 @@ if (typeof jQuery === "undefined") {
|
||||
throw new Error("AdminLTE requires jQuery");
|
||||
}
|
||||
|
||||
|
||||
/* AdminLTE
|
||||
*
|
||||
* @type Object
|
||||
@@ -35008,4 +35053,13 @@ function _init() {
|
||||
});
|
||||
};
|
||||
}(jQuery));
|
||||
|
||||
//-------------
|
||||
//- PIE CHART -
|
||||
//-------------
|
||||
// Get context with jQuery - using jQuery's .get() method.
|
||||
|
||||
|
||||
|
||||
|
||||
//# sourceMappingURL=all.js.map
|
||||
|
||||
File diff suppressed because one or more lines are too long
13846
public/assets/js/plugins/chartjs/Chart.bundle.js
Executable file
13846
public/assets/js/plugins/chartjs/Chart.bundle.js
Executable file
File diff suppressed because it is too large
Load Diff
16
public/assets/js/plugins/chartjs/Chart.bundle.min.js
vendored
Executable file
16
public/assets/js/plugins/chartjs/Chart.bundle.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
12422
public/assets/js/plugins/chartjs/Chart.js
vendored
12422
public/assets/js/plugins/chartjs/Chart.js
vendored
File diff suppressed because it is too large
Load Diff
14
public/assets/js/plugins/chartjs/Chart.min.js
vendored
14
public/assets/js/plugins/chartjs/Chart.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -57,7 +57,6 @@ body {
|
||||
.content-wrapper,
|
||||
.right-side,
|
||||
.main-footer {
|
||||
transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out;
|
||||
transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out;
|
||||
margin-left: 230px;
|
||||
z-index: 820;
|
||||
@@ -85,7 +84,6 @@ body {
|
||||
.sidebar-open .content-wrapper,
|
||||
.sidebar-open .right-side,
|
||||
.sidebar-open .main-footer {
|
||||
-webkit-transform: translate(230px, 0);
|
||||
transform: translate(230px, 0);
|
||||
}
|
||||
}
|
||||
@@ -399,6 +397,21 @@ a:focus {
|
||||
right: 40px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991px) {
|
||||
.content-header {
|
||||
padding-top: 110px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991px) {
|
||||
ul.sidebar-menu {
|
||||
padding-top: 120px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991px) {
|
||||
.sidebar-toggle-mobile a {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Component: Sidebar
|
||||
* ------------------
|
||||
@@ -412,7 +425,6 @@ a:focus {
|
||||
min-height: 100%;
|
||||
width: 230px;
|
||||
z-index: 810;
|
||||
transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
@@ -424,21 +436,18 @@ a:focus {
|
||||
@media (max-width: 767px) {
|
||||
.main-sidebar,
|
||||
.left-side {
|
||||
-webkit-transform: translate(-230px, 0);
|
||||
transform: translate(-230px, 0);
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.sidebar-collapse .main-sidebar,
|
||||
.sidebar-collapse .left-side {
|
||||
-webkit-transform: translate(-230px, 0);
|
||||
transform: translate(-230px, 0);
|
||||
}
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.sidebar-open .main-sidebar,
|
||||
.sidebar-open .left-side {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
@@ -524,7 +533,6 @@ a:focus {
|
||||
margin-top: 3px;
|
||||
}
|
||||
.sidebar-menu li.active > a > .fa-angle-left {
|
||||
-webkit-transform: rotate(-90deg);
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
.sidebar-menu li.active > .treeview-menu {
|
||||
@@ -568,7 +576,6 @@ a:focus {
|
||||
z-index: 840;
|
||||
}
|
||||
.sidebar-mini.sidebar-collapse .main-sidebar {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
width: 50px!important;
|
||||
z-index: 850;
|
||||
@@ -1135,58 +1142,30 @@ a:focus {
|
||||
/* Add fade animation to dropdown menus by appending
|
||||
the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/
|
||||
.open:not(.dropup) > .animated-dropdown-menu {
|
||||
-webkit-backface-visibility: visible !important;
|
||||
backface-visibility: visible !important;
|
||||
-webkit-animation: flipInX 0.7s both;
|
||||
animation: flipInX 0.7s both;
|
||||
}
|
||||
@keyframes flipInX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes flipInX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
-webkit-transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
-webkit-transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
/* Fix dropdown menu in navbars */
|
||||
.navbar-custom-menu > .navbar-nav > li {
|
||||
position: relative;
|
||||
@@ -2029,102 +2008,6 @@ a:focus {
|
||||
.progress-description {
|
||||
margin: 0;
|
||||
}
|
||||
/*
|
||||
* Component: Timeline
|
||||
* -------------------
|
||||
*/
|
||||
.timeline {
|
||||
position: relative;
|
||||
margin: 0 0 30px 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.timeline:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 4px;
|
||||
background: #ddd;
|
||||
left: 31px;
|
||||
margin: 0;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.timeline > li {
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.timeline > li:before,
|
||||
.timeline > li:after {
|
||||
content: " ";
|
||||
display: table;
|
||||
}
|
||||
.timeline > li:after {
|
||||
clear: both;
|
||||
}
|
||||
.timeline > li > .timeline-item {
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 3px;
|
||||
margin-top: 0;
|
||||
background: #fff;
|
||||
color: #444;
|
||||
margin-left: 60px;
|
||||
margin-right: 15px;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
}
|
||||
.timeline > li > .timeline-item > .time {
|
||||
color: #999;
|
||||
float: right;
|
||||
padding: 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.timeline > li > .timeline-item > .timeline-header {
|
||||
margin: 0;
|
||||
color: #555;
|
||||
border-bottom: 1px solid #f4f4f4;
|
||||
padding: 10px;
|
||||
font-size: 16px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
.timeline > li > .timeline-item > .timeline-header > a {
|
||||
font-weight: 600;
|
||||
}
|
||||
.timeline > li > .timeline-item > .timeline-body,
|
||||
.timeline > li > .timeline-item > .timeline-footer {
|
||||
padding: 10px;
|
||||
}
|
||||
.timeline > li > .fa,
|
||||
.timeline > li > .glyphicon,
|
||||
.timeline > li > .ion {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
font-size: 15px;
|
||||
line-height: 30px;
|
||||
position: absolute;
|
||||
color: #666;
|
||||
background: #d2d6de;
|
||||
border-radius: 50%;
|
||||
text-align: center;
|
||||
left: 18px;
|
||||
top: 0;
|
||||
}
|
||||
.timeline > .time-label > span {
|
||||
font-weight: 600;
|
||||
padding: 5px;
|
||||
display: inline-block;
|
||||
background-color: #fff;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.timeline-inverse > li > .timeline-item {
|
||||
background: #f0f0f0;
|
||||
border: 1px solid #ddd;
|
||||
box-shadow: none;
|
||||
}
|
||||
.timeline-inverse > li > .timeline-item > .timeline-header {
|
||||
border-bottom-color: #ddd;
|
||||
}
|
||||
/*
|
||||
* Component: Button
|
||||
* -----------------
|
||||
@@ -2576,11 +2459,9 @@ table.text-center th {
|
||||
padding: 0;
|
||||
}
|
||||
.direct-chat.chat-pane-open .direct-chat-contacts {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
.direct-chat-messages {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
padding: 10px;
|
||||
height: 250px;
|
||||
@@ -2603,7 +2484,6 @@ table.text-center th {
|
||||
}
|
||||
.direct-chat-messages,
|
||||
.direct-chat-contacts {
|
||||
transition: -webkit-transform 0.5s ease-in-out;
|
||||
transition: transform 0.5s ease-in-out;
|
||||
}
|
||||
.direct-chat-text {
|
||||
@@ -2667,11 +2547,9 @@ table.text-center th {
|
||||
color: #999;
|
||||
}
|
||||
.direct-chat-contacts-open .direct-chat-contacts {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
.direct-chat-contacts {
|
||||
-webkit-transform: translate(101%, 0);
|
||||
transform: translate(101%, 0);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
@@ -4024,11 +3902,9 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
line-height: 30px;
|
||||
}
|
||||
.fc-color-picker > li .fa {
|
||||
transition: -webkit-transform linear 0.3s;
|
||||
transition: transform linear 0.3s;
|
||||
}
|
||||
.fc-color-picker > li .fa:hover {
|
||||
-webkit-transform: rotate(30deg);
|
||||
transform: rotate(30deg);
|
||||
}
|
||||
#add-new-event {
|
||||
@@ -4723,7 +4599,6 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
.main-footer {
|
||||
margin-left: 0!important;
|
||||
min-height: 0!important;
|
||||
-webkit-transform: translate(0, 0) !important;
|
||||
transform: translate(0, 0) !important;
|
||||
}
|
||||
.fixed .content-wrapper,
|
||||
@@ -4793,14 +4668,6 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
background: #367fa9;
|
||||
}
|
||||
}
|
||||
.skin-blue .main-header .logo {
|
||||
background-color: #367fa9;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent;
|
||||
}
|
||||
.skin-blue .main-header .logo:hover {
|
||||
background-color: #357ca5;
|
||||
}
|
||||
.skin-blue .main-header li.user-header {
|
||||
background-color: #3c8dbc;
|
||||
}
|
||||
@@ -4881,13 +4748,8 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
border-bottom-right-radius: 2px;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
.skin-blue.layout-top-nav .main-header > .logo {
|
||||
background-color: #3c8dbc;
|
||||
color: #fff;
|
||||
border-bottom: 0 solid transparent;
|
||||
}
|
||||
.skin-blue.layout-top-nav .main-header > .logo:hover {
|
||||
background-color: #3b8ab8;
|
||||
.skin-blue.layout-top-nav .main-header > .logo .logo-variant {
|
||||
background-color: none;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -4947,8 +4809,11 @@ fieldset[disabled] .btn-yahoo.active {
|
||||
background-color: inherit;
|
||||
}
|
||||
.main-header .logo {
|
||||
min-width: 430px;
|
||||
width: 100% !important;
|
||||
white-space: nowrap;
|
||||
text-align: left;
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
.huge {
|
||||
font-size: 40px;
|
||||
@@ -5235,114 +5100,66 @@ a.accordion-header {
|
||||
pointer-events: none;
|
||||
}
|
||||
/*END Form Wizard*/
|
||||
.left-navblock {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
text-align: left;
|
||||
color: white;
|
||||
padding: 0px;
|
||||
/* adjust based on your layout */
|
||||
}
|
||||
.skin-blue .main-header .navbar .dropdown-menu li a {
|
||||
color: #333;
|
||||
}
|
||||
a.logo.no-hover a:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* WRENCHING */
|
||||
@-webkit-keyframes wrench {
|
||||
0% {
|
||||
-webkit-transform: rotate(-12deg);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: rotate(12deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
28% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
38% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
48% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
58% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
}
|
||||
68% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
@keyframes wrench {
|
||||
0% {
|
||||
-webkit-transform: rotate(-12deg);
|
||||
transform: rotate(-12deg);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: rotate(12deg);
|
||||
transform: rotate(12deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
28% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
38% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
48% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
58% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: rotate(-24deg);
|
||||
transform: rotate(-24deg);
|
||||
}
|
||||
68% {
|
||||
-webkit-transform: rotate(24deg);
|
||||
transform: rotate(24deg);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
@@ -5360,91 +5177,44 @@ a.accordion-header {
|
||||
-ms-transform-origin-x: 90%;
|
||||
-ms-transform-origin-y: 35%;
|
||||
-ms-transform-origin-z: initial;
|
||||
-webkit-animation: wrench 2.5s ease infinite;
|
||||
animation: wrench 2.5s ease infinite;
|
||||
transform-origin-x: 90%;
|
||||
transform-origin-y: 35%;
|
||||
transform-origin-z: initial;
|
||||
}
|
||||
/* BELL */
|
||||
@-webkit-keyframes ring {
|
||||
0% {
|
||||
-webkit-transform: rotate(-15deg);
|
||||
}
|
||||
2% {
|
||||
-webkit-transform: rotate(15deg);
|
||||
}
|
||||
4% {
|
||||
-webkit-transform: rotate(-18deg);
|
||||
}
|
||||
6% {
|
||||
-webkit-transform: rotate(18deg);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: rotate(-22deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: rotate(22deg);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: rotate(-18deg);
|
||||
}
|
||||
14% {
|
||||
-webkit-transform: rotate(18deg);
|
||||
}
|
||||
16% {
|
||||
-webkit-transform: rotate(-12deg);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: rotate(12deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
@keyframes ring {
|
||||
0% {
|
||||
-webkit-transform: rotate(-15deg);
|
||||
transform: rotate(-15deg);
|
||||
}
|
||||
2% {
|
||||
-webkit-transform: rotate(15deg);
|
||||
transform: rotate(15deg);
|
||||
}
|
||||
4% {
|
||||
-webkit-transform: rotate(-18deg);
|
||||
transform: rotate(-18deg);
|
||||
}
|
||||
6% {
|
||||
-webkit-transform: rotate(18deg);
|
||||
transform: rotate(18deg);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: rotate(-22deg);
|
||||
transform: rotate(-22deg);
|
||||
}
|
||||
10% {
|
||||
-webkit-transform: rotate(22deg);
|
||||
transform: rotate(22deg);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: rotate(-18deg);
|
||||
transform: rotate(-18deg);
|
||||
}
|
||||
14% {
|
||||
-webkit-transform: rotate(18deg);
|
||||
transform: rotate(18deg);
|
||||
}
|
||||
16% {
|
||||
-webkit-transform: rotate(-12deg);
|
||||
transform: rotate(-12deg);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: rotate(12deg);
|
||||
transform: rotate(12deg);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
@@ -5462,142 +5232,68 @@ a.accordion-header {
|
||||
-ms-transform-origin-x: 50%;
|
||||
-ms-transform-origin-y: 0px;
|
||||
-ms-transform-origin-z: initial;
|
||||
-webkit-animation: ring 2s ease infinite;
|
||||
animation: ring 2s ease infinite;
|
||||
transform-origin-x: 50%;
|
||||
transform-origin-y: 0px;
|
||||
transform-origin-z: initial;
|
||||
}
|
||||
/* VERTICAL */
|
||||
@-webkit-keyframes vertical {
|
||||
0% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
}
|
||||
4% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
}
|
||||
16% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
}
|
||||
22% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
@keyframes vertical {
|
||||
0% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
transform: translate(0, -3px);
|
||||
}
|
||||
4% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
transform: translate(0, 3px);
|
||||
}
|
||||
8% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
transform: translate(0, -3px);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
transform: translate(0, 3px);
|
||||
}
|
||||
16% {
|
||||
-webkit-transform: translate(0, -3px);
|
||||
transform: translate(0, -3px);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: translate(0, 3px);
|
||||
transform: translate(0, 3px);
|
||||
}
|
||||
22% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
.faa-vertical.animated,
|
||||
.faa-vertical.animated-hover:hover {
|
||||
-webkit-animation: vertical 2s ease infinite;
|
||||
animation: vertical 2s ease infinite;
|
||||
}
|
||||
/* HORIZONTAL */
|
||||
@-webkit-keyframes horizontal {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
6% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
}
|
||||
24% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
}
|
||||
36% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
@keyframes horizontal {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
6% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
transform: translate(5px, 0);
|
||||
}
|
||||
12% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
18% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
transform: translate(5px, 0);
|
||||
}
|
||||
24% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: translate(5px, 0);
|
||||
transform: translate(5px, 0);
|
||||
}
|
||||
36% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
}
|
||||
.faa-horizontal.animated,
|
||||
.faa-horizontal.animated-hover:hover {
|
||||
-webkit-animation: horizontal 2s ease infinite;
|
||||
animation: horizontal 2s ease infinite;
|
||||
}
|
||||
/* FLASHING */
|
||||
@-webkit-keyframes flash {
|
||||
0%,
|
||||
100%,
|
||||
50% {
|
||||
opacity: 1;
|
||||
}
|
||||
25%,
|
||||
75% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes flash {
|
||||
0%,
|
||||
100%,
|
||||
@@ -5611,132 +5307,71 @@ a.accordion-header {
|
||||
}
|
||||
.faa-flash.animated,
|
||||
.faa-flash.animated-hover:hover {
|
||||
-webkit-animation: flash 2s ease infinite;
|
||||
animation: flash 2s ease infinite;
|
||||
}
|
||||
/* BOUNCE */
|
||||
@-webkit-keyframes bounce {
|
||||
0%,
|
||||
100%,
|
||||
20%,
|
||||
50%,
|
||||
80% {
|
||||
-webkit-transform: translateY(0);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: translateY(-15px);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: translateY(-15px);
|
||||
}
|
||||
}
|
||||
@keyframes bounce {
|
||||
0%,
|
||||
10%,
|
||||
20%,
|
||||
50%,
|
||||
80% {
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: translateY(-15px);
|
||||
transform: translateY(-15px);
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: translateY(-15px);
|
||||
transform: translateY(-15px);
|
||||
}
|
||||
}
|
||||
.faa-bounce.animated,
|
||||
.faa-bounce.animated-hover:hover {
|
||||
-webkit-animation: bounce 2s ease infinite;
|
||||
animation: bounce 2s ease infinite;
|
||||
}
|
||||
/* SPIN */
|
||||
@-webkit-keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
@keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
.faa-spin.animated,
|
||||
.faa-spin.animated-hover:hover {
|
||||
-webkit-animation: spin 1.5s linear infinite;
|
||||
animation: spin 1.5s linear infinite;
|
||||
}
|
||||
/* FLOAT */
|
||||
@-webkit-keyframes float {
|
||||
0% {
|
||||
-webkit-transform: translateY(0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translateY(-6px);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: translateY(0);
|
||||
}
|
||||
}
|
||||
@keyframes float {
|
||||
0% {
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translateY(-6px);
|
||||
transform: translateY(-6px);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: translateY(0);
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
.faa-float.animated,
|
||||
.faa-float.animated-hover:hover {
|
||||
-webkit-animation: float 2s linear infinite;
|
||||
animation: float 2s linear infinite;
|
||||
}
|
||||
/* PULSE */
|
||||
@-webkit-keyframes pulse {
|
||||
0% {
|
||||
-webkit-transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: scale(0.8);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: scale(1);
|
||||
}
|
||||
}
|
||||
@keyframes pulse {
|
||||
0% {
|
||||
-webkit-transform: scale(1.1);
|
||||
transform: scale(1.1);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: scale(0.8);
|
||||
transform: scale(0.8);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
.faa-pulse.animated,
|
||||
.faa-pulse.animated-hover:hover {
|
||||
-webkit-animation: pulse 2s linear infinite;
|
||||
animation: pulse 2s linear infinite;
|
||||
}
|
||||
/* SHAKE */
|
||||
File diff suppressed because one or more lines are too long
@@ -34217,6 +34217,47 @@ License: https://github.com/ashleydw/lightbox/blob/master/LICENSE
|
||||
* @param {JSON} settings Insulated `window.snipeit.settings` object.
|
||||
* @return {IIFE} Immediately invoked. Returns self.
|
||||
*/
|
||||
|
||||
|
||||
var pieOptions = {
|
||||
//Boolean - Whether we should show a stroke on each segment
|
||||
segmentShowStroke: true,
|
||||
//String - The colour of each segment stroke
|
||||
segmentStrokeColor: "#fff",
|
||||
//Number - The width of each segment stroke
|
||||
segmentStrokeWidth: 1,
|
||||
//Number - The percentage of the chart that we cut out of the middle
|
||||
percentageInnerCutout: 50, // This is 0 for Pie charts
|
||||
//Number - Amount of animation steps
|
||||
animationSteps: 100,
|
||||
//String - Animation easing effect
|
||||
animationEasing: "easeOutBounce",
|
||||
//Boolean - Whether we animate the rotation of the Doughnut
|
||||
animateRotate: true,
|
||||
//Boolean - Whether we animate scaling the Doughnut from the centre
|
||||
animateScale: false,
|
||||
//Boolean - whether to make the chart responsive to window resizing
|
||||
responsive: true,
|
||||
// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
|
||||
maintainAspectRatio: false,
|
||||
|
||||
//String - A legend template
|
||||
legendTemplate: "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li>" +
|
||||
"<i class='fa fa-circle-o' style='color: <%=segments[i].fillColor%>'></i>" +
|
||||
"<%if(segments[i].label){%><%=segments[i].label%><%}%> foo</li><%}%></ul>",
|
||||
//String - A tooltip template
|
||||
tooltipTemplate: "<%=value %> <%=label%> "
|
||||
};
|
||||
console.dir(pieOptions);
|
||||
//Create pie or douhnut chart
|
||||
// You can switch between pie and douhnut using the method below.
|
||||
//pieChart.Doughnut(PieData, pieOptions);
|
||||
//-----------------
|
||||
//- END PIE CHART -
|
||||
//-----------------
|
||||
|
||||
|
||||
|
||||
(function($, settings) {
|
||||
var Components = {};
|
||||
Components.modals = {};
|
||||
@@ -34262,6 +34303,9 @@ License: https://github.com/ashleydw/lightbox/blob/master/LICENSE
|
||||
});
|
||||
}(jQuery, window.snipeit.settings));
|
||||
|
||||
|
||||
|
||||
|
||||
/*! AdminLTE app.js
|
||||
* ================
|
||||
* Main JS application file for AdminLTE v2. This file
|
||||
@@ -34280,6 +34324,7 @@ if (typeof jQuery === "undefined") {
|
||||
throw new Error("AdminLTE requires jQuery");
|
||||
}
|
||||
|
||||
|
||||
/* AdminLTE
|
||||
*
|
||||
* @type Object
|
||||
@@ -35008,4 +35053,13 @@ function _init() {
|
||||
});
|
||||
};
|
||||
}(jQuery));
|
||||
|
||||
//-------------
|
||||
//- PIE CHART -
|
||||
//-------------
|
||||
// Get context with jQuery - using jQuery's .get() method.
|
||||
|
||||
|
||||
|
||||
|
||||
//# sourceMappingURL=all.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"assets/css/app.css": "assets/css/app-060dd24c8f.css",
|
||||
"assets/js/all.js": "assets/js/all-640cf0ee36.js"
|
||||
"assets/css/app.css": "assets/css/app-ec8e97e7ca.css",
|
||||
"assets/js/all.js": "assets/js/all-edd914620a.js"
|
||||
}
|
||||
@@ -16,6 +16,7 @@ if (typeof jQuery === "undefined") {
|
||||
throw new Error("AdminLTE requires jQuery");
|
||||
}
|
||||
|
||||
|
||||
/* AdminLTE
|
||||
*
|
||||
* @type Object
|
||||
@@ -743,4 +744,12 @@ function _init() {
|
||||
}
|
||||
});
|
||||
};
|
||||
}(jQuery));
|
||||
}(jQuery));
|
||||
|
||||
//-------------
|
||||
//- PIE CHART -
|
||||
//-------------
|
||||
// Get context with jQuery - using jQuery's .get() method.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -4,6 +4,47 @@
|
||||
* @param {JSON} settings Insulated `window.snipeit.settings` object.
|
||||
* @return {IIFE} Immediately invoked. Returns self.
|
||||
*/
|
||||
|
||||
|
||||
var pieOptions = {
|
||||
//Boolean - Whether we should show a stroke on each segment
|
||||
segmentShowStroke: true,
|
||||
//String - The colour of each segment stroke
|
||||
segmentStrokeColor: "#fff",
|
||||
//Number - The width of each segment stroke
|
||||
segmentStrokeWidth: 1,
|
||||
//Number - The percentage of the chart that we cut out of the middle
|
||||
percentageInnerCutout: 50, // This is 0 for Pie charts
|
||||
//Number - Amount of animation steps
|
||||
animationSteps: 100,
|
||||
//String - Animation easing effect
|
||||
animationEasing: "easeOutBounce",
|
||||
//Boolean - Whether we animate the rotation of the Doughnut
|
||||
animateRotate: true,
|
||||
//Boolean - Whether we animate scaling the Doughnut from the centre
|
||||
animateScale: false,
|
||||
//Boolean - whether to make the chart responsive to window resizing
|
||||
responsive: true,
|
||||
// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
|
||||
maintainAspectRatio: false,
|
||||
|
||||
//String - A legend template
|
||||
legendTemplate: "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li>" +
|
||||
"<i class='fa fa-circle-o' style='color: <%=segments[i].fillColor%>'></i>" +
|
||||
"<%if(segments[i].label){%><%=segments[i].label%><%}%> foo</li><%}%></ul>",
|
||||
//String - A tooltip template
|
||||
tooltipTemplate: "<%=value %> <%=label%> "
|
||||
};
|
||||
console.dir(pieOptions);
|
||||
//Create pie or douhnut chart
|
||||
// You can switch between pie and douhnut using the method below.
|
||||
//pieChart.Doughnut(PieData, pieOptions);
|
||||
//-----------------
|
||||
//- END PIE CHART -
|
||||
//-----------------
|
||||
|
||||
|
||||
|
||||
(function($, settings) {
|
||||
var Components = {};
|
||||
Components.modals = {};
|
||||
@@ -48,3 +89,6 @@
|
||||
new Components.modals.confirmDelete().render();
|
||||
});
|
||||
}(jQuery, window.snipeit.settings));
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
@import "small-box.less";
|
||||
@import "boxes.less";
|
||||
@import "info-box.less";
|
||||
@import "timeline.less";
|
||||
@import "buttons.less";
|
||||
@import "callout.less";
|
||||
@import "alerts.less";
|
||||
|
||||
@@ -242,3 +242,27 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Collapse header
|
||||
@media (max-width: @screen-sm-max) {
|
||||
.content-header {
|
||||
padding-top: 110px;
|
||||
}
|
||||
}
|
||||
|
||||
// Collapse header
|
||||
@media (max-width: @screen-sm-max) {
|
||||
ul.sidebar-menu {
|
||||
padding-top: 120px;
|
||||
}
|
||||
}
|
||||
|
||||
// Collapse header
|
||||
@media (max-width: @screen-sm-max) {
|
||||
.sidebar-toggle-mobile a {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,8 +2,12 @@
|
||||
background-color: inherit;
|
||||
}
|
||||
.main-header .logo {
|
||||
min-width: 430px;
|
||||
width: 100% !important;
|
||||
white-space: nowrap;
|
||||
text-align: left;
|
||||
display: block;
|
||||
clear: both;
|
||||
//text-overflow: hidden;
|
||||
}
|
||||
.huge {
|
||||
font-size: 40px;
|
||||
@@ -260,3 +264,22 @@ a.accordion-header {
|
||||
.bs-wizard > .bs-wizard-step:last-child > .progress {width: 50%;}
|
||||
.bs-wizard > .bs-wizard-step.disabled a.bs-wizard-dot{ pointer-events: none; }
|
||||
/*END Form Wizard*/
|
||||
|
||||
.left-navblock{
|
||||
display: inline-block;
|
||||
float: left;
|
||||
text-align: left;
|
||||
color: white;
|
||||
padding: 0px;
|
||||
/* adjust based on your layout */
|
||||
|
||||
}
|
||||
.skin-blue .main-header .navbar .dropdown-menu li a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
a.logo.no-hover a:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -35,9 +35,6 @@
|
||||
}
|
||||
}
|
||||
//Logo
|
||||
.logo {
|
||||
.logo-variant(darken(@light-blue, 5%));
|
||||
}
|
||||
|
||||
li.user-header {
|
||||
background-color: @light-blue;
|
||||
@@ -54,5 +51,7 @@
|
||||
}
|
||||
|
||||
.skin-blue.layout-top-nav .main-header > .logo {
|
||||
.logo-variant(@light-blue);
|
||||
.logo-variant {
|
||||
background-color: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,12 @@ return array(
|
||||
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
|
||||
),
|
||||
|
||||
'import' => array(
|
||||
'error' => 'Some Items did not import Correctly.',
|
||||
'errorDetail' => 'The Following Items were not imported because of errors.',
|
||||
'success' => "Your File has been imported",
|
||||
),
|
||||
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this asset?',
|
||||
|
||||
@@ -10,7 +10,6 @@ return array(
|
||||
'auto_increment_prefix' => 'Prefix (optional)',
|
||||
'auto_incrementing_help' => 'Enable auto-incrementing asset IDs first to set this',
|
||||
'backups' => 'Backups',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_settings' => 'Barcode Settings',
|
||||
'confirm_purge' => 'Confirm Purge',
|
||||
'confirm_purge_help' => 'Enter the text "DELETE" in the box below to purge your deleted records. This action cannot be undone.',
|
||||
@@ -25,7 +24,7 @@ return array(
|
||||
'display_eol' => 'Display EOL in table view',
|
||||
'display_qr' => 'Display Square Codes',
|
||||
'display_alt_barcode' => 'Display 2D barcode',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_type' => '3D Barcode Type',
|
||||
'alt_barcode_type' => '2D barcode type',
|
||||
'eula_settings' => 'EULA Settings',
|
||||
'eula_markdown' => 'This EULA allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Location does not exist.',
|
||||
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
|
||||
'does_not_exist' => 'Status Label does not exist.',
|
||||
'assoc_assets' => 'This Status Label is currently associated with at least one Asset and cannot be deleted. Please update your assets to no longer reference this status and try again. ',
|
||||
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Location was not created, please try again.',
|
||||
'success' => 'Location created successfully.'
|
||||
'error' => 'Status Label was not created, please try again.',
|
||||
'success' => 'Status Label created successfully.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Location was not updated, please try again',
|
||||
'success' => 'Location updated successfully.'
|
||||
'error' => 'Status Label was not updated, please try again',
|
||||
'success' => 'Status Label updated successfully.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this status label?',
|
||||
'error' => 'There was an issue deleting the location. Please try again.',
|
||||
'success' => 'The location was deleted successfully.'
|
||||
'confirm' => 'Are you sure you wish to delete this Status Label?',
|
||||
'error' => 'There was an issue deleting the Status Label. Please try again.',
|
||||
'success' => 'The Status Label was deleted successfully.'
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
12
resources/lang/ar/auth/general.php
Normal file
12
resources/lang/ar/auth/general.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'send_password_link' => 'Send Password Reset Link',
|
||||
'email_reset_password' => 'Email Password Reset',
|
||||
'reset_password' => 'Reset Password',
|
||||
'login' => 'Login',
|
||||
'login_prompt' => 'Please Login',
|
||||
'forgot_password' => 'I forgot my password',
|
||||
'remember_me' => 'Remember Me',
|
||||
];
|
||||
|
||||
@@ -56,8 +56,14 @@
|
||||
'depreciation' => 'الإستهلاك',
|
||||
'editprofile' => 'تعديل الملف الشخصي',
|
||||
'eol' => 'الحياة',
|
||||
'email_domain' => 'Email Domain',
|
||||
'email_format' => 'Email Format',
|
||||
'email_domain_help' => 'This is used to generate email addresses when importing',
|
||||
'filastname_format' => 'First Initial Last Name (jsmith@example.com)',
|
||||
'firstname_lastname_format' => 'First Name Last Name (jane.smith@example.com)',
|
||||
'first' => 'First',
|
||||
'first_name' => 'الإسم الأول',
|
||||
'first_name_format' => 'First Name (jane@example.com)',
|
||||
'file_name' => 'File',
|
||||
'file_uploads' => 'File Uploads',
|
||||
'generate' => 'Generate',
|
||||
@@ -88,6 +94,7 @@
|
||||
'location' => 'الموقع',
|
||||
'locations' => 'المواقع',
|
||||
'logout' => 'تسجيل خروج',
|
||||
'lookup_by_tag' => 'Lookup by Asset Tag',
|
||||
'manufacturer' => 'الشركة المصنعة',
|
||||
'manufacturers' => 'الشركات المصنعة',
|
||||
'markdown' => 'This field allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
@@ -142,6 +149,7 @@
|
||||
'type' => 'Type',
|
||||
'undeployable' => 'غير قابلة للتوزيع',
|
||||
'unknown_admin' => 'إداري غير معروف',
|
||||
'username_format' => 'Username Format',
|
||||
'update' => 'Update',
|
||||
'uploaded' => 'Uploaded',
|
||||
'user' => 'المستخدم',
|
||||
|
||||
7
resources/lang/ar/passwords.php
Normal file
7
resources/lang/ar/passwords.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'sent' => 'Your password link has been sent!',
|
||||
'user' => 'That user does not exist or does not have an email address associated',
|
||||
];
|
||||
|
||||
@@ -35,6 +35,12 @@ return array(
|
||||
'invalidfiles' => 'Един или повече файлове са твърде големи или с непозволен тип. Разрешените файлови типове за качване са png, gif, jpg, doc, docx, pdf и txt.',
|
||||
),
|
||||
|
||||
'import' => array(
|
||||
'error' => 'Some Items did not import Correctly.',
|
||||
'errorDetail' => 'The Following Items were not imported because of errors.',
|
||||
'success' => "Your File has been imported",
|
||||
),
|
||||
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Сигурни ли сте, че желаете изтриване на актива?',
|
||||
|
||||
@@ -10,7 +10,6 @@ return array(
|
||||
'auto_increment_prefix' => 'Префикс (незадължително)',
|
||||
'auto_incrementing_help' => 'Първо включете автоматично генериране на инвентарни номера, за да включите тази опция.',
|
||||
'backups' => 'Архивиране',
|
||||
'barcode_type' => 'Тип на баркод',
|
||||
'barcode_settings' => 'Настройки на баркод',
|
||||
'confirm_purge' => 'Confirm Purge',
|
||||
'confirm_purge_help' => 'Enter the text "DELETE" in the box below to purge your deleted records. This action cannot be undone.',
|
||||
@@ -25,7 +24,7 @@ return array(
|
||||
'display_eol' => 'Визуализиране на EOL в таблиците',
|
||||
'display_qr' => 'Display Square Codes',
|
||||
'display_alt_barcode' => 'Display 2D barcode',
|
||||
'barcode_type' => 'Тип на баркод',
|
||||
'barcode_type' => '3D Barcode Type',
|
||||
'alt_barcode_type' => '2D barcode type',
|
||||
'eula_settings' => 'Настройки на EULA',
|
||||
'eula_markdown' => 'Съдържанието на EULA може да бъде форматирано с <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Местоположението не съществува.',
|
||||
'assoc_users' => 'Местоположението е свързано с поне един потребител и не може да бъде изтрито. Моля, актуализирайте потребителите, така че да не са свързани с това местоположение и опитайте отново. ',
|
||||
'does_not_exist' => 'Status Label does not exist.',
|
||||
'assoc_assets' => 'This Status Label is currently associated with at least one Asset and cannot be deleted. Please update your assets to no longer reference this status and try again. ',
|
||||
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Местоположението не беше създадено. Моля опитайте отново.',
|
||||
'success' => 'Местоположението създадено успешно.'
|
||||
'error' => 'Status Label was not created, please try again.',
|
||||
'success' => 'Status Label created successfully.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Местоположението не беше обновено. Моля опитайте отново.',
|
||||
'success' => 'Местоположението обновено успешно.'
|
||||
'error' => 'Status Label was not updated, please try again',
|
||||
'success' => 'Status Label updated successfully.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Сигурни ли сте, че желаете изтриване на този статус етикет?',
|
||||
'error' => 'Проблем при изтриване на местоположението. Моля опитайте отново.',
|
||||
'success' => 'Местоположението изтрито успешно.'
|
||||
'confirm' => 'Are you sure you wish to delete this Status Label?',
|
||||
'error' => 'There was an issue deleting the Status Label. Please try again.',
|
||||
'success' => 'The Status Label was deleted successfully.'
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
12
resources/lang/bg/auth/general.php
Normal file
12
resources/lang/bg/auth/general.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'send_password_link' => 'Send Password Reset Link',
|
||||
'email_reset_password' => 'Email Password Reset',
|
||||
'reset_password' => 'Reset Password',
|
||||
'login' => 'Login',
|
||||
'login_prompt' => 'Please Login',
|
||||
'forgot_password' => 'I forgot my password',
|
||||
'remember_me' => 'Remember Me',
|
||||
];
|
||||
|
||||
@@ -56,8 +56,14 @@
|
||||
'depreciation' => 'Амортизация',
|
||||
'editprofile' => 'Редакция на профила',
|
||||
'eol' => 'EOL',
|
||||
'email_domain' => 'Email Domain',
|
||||
'email_format' => 'Email Format',
|
||||
'email_domain_help' => 'This is used to generate email addresses when importing',
|
||||
'filastname_format' => 'First Initial Last Name (jsmith@example.com)',
|
||||
'firstname_lastname_format' => 'First Name Last Name (jane.smith@example.com)',
|
||||
'first' => 'Първа',
|
||||
'first_name' => 'Собствено име',
|
||||
'first_name_format' => 'First Name (jane@example.com)',
|
||||
'file_name' => 'Файл',
|
||||
'file_uploads' => 'Качени файлове',
|
||||
'generate' => 'Генериране',
|
||||
@@ -88,6 +94,7 @@
|
||||
'location' => 'Местоположение',
|
||||
'locations' => 'Местоположения',
|
||||
'logout' => 'Изход',
|
||||
'lookup_by_tag' => 'Lookup by Asset Tag',
|
||||
'manufacturer' => 'Производител',
|
||||
'manufacturers' => 'Производители',
|
||||
'markdown' => 'This field allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
@@ -142,6 +149,7 @@
|
||||
'type' => 'Тип',
|
||||
'undeployable' => 'Не може да бъде предоставян',
|
||||
'unknown_admin' => 'Непознат администратор',
|
||||
'username_format' => 'Username Format',
|
||||
'update' => 'Обновяване',
|
||||
'uploaded' => 'Качен',
|
||||
'user' => 'Потребител',
|
||||
|
||||
7
resources/lang/bg/passwords.php
Normal file
7
resources/lang/bg/passwords.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'sent' => 'Your password link has been sent!',
|
||||
'user' => 'That user does not exist or does not have an email address associated',
|
||||
];
|
||||
|
||||
@@ -36,6 +36,12 @@ return array(
|
||||
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
|
||||
),
|
||||
|
||||
'import' => array(
|
||||
'error' => 'Some Items did not import Correctly.',
|
||||
'errorDetail' => 'The Following Items were not imported because of errors.',
|
||||
'success' => "Your File has been imported",
|
||||
),
|
||||
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this asset?',
|
||||
|
||||
@@ -10,7 +10,6 @@ return array(
|
||||
'auto_increment_prefix' => 'Předpona (volitnelná)',
|
||||
'auto_incrementing_help' => 'Nastavte nejdříve automaticky se zvyšující ID majetku pro nastavení tohoto',
|
||||
'backups' => 'Zálohy',
|
||||
'barcode_type' => 'Tyo čárového kódu',
|
||||
'barcode_settings' => 'Nastavení čárového kódu',
|
||||
'confirm_purge' => 'Confirm Purge',
|
||||
'confirm_purge_help' => 'Enter the text "DELETE" in the box below to purge your deleted records. This action cannot be undone.',
|
||||
@@ -25,7 +24,7 @@ return array(
|
||||
'display_eol' => 'Zobrazit EOL v tabulkovém zobrazení',
|
||||
'display_qr' => 'Display Square Codes',
|
||||
'display_alt_barcode' => 'Display 2D barcode',
|
||||
'barcode_type' => 'Tyo čárového kódu',
|
||||
'barcode_type' => '3D Barcode Type',
|
||||
'alt_barcode_type' => '2D barcode type',
|
||||
'eula_settings' => 'Nastavení EULA',
|
||||
'eula_markdown' => 'Tato EULA umožňuje <a href="https://help.github.com/articles/github-flavored-markdown/">Github markdown</a>.',
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Místo neexistuje.',
|
||||
'assoc_users' => 'Toto místo je spojeno s alespoň jedním uživatelem a nemůže být smazáno. Aktualizujte uživatele aby nenáleželi k tomuto místu a zkuste to znovu. ',
|
||||
'does_not_exist' => 'Status Label does not exist.',
|
||||
'assoc_assets' => 'This Status Label is currently associated with at least one Asset and cannot be deleted. Please update your assets to no longer reference this status and try again. ',
|
||||
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Místo nebylo vytvořeno, zkuste to znovu.',
|
||||
'success' => 'Místo úspěšně vytvořeno.'
|
||||
'error' => 'Status Label was not created, please try again.',
|
||||
'success' => 'Status Label created successfully.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Místo nebylo aktualizováno, zkuste to znovu',
|
||||
'success' => 'Místo aktualizováno.'
|
||||
'error' => 'Status Label was not updated, please try again',
|
||||
'success' => 'Status Label updated successfully.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Opravdu chcete smazat tento typ stavu?',
|
||||
'error' => 'Vyskytl se problém při mazání místa. Zkuste to znovu.',
|
||||
'success' => 'Místo bylo úspěšně smazáno.'
|
||||
'confirm' => 'Are you sure you wish to delete this Status Label?',
|
||||
'error' => 'There was an issue deleting the Status Label. Please try again.',
|
||||
'success' => 'The Status Label was deleted successfully.'
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
12
resources/lang/cs/auth/general.php
Normal file
12
resources/lang/cs/auth/general.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'send_password_link' => 'Send Password Reset Link',
|
||||
'email_reset_password' => 'Email Password Reset',
|
||||
'reset_password' => 'Reset Password',
|
||||
'login' => 'Login',
|
||||
'login_prompt' => 'Please Login',
|
||||
'forgot_password' => 'I forgot my password',
|
||||
'remember_me' => 'Remember Me',
|
||||
];
|
||||
|
||||
@@ -56,8 +56,14 @@
|
||||
'depreciation' => 'Amortizace',
|
||||
'editprofile' => 'Upravit profil',
|
||||
'eol' => 'Konec životnosti',
|
||||
'email_domain' => 'Email Domain',
|
||||
'email_format' => 'Email Format',
|
||||
'email_domain_help' => 'This is used to generate email addresses when importing',
|
||||
'filastname_format' => 'First Initial Last Name (jsmith@example.com)',
|
||||
'firstname_lastname_format' => 'First Name Last Name (jane.smith@example.com)',
|
||||
'first' => 'První',
|
||||
'first_name' => 'Jméno',
|
||||
'first_name_format' => 'First Name (jane@example.com)',
|
||||
'file_name' => 'Soubor',
|
||||
'file_uploads' => 'Nahrání souboru',
|
||||
'generate' => 'Vytvořit',
|
||||
@@ -88,6 +94,7 @@
|
||||
'location' => 'Lokalita',
|
||||
'locations' => 'Umístění',
|
||||
'logout' => 'Odhlásit',
|
||||
'lookup_by_tag' => 'Lookup by Asset Tag',
|
||||
'manufacturer' => 'Výrobce',
|
||||
'manufacturers' => 'Výrobci',
|
||||
'markdown' => 'This field allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
@@ -142,6 +149,7 @@
|
||||
'type' => 'Typ',
|
||||
'undeployable' => 'Ne-přiřaditelné',
|
||||
'unknown_admin' => 'Neznámy správce',
|
||||
'username_format' => 'Username Format',
|
||||
'update' => 'Aktualizace',
|
||||
'uploaded' => 'Nahráno',
|
||||
'user' => 'Uživatel',
|
||||
|
||||
7
resources/lang/cs/passwords.php
Normal file
7
resources/lang/cs/passwords.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'sent' => 'Your password link has been sent!',
|
||||
'user' => 'That user does not exist or does not have an email address associated',
|
||||
];
|
||||
|
||||
@@ -36,6 +36,12 @@ return array(
|
||||
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
|
||||
),
|
||||
|
||||
'import' => array(
|
||||
'error' => 'Some Items did not import Correctly.',
|
||||
'errorDetail' => 'The Following Items were not imported because of errors.',
|
||||
'success' => "Your File has been imported",
|
||||
),
|
||||
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this asset?',
|
||||
|
||||
@@ -10,7 +10,6 @@ return array(
|
||||
'auto_increment_prefix' => 'Prefix (optional)',
|
||||
'auto_incrementing_help' => 'Enable auto-incrementing asset IDs first to set this',
|
||||
'backups' => 'Backups',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_settings' => 'Barcode Settings',
|
||||
'confirm_purge' => 'Confirm Purge',
|
||||
'confirm_purge_help' => 'Enter the text "DELETE" in the box below to purge your deleted records. This action cannot be undone.',
|
||||
@@ -25,7 +24,7 @@ return array(
|
||||
'display_eol' => 'Display EOL in table view',
|
||||
'display_qr' => 'Display Square Codes',
|
||||
'display_alt_barcode' => 'Display 2D barcode',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_type' => '3D Barcode Type',
|
||||
'alt_barcode_type' => '2D barcode type',
|
||||
'eula_settings' => 'EULA Settings',
|
||||
'eula_markdown' => 'This EULA allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Location does not exist.',
|
||||
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
|
||||
'does_not_exist' => 'Status Label does not exist.',
|
||||
'assoc_assets' => 'This Status Label is currently associated with at least one Asset and cannot be deleted. Please update your assets to no longer reference this status and try again. ',
|
||||
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Location was not created, please try again.',
|
||||
'success' => 'Location created successfully.'
|
||||
'error' => 'Status Label was not created, please try again.',
|
||||
'success' => 'Status Label created successfully.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Location was not updated, please try again',
|
||||
'success' => 'Location updated successfully.'
|
||||
'error' => 'Status Label was not updated, please try again',
|
||||
'success' => 'Status Label updated successfully.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this status label?',
|
||||
'error' => 'There was an issue deleting the location. Please try again.',
|
||||
'success' => 'The location was deleted successfully.'
|
||||
'confirm' => 'Are you sure you wish to delete this Status Label?',
|
||||
'error' => 'There was an issue deleting the Status Label. Please try again.',
|
||||
'success' => 'The Status Label was deleted successfully.'
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
12
resources/lang/da/auth/general.php
Normal file
12
resources/lang/da/auth/general.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'send_password_link' => 'Send Password Reset Link',
|
||||
'email_reset_password' => 'Email Password Reset',
|
||||
'reset_password' => 'Reset Password',
|
||||
'login' => 'Login',
|
||||
'login_prompt' => 'Please Login',
|
||||
'forgot_password' => 'I forgot my password',
|
||||
'remember_me' => 'Remember Me',
|
||||
];
|
||||
|
||||
@@ -56,8 +56,14 @@
|
||||
'depreciation' => 'Afskrivning',
|
||||
'editprofile' => 'Ret Din Profil',
|
||||
'eol' => 'EOL',
|
||||
'email_domain' => 'Email Domain',
|
||||
'email_format' => 'Email Format',
|
||||
'email_domain_help' => 'This is used to generate email addresses when importing',
|
||||
'filastname_format' => 'First Initial Last Name (jsmith@example.com)',
|
||||
'firstname_lastname_format' => 'First Name Last Name (jane.smith@example.com)',
|
||||
'first' => 'First',
|
||||
'first_name' => 'Fornavn',
|
||||
'first_name_format' => 'First Name (jane@example.com)',
|
||||
'file_name' => 'Fil',
|
||||
'file_uploads' => 'Filoverførsel',
|
||||
'generate' => 'Skab',
|
||||
@@ -88,6 +94,7 @@
|
||||
'location' => 'Lokation',
|
||||
'locations' => 'Lokationer',
|
||||
'logout' => 'Log ud',
|
||||
'lookup_by_tag' => 'Lookup by Asset Tag',
|
||||
'manufacturer' => 'Producent',
|
||||
'manufacturers' => 'Producenter',
|
||||
'markdown' => 'This field allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
@@ -142,6 +149,7 @@
|
||||
'type' => 'Type',
|
||||
'undeployable' => 'Ikke implementerbar',
|
||||
'unknown_admin' => 'Ukendt Admin',
|
||||
'username_format' => 'Username Format',
|
||||
'update' => 'Update',
|
||||
'uploaded' => 'Uploaded',
|
||||
'user' => 'Bruger',
|
||||
|
||||
7
resources/lang/da/passwords.php
Normal file
7
resources/lang/da/passwords.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'sent' => 'Your password link has been sent!',
|
||||
'user' => 'That user does not exist or does not have an email address associated',
|
||||
];
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Diese Kategorie existiert nicht.',
|
||||
'assoc_models' => 'This category is currently associated with at least one model and cannot be deleted. Please update your models to no longer reference this category and try again. ',
|
||||
'assoc_items' => 'This category is currently associated with at least one :asset_type and cannot be deleted. Please update your :asset_type to no longer reference this category and try again. ',
|
||||
'assoc_models' => 'Diese Kategorie kann nicht gelöscht werden da sie bereits mit einem Modell verbunden ist. Bitte trennen Sie diese Kategorie von Ihren Modellen und versuchen Sie es erneut. ',
|
||||
'assoc_items' => 'Diese Kategorie kann nicht gelöscht werden da sie bereits mit einem :asset_type verbunden ist. Bitte trennen Sie diese Kategorie von Ihrem :asset_type und versuchen Sie es erneut. ',
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Die Kategorie konnte nicht erstellt werden, bitte versuchen sie es erneut.',
|
||||
|
||||
@@ -7,7 +7,7 @@ return array(
|
||||
'cost' => 'Einkaufspreis',
|
||||
'create' => 'Verbrauchsmaterial erstellen',
|
||||
'date' => 'Kaufdatum',
|
||||
'item_no' => 'Item No.',
|
||||
'item_no' => 'Artikel Nr.',
|
||||
'order' => 'Bestellnummer',
|
||||
'remaining' => 'übrig',
|
||||
'total' => 'Gesamt',
|
||||
|
||||
@@ -36,6 +36,12 @@ return array(
|
||||
'invalidfiles' => 'Eine oder mehrere Ihrer Dateien ist zu groß oder deren Dateityp ist nicht zugelassen. Zugelassene Dateitypen sind png, gif, jpg, doc, docx, pdf, und txt.',
|
||||
),
|
||||
|
||||
'import' => array(
|
||||
'error' => 'Some Items did not import Correctly.',
|
||||
'errorDetail' => 'The Following Items were not imported because of errors.',
|
||||
'success' => "Your File has been imported",
|
||||
),
|
||||
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Sind Sie sicher, dass Sie dieses Asset entfernen möchten?',
|
||||
|
||||
@@ -2,15 +2,14 @@
|
||||
|
||||
return array(
|
||||
'alert_email' => 'Alarme senden an',
|
||||
'alerts_enabled' => 'Alerts Enabled',
|
||||
'alert_interval' => 'Expiring Alerts Threshold (in days)',
|
||||
'alert_inv_threshold' => 'Inventory Alert Threshold',
|
||||
'alerts_enabled' => 'Alarme aktiviert',
|
||||
'alert_interval' => 'Ablauf Alarmschwelle (in Tagen)',
|
||||
'alert_inv_threshold' => 'Inventar Alarmschwelle',
|
||||
'asset_ids' => 'Asset IDs',
|
||||
'auto_increment_assets' => 'Erzeugen von fortlaufenden Asset IDs',
|
||||
'auto_increment_prefix' => 'Präfix (optional)',
|
||||
'auto_incrementing_help' => 'Aktiviere zuerst fortlaufende Asset IDs um dies zu setzen',
|
||||
'backups' => 'Sicherungen',
|
||||
'barcode_type' => 'Barcode Typ',
|
||||
'barcode_settings' => 'Barcode Einstellungen',
|
||||
'confirm_purge' => 'Bereinigung bestätigen',
|
||||
'confirm_purge_help' => 'Geben Sie das Wort "Löschen" in das untere Feld ein um die gelöschten Einträge zu bereinigen. Dies kann nicht rückgängig gemacht werden.',
|
||||
@@ -23,10 +22,10 @@ return array(
|
||||
'display_asset_name' => 'Zeige Assetname an',
|
||||
'display_checkout_date' => 'Zeige Herausgabedatum',
|
||||
'display_eol' => 'Zeige EOL in der Tabellenansicht',
|
||||
'display_qr' => 'Display Square Codes',
|
||||
'display_alt_barcode' => 'Display 2D barcode',
|
||||
'barcode_type' => 'Barcode Typ',
|
||||
'alt_barcode_type' => '2D barcode type',
|
||||
'display_qr' => 'Zeige quadratische Codes',
|
||||
'display_alt_barcode' => 'Zeige 2D Barcode',
|
||||
'barcode_type' => '3D Barcode Typ',
|
||||
'alt_barcode_type' => '2D Barcode Typ',
|
||||
'eula_settings' => 'EULA Einstellungen',
|
||||
'eula_markdown' => 'Diese EULA <a href="https://help.github.com/articles/github-flavored-markdown/"> erlaubt Github Flavored Markdown</a>.',
|
||||
'general_settings' => 'Generelle Einstellungen',
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Standort nicht verfügbar.',
|
||||
'assoc_users' => 'Dieser Ort ist mit mindestens einem Benutzer verknüpft und kann nicht gelöscht werden. Bitte Benutzer updaten, so dass dieser Standort nicht mehr verknüpft ist und erneut versuchen. ',
|
||||
'does_not_exist' => 'Status Label does not exist.',
|
||||
'assoc_assets' => 'This Status Label is currently associated with at least one Asset and cannot be deleted. Please update your assets to no longer reference this status and try again. ',
|
||||
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Ort wurde nicht erstellt, bitte versuchen Sie es erneut.',
|
||||
'success' => 'Ort erfolgreich erstellt.'
|
||||
'error' => 'Status Label was not created, please try again.',
|
||||
'success' => 'Status Label created successfully.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Ort wurde nicht aktualisiert, bitte erneut versuchen',
|
||||
'success' => 'Ort erfolgreich aktualisiert.'
|
||||
'error' => 'Status Label was not updated, please try again',
|
||||
'success' => 'Status Label updated successfully.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Bist du sicher, dass du diesen Status entfernen möchtest?',
|
||||
'error' => 'Es gab einen Fehler beim Löschen des Orts. Bitte versuchen Sie es erneut.',
|
||||
'success' => 'Der Ort wurde erfolgreich gelöscht.'
|
||||
'confirm' => 'Are you sure you wish to delete this Status Label?',
|
||||
'error' => 'There was an issue deleting the Status Label. Please try again.',
|
||||
'success' => 'The Status Label was deleted successfully.'
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
12
resources/lang/de/auth/general.php
Normal file
12
resources/lang/de/auth/general.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'send_password_link' => 'E-Mail zum Zurücksetzen des Passworts senden',
|
||||
'email_reset_password' => 'Passwort zurücksetzen',
|
||||
'reset_password' => 'Passwort zurücksetzen',
|
||||
'login' => 'Login',
|
||||
'login_prompt' => 'Melden Sie sich bitte an',
|
||||
'forgot_password' => 'Ich habe mein Passwort vergessen',
|
||||
'remember_me' => 'Angemeldet bleiben',
|
||||
];
|
||||
|
||||
@@ -5,7 +5,7 @@ return array(
|
||||
'actions' => 'Aktionen',
|
||||
'add' => 'Hinzufügen',
|
||||
'cancel' => 'Abbrechen',
|
||||
'checkin_and_delete' => 'Checkin & Delete User',
|
||||
'checkin_and_delete' => 'Einchecken & User löschen',
|
||||
'delete' => 'Löschen',
|
||||
'edit' => 'Bearbeiten',
|
||||
'restore' => 'Wiederherstellen',
|
||||
|
||||
@@ -56,14 +56,20 @@
|
||||
'depreciation' => 'Abschreibung',
|
||||
'editprofile' => 'Profil bearbeiten',
|
||||
'eol' => 'EOL',
|
||||
'email_domain' => 'Email Domain',
|
||||
'email_format' => 'Email Format',
|
||||
'email_domain_help' => 'This is used to generate email addresses when importing',
|
||||
'filastname_format' => 'First Initial Last Name (jsmith@example.com)',
|
||||
'firstname_lastname_format' => 'First Name Last Name (jane.smith@example.com)',
|
||||
'first' => 'Erstes',
|
||||
'first_name' => 'Vorname',
|
||||
'first_name_format' => 'First Name (jane@example.com)',
|
||||
'file_name' => 'Datei',
|
||||
'file_uploads' => 'Datei-Uploads',
|
||||
'generate' => 'Generieren',
|
||||
'groups' => 'Gruppen',
|
||||
'gravatar_email' => 'Gravatar E-Mail Adresse',
|
||||
'history' => 'History',
|
||||
'history' => 'Historie',
|
||||
'history_for' => 'Verlauf für',
|
||||
'id' => 'Id',
|
||||
'image_delete' => 'Bild löschen',
|
||||
@@ -88,6 +94,7 @@
|
||||
'location' => 'Standort',
|
||||
'locations' => 'Standorte',
|
||||
'logout' => 'Abmelden',
|
||||
'lookup_by_tag' => 'Lookup by Asset Tag',
|
||||
'manufacturer' => 'Hersteller',
|
||||
'manufacturers' => 'Hersteller',
|
||||
'markdown' => 'Dieses Feld erlaubt <a href="https://help.github.com/articles/github-flavored-markdown/"> Github Flavored Markdown</a>.',
|
||||
@@ -142,6 +149,7 @@
|
||||
'type' => 'Typ',
|
||||
'undeployable' => 'Nicht herausgebbar',
|
||||
'unknown_admin' => 'Unbekannter Administrator',
|
||||
'username_format' => 'Username Format',
|
||||
'update' => 'Aktualisieren',
|
||||
'uploaded' => 'Hochgeladen',
|
||||
'user' => 'Nutzer',
|
||||
|
||||
7
resources/lang/de/passwords.php
Normal file
7
resources/lang/de/passwords.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'sent' => 'Ihr Link wurde verschickt!',
|
||||
'user' => 'Dieser Benutzer existiert nicht oder hat keine E-Mail Adresse angegeben',
|
||||
];
|
||||
|
||||
@@ -36,6 +36,12 @@ return array(
|
||||
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
|
||||
),
|
||||
|
||||
'import' => array(
|
||||
'error' => 'Some Items did not import Correctly.',
|
||||
'errorDetail' => 'The Following Items were not imported because of errors.',
|
||||
'success' => "Your File has been imported",
|
||||
),
|
||||
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this asset?',
|
||||
|
||||
@@ -10,7 +10,6 @@ return array(
|
||||
'auto_increment_prefix' => 'Prefix (optional)',
|
||||
'auto_incrementing_help' => 'Enable auto-incrementing asset IDs first to set this',
|
||||
'backups' => 'Backups',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_settings' => 'Barcode Settings',
|
||||
'confirm_purge' => 'Confirm Purge',
|
||||
'confirm_purge_help' => 'Enter the text "DELETE" in the box below to purge your deleted records. This action cannot be undone.',
|
||||
@@ -25,7 +24,7 @@ return array(
|
||||
'display_eol' => 'Display EOL in table view',
|
||||
'display_qr' => 'Display Square Codes',
|
||||
'display_alt_barcode' => 'Display 2D barcode',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_type' => '3D Barcode Type',
|
||||
'alt_barcode_type' => '2D barcode type',
|
||||
'eula_settings' => 'EULA Settings',
|
||||
'eula_markdown' => 'This EULA allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Location does not exist.',
|
||||
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
|
||||
'does_not_exist' => 'Status Label does not exist.',
|
||||
'assoc_assets' => 'This Status Label is currently associated with at least one Asset and cannot be deleted. Please update your assets to no longer reference this status and try again. ',
|
||||
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Location was not created, please try again.',
|
||||
'success' => 'Location created successfully.'
|
||||
'error' => 'Status Label was not created, please try again.',
|
||||
'success' => 'Status Label created successfully.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Location was not updated, please try again',
|
||||
'success' => 'Location updated successfully.'
|
||||
'error' => 'Status Label was not updated, please try again',
|
||||
'success' => 'Status Label updated successfully.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this status label?',
|
||||
'error' => 'There was an issue deleting the location. Please try again.',
|
||||
'success' => 'The location was deleted successfully.'
|
||||
'confirm' => 'Are you sure you wish to delete this Status Label?',
|
||||
'error' => 'There was an issue deleting the Status Label. Please try again.',
|
||||
'success' => 'The Status Label was deleted successfully.'
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
12
resources/lang/el/auth/general.php
Normal file
12
resources/lang/el/auth/general.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'send_password_link' => 'Send Password Reset Link',
|
||||
'email_reset_password' => 'Email Password Reset',
|
||||
'reset_password' => 'Reset Password',
|
||||
'login' => 'Login',
|
||||
'login_prompt' => 'Please Login',
|
||||
'forgot_password' => 'I forgot my password',
|
||||
'remember_me' => 'Remember Me',
|
||||
];
|
||||
|
||||
@@ -56,8 +56,14 @@
|
||||
'depreciation' => 'Depreciation',
|
||||
'editprofile' => 'Edit Your Profile',
|
||||
'eol' => 'EOL',
|
||||
'email_domain' => 'Email Domain',
|
||||
'email_format' => 'Email Format',
|
||||
'email_domain_help' => 'This is used to generate email addresses when importing',
|
||||
'filastname_format' => 'First Initial Last Name (jsmith@example.com)',
|
||||
'firstname_lastname_format' => 'First Name Last Name (jane.smith@example.com)',
|
||||
'first' => 'First',
|
||||
'first_name' => 'First Name',
|
||||
'first_name_format' => 'First Name (jane@example.com)',
|
||||
'file_name' => 'File',
|
||||
'file_uploads' => 'File Uploads',
|
||||
'generate' => 'Generate',
|
||||
@@ -88,6 +94,7 @@
|
||||
'location' => 'Location',
|
||||
'locations' => 'Locations',
|
||||
'logout' => 'Logout',
|
||||
'lookup_by_tag' => 'Lookup by Asset Tag',
|
||||
'manufacturer' => 'Manufacturer',
|
||||
'manufacturers' => 'Manufacturers',
|
||||
'markdown' => 'This field allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
@@ -142,6 +149,7 @@
|
||||
'type' => 'Type',
|
||||
'undeployable' => 'Un-deployable',
|
||||
'unknown_admin' => 'Unknown Admin',
|
||||
'username_format' => 'Username Format',
|
||||
'update' => 'Update',
|
||||
'uploaded' => 'Uploaded',
|
||||
'user' => 'User',
|
||||
|
||||
7
resources/lang/el/passwords.php
Normal file
7
resources/lang/el/passwords.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'sent' => 'Your password link has been sent!',
|
||||
'user' => 'That user does not exist or does not have an email address associated',
|
||||
];
|
||||
|
||||
@@ -36,6 +36,12 @@ return array(
|
||||
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
|
||||
),
|
||||
|
||||
'import' => array(
|
||||
'error' => 'Some Items did not import Correctly.',
|
||||
'errorDetail' => 'The Following Items were not imported because of errors.',
|
||||
'success' => "Your File has been imported",
|
||||
),
|
||||
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this asset?',
|
||||
|
||||
@@ -10,7 +10,6 @@ return array(
|
||||
'auto_increment_prefix' => 'Prefix (optional)',
|
||||
'auto_incrementing_help' => 'Enable auto-incrementing asset IDs first to set this',
|
||||
'backups' => 'Backups',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_settings' => 'Barcode Settings',
|
||||
'confirm_purge' => 'Confirm Purge',
|
||||
'confirm_purge_help' => 'Enter the text "DELETE" in the box below to purge your deleted records. This action cannot be undone.',
|
||||
@@ -23,9 +22,9 @@ return array(
|
||||
'display_asset_name' => 'Display Asset Name',
|
||||
'display_checkout_date' => 'Display Checkout Date',
|
||||
'display_eol' => 'Display EOL in table view',
|
||||
'display_qr' => 'Display Square Codes',
|
||||
'display_qr' => 'Display 3D Codes',
|
||||
'display_alt_barcode' => 'Display 2D barcode',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_type' => '3D Barcode Type',
|
||||
'alt_barcode_type' => '2D barcode type',
|
||||
'eula_settings' => 'EULA Settings',
|
||||
'eula_markdown' => 'This EULA allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Location does not exist.',
|
||||
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
|
||||
'does_not_exist' => 'Status Label does not exist.',
|
||||
'assoc_assets' => 'This Status Label is currently associated with at least one Asset and cannot be deleted. Please update your assets to no longer reference this status and try again. ',
|
||||
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Location was not created, please try again.',
|
||||
'success' => 'Location created successfully.'
|
||||
'error' => 'Status Label was not created, please try again.',
|
||||
'success' => 'Status Label created successfully.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Location was not updated, please try again',
|
||||
'success' => 'Location updated successfully.'
|
||||
'error' => 'Status Label was not updated, please try again',
|
||||
'success' => 'Status Label updated successfully.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this status label?',
|
||||
'error' => 'There was an issue deleting the location. Please try again.',
|
||||
'success' => 'The location was deleted successfully.'
|
||||
'confirm' => 'Are you sure you wish to delete this Status Label?',
|
||||
'error' => 'There was an issue deleting the Status Label. Please try again.',
|
||||
'success' => 'The Status Label was deleted successfully.'
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
12
resources/lang/en-GB/auth/general.php
Normal file
12
resources/lang/en-GB/auth/general.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'send_password_link' => 'Send Password Reset Link',
|
||||
'email_reset_password' => 'Email Password Reset',
|
||||
'reset_password' => 'Reset Password',
|
||||
'login' => 'Login',
|
||||
'login_prompt' => 'Please Login',
|
||||
'forgot_password' => 'I forgot my password',
|
||||
'remember_me' => 'Remember Me',
|
||||
];
|
||||
|
||||
@@ -56,8 +56,14 @@
|
||||
'depreciation' => 'Depreciation',
|
||||
'editprofile' => 'Edit Your Profile',
|
||||
'eol' => 'EOL',
|
||||
'email_domain' => 'Email Domain',
|
||||
'email_format' => 'Email Format',
|
||||
'email_domain_help' => 'This is used to generate email addresses when importing',
|
||||
'filastname_format' => 'First Initial Last Name (jsmith@example.com)',
|
||||
'firstname_lastname_format' => 'First Name Last Name (jane.smith@example.com)',
|
||||
'first' => 'First',
|
||||
'first_name' => 'First Name',
|
||||
'first_name_format' => 'First Name (jane@example.com)',
|
||||
'file_name' => 'File',
|
||||
'file_uploads' => 'File Uploads',
|
||||
'generate' => 'Generate',
|
||||
@@ -88,6 +94,7 @@
|
||||
'location' => 'Location',
|
||||
'locations' => 'Locations',
|
||||
'logout' => 'Logout',
|
||||
'lookup_by_tag' => 'Lookup by Asset Tag',
|
||||
'manufacturer' => 'Manufacturer',
|
||||
'manufacturers' => 'Manufacturers',
|
||||
'markdown' => 'This field allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
@@ -142,6 +149,7 @@
|
||||
'type' => 'Type',
|
||||
'undeployable' => 'Un-deployable',
|
||||
'unknown_admin' => 'Unknown Admin',
|
||||
'username_format' => 'Username Format',
|
||||
'update' => 'Update',
|
||||
'uploaded' => 'Uploaded',
|
||||
'user' => 'User',
|
||||
|
||||
7
resources/lang/en-GB/passwords.php
Normal file
7
resources/lang/en-GB/passwords.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'sent' => 'Your password link has been sent!',
|
||||
'user' => 'That user does not exist or does not have an email address associated',
|
||||
];
|
||||
|
||||
@@ -36,6 +36,12 @@ return array(
|
||||
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
|
||||
),
|
||||
|
||||
'import' => array(
|
||||
'error' => 'Some Items did not import Correctly.',
|
||||
'errorDetail' => 'The Following Items were not imported because of errors.',
|
||||
'success' => "Your File has been imported",
|
||||
),
|
||||
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Are you sure you wish to delete this asset?',
|
||||
|
||||
@@ -10,7 +10,6 @@ return array(
|
||||
'auto_increment_prefix' => 'Prefix (optional)',
|
||||
'auto_incrementing_help' => 'Enable auto-incrementing asset IDs first to set this',
|
||||
'backups' => 'Backups',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_settings' => 'Barcode Settings',
|
||||
'confirm_purge' => 'Confirm Purge',
|
||||
'confirm_purge_help' => 'Enter the text "DELETE" in the box below to purge your deleted records. This action cannot be undone.',
|
||||
@@ -25,7 +24,7 @@ return array(
|
||||
'display_eol' => 'Display EOL in table view',
|
||||
'display_qr' => 'Display Square Codes',
|
||||
'display_alt_barcode' => 'Display 2D barcode',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_type' => '3D Barcode Type',
|
||||
'alt_barcode_type' => '2D barcode type',
|
||||
'eula_settings' => 'EULA Settings',
|
||||
'eula_markdown' => 'This EULA allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user