]
+ * @since [v4.1.10]
+ * @param $fieldsetId
+ * @return string JSON
+ */
+ public function fields($id)
+ {
+ $this->authorize('view', CustomFieldset::class);
+ $set = CustomFieldset::findOrFail($id);
+ $fields = $set->fields->get();
+ return (new CustomFieldsTransformer)->transformCustomFields($fields, $fields->count());
}
}
diff --git a/app/Http/Controllers/Api/ReportsController.php b/app/Http/Controllers/Api/ReportsController.php
index 10f63da41..bd5eb6e28 100644
--- a/app/Http/Controllers/Api/ReportsController.php
+++ b/app/Http/Controllers/Api/ReportsController.php
@@ -46,7 +46,7 @@ class ReportsController extends Controller
];
$sort = in_array($request->input('sort'), $allowed_columns) ? e($request->input('sort')) : 'created_at';
- $order = $request->input('order') === 'asc' ? 'asc' : 'desc';
+ $order = $request->input('order') === 'asc' ? 'desc' : 'asc';
$offset = request('offset', 0);
$limit = request('limit', 50);
$total = $actionlogs->count();
diff --git a/app/Http/Controllers/AssetsController.php b/app/Http/Controllers/AssetsController.php
index 9f983ddd3..a7794e247 100755
--- a/app/Http/Controllers/AssetsController.php
+++ b/app/Http/Controllers/AssetsController.php
@@ -1088,7 +1088,7 @@ class AssetsController extends Controller
\Log::debug($request->input('ids'));
- if (($request->has('ids')) && (count($request->input('ids') > 0))) {
+ if (($request->has('ids')) && (count($request->input('ids')) > 0)) {
$assets = $request->input('ids');
if (($request->has('purchase_date'))
|| ($request->has('purchase_cost'))
@@ -1131,7 +1131,13 @@ class AssetsController extends Controller
}
if ($request->has('rtd_location_id')) {
$update_array['rtd_location_id'] = $request->input('rtd_location_id');
+ if (($request->has('update_real_loc'))
+ && (($request->input('update_real_loc')) == '1'))
+ {
+ $update_array['location_id'] = $request->input('location_id');
+ }
}
+
if ($request->has('status_id')) {
$update_array['status_id'] = $request->input('status_id');
}
diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php
index 807f5466f..a5f50e5bd 100755
--- a/app/Http/Controllers/SettingsController.php
+++ b/app/Http/Controllers/SettingsController.php
@@ -375,6 +375,8 @@ class SettingsController extends Controller
$setting->brand = $request->input('brand', '1');
$setting->header_color = $request->input('header_color');
+ $setting->support_footer = $request->input('support_footer');
+ $setting->footer_text = $request->input('footer_text');
$setting->show_url_in_emails = $request->input('show_url_in_emails', '0');
diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php
index 2303da761..4a8ba70e7 100755
--- a/app/Http/Controllers/UsersController.php
+++ b/app/Http/Controllers/UsersController.php
@@ -461,7 +461,7 @@ class UsersController extends Controller
public function postBulkEditSave(Request $request)
{
$this->authorize('update', User::class);
- if ((!Input::has('ids')) || (count(Input::has('ids')) == 0)) {
+ if ((!Input::has('ids')) || (count(Input::input('ids')) == 0)) {
return redirect()->back()->with('error', 'No users selected');
} else {
diff --git a/app/Http/Transformers/AssetsTransformer.php b/app/Http/Transformers/AssetsTransformer.php
index 76c9bd9f9..611f8ec3d 100644
--- a/app/Http/Transformers/AssetsTransformer.php
+++ b/app/Http/Transformers/AssetsTransformer.php
@@ -36,13 +36,13 @@ class AssetsTransformer
'id' => (int) $asset->assetstatus->id,
'name'=> e($asset->assetstatus->name),
'status_type'=> e($asset->assetstatus->getStatuslabelType()),
- 'status_meta' => e($asset->present()->statusMeta),
+ 'status_meta' => e($asset->present()->statusMeta),
] : null,
- 'category' => ($asset->model->category) ? [
+ 'category' => (($asset->model) && ($asset->model->category)) ? [
'id' => (int) $asset->model->category->id,
'name'=> e($asset->model->category->name)
] : null,
- 'manufacturer' => ($asset->model->manufacturer) ? [
+ 'manufacturer' => (($asset->model) && ($asset->model->manufacturer)) ? [
'id' => (int) $asset->model->manufacturer->id,
'name'=> e($asset->model->manufacturer->name)
] : null,
diff --git a/app/Importer/ItemImporter.php b/app/Importer/ItemImporter.php
index 09e7d5b15..72a618cbd 100644
--- a/app/Importer/ItemImporter.php
+++ b/app/Importer/ItemImporter.php
@@ -22,6 +22,9 @@ class ItemImporter extends Importer
protected function handle($row)
{
+ // Need to reset this between iterations or we'll have stale data.
+ $this->item = [];
+
$item_category = $this->findCsvMatch($row, "category");
if ($this->shouldUpdateField($item_category)) {
$this->item["category_id"] = $this->createOrFetchCategory($item_category);
diff --git a/app/Models/Asset.php b/app/Models/Asset.php
index 8d7a5bf75..1c6ad8fcb 100644
--- a/app/Models/Asset.php
+++ b/app/Models/Asset.php
@@ -223,7 +223,7 @@ class Asset extends Depreciable
*/
public function components()
{
- return $this->belongsToMany('\App\Models\Component', 'components_assets', 'asset_id', 'component_id')->withPivot('id')->withTrashed();
+ return $this->belongsToMany('\App\Models\Component', 'components_assets', 'asset_id', 'component_id')->withPivot('id', 'assigned_qty')->withTrashed();
}
/**
diff --git a/app/Models/Setting.php b/app/Models/Setting.php
index 751faa80f..a745234b7 100755
--- a/app/Models/Setting.php
+++ b/app/Models/Setting.php
@@ -79,14 +79,11 @@ class Setting extends Model
public static function getDefaultEula()
{
-
$Parsedown = new \Parsedown();
if (Setting::getSettings()->default_eula_text) {
return $Parsedown->text(e(Setting::getSettings()->default_eula_text));
- } else {
- return null;
}
-
+ return null;
}
/**
diff --git a/app/Models/User.php b/app/Models/User.php
index bb85516e1..8fbbac9cf 100755
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -45,6 +45,7 @@ class User extends SnipeModel implements AuthenticatableContract, CanResetPasswo
'country',
'zip',
'activated',
+ 'manager_id',
];
protected $casts = [
diff --git a/app/Presenters/AssetPresenter.php b/app/Presenters/AssetPresenter.php
index 833428b5a..b8ca796d2 100644
--- a/app/Presenters/AssetPresenter.php
+++ b/app/Presenters/AssetPresenter.php
@@ -165,7 +165,7 @@ class AssetPresenter extends Presenter
"searchable" => false,
"sortable" => false,
"visible" => false,
- "title" => 'Warranty Expires',
+ "title" => trans('admin/hardware/form.warranty_expires'),
"formatter" => "dateDisplayFormatter"
],[
"field" => "notes",
@@ -246,11 +246,11 @@ class AssetPresenter extends Presenter
"searchable" => false,
"sortable" => false,
"switchable" => true,
- "title" => 'Checkin/Checkout',
+ "title" => trans('general.checkin').'/'.trans('general.checkout'),
"visible" => true,
"formatter" => "hardwareInOutFormatter",
];
-
+
$layout[] = [
"field" => "actions",
"searchable" => false,
@@ -263,7 +263,7 @@ class AssetPresenter extends Presenter
return json_encode($layout);
}
-
+
/**
* Generate html link to this items name.
@@ -325,15 +325,14 @@ class AssetPresenter extends Presenter
**/
public function name()
{
-
+
if (empty($this->model->name)) {
if (isset($this->model->model)) {
return $this->model->model->name.' ('.$this->model->asset_tag.')';
}
return $this->model->asset_tag;
- } else {
- return $this->model->name . ' (' . $this->model->asset_tag . ')';
}
+ return $this->model->name . ' (' . $this->model->asset_tag . ')';
}
@@ -399,7 +398,7 @@ class AssetPresenter extends Presenter
public function statusMeta()
{
if ($this->model->assigned) {
- return strtolower(trans('general.deployed'));
+ return 'deployed';
}
return $this->model->assetstatus->getStatuslabelType();
}
@@ -483,4 +482,3 @@ class AssetPresenter extends Presenter
return '';
}
}
-
diff --git a/app/Presenters/ComponentPresenter.php b/app/Presenters/ComponentPresenter.php
index 2ea797c4e..843d8e827 100644
--- a/app/Presenters/ComponentPresenter.php
+++ b/app/Presenters/ComponentPresenter.php
@@ -114,7 +114,7 @@ class ComponentPresenter extends Presenter
"searchable" => false,
"sortable" => false,
"switchable" => true,
- "title" => 'Checkin/Checkout',
+ "title" => trans('general.checkin').'/'.trans('general.checkout'),
"visible" => true,
"formatter" => "componentsInOutFormatter",
];
diff --git a/app/Presenters/LicensePresenter.php b/app/Presenters/LicensePresenter.php
index f58bbbe2d..3d793c33e 100644
--- a/app/Presenters/LicensePresenter.php
+++ b/app/Presenters/LicensePresenter.php
@@ -125,7 +125,7 @@ class LicensePresenter extends Presenter
"searchable" => false,
"sortable" => false,
"switchable" => true,
- "title" => 'Checkin/Checkout',
+ "title" => trans('general.checkin').'/'.trans('general.checkout'),
"visible" => true,
"formatter" => "licensesInOutFormatter",
];
diff --git a/database/migrations/2016_09_04_182149_migrate_asset_log_to_action_log.php b/database/migrations/2016_09_04_182149_migrate_asset_log_to_action_log.php
index ad8118a41..4d0de747a 100644
--- a/database/migrations/2016_09_04_182149_migrate_asset_log_to_action_log.php
+++ b/database/migrations/2016_09_04_182149_migrate_asset_log_to_action_log.php
@@ -57,7 +57,6 @@ class MigrateAssetLogToActionLog extends Migration
$a->deleted_at = $log->deleted_at;
$a->note = $log->note;
$a->expected_checkin = $log->expected_checkin;
- $a->thread_id = $log->thread_id;
$a->accepted_id = $log->accepted_id;
$a->filename = $log->filename;
diff --git a/database/migrations/2018_01_24_062633_add_footer_settings_to_settings.php b/database/migrations/2018_01_24_062633_add_footer_settings_to_settings.php
new file mode 100644
index 000000000..5b9de3ce5
--- /dev/null
+++ b/database/migrations/2018_01_24_062633_add_footer_settings_to_settings.php
@@ -0,0 +1,34 @@
+char('support_footer', 5)->nullable()->default('on');
+ $table->text('footer_text')->nullable()->default(null);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('settings', function (Blueprint $table) {
+ $table->text('support_footer');
+ $table->text('footer_text');
+ });
+ }
+}
diff --git a/resources/lang/en/admin/hardware/form.php b/resources/lang/en/admin/hardware/form.php
index af643641d..9b3ac3241 100644
--- a/resources/lang/en/admin/hardware/form.php
+++ b/resources/lang/en/admin/hardware/form.php
@@ -38,6 +38,7 @@ return array(
'tag' => 'Asset Tag',
'update' => 'Asset Update',
'warranty' => 'Warranty',
+ 'warranty_expires' => 'Warranty Expires',
'years' => 'years',
)
;
diff --git a/resources/lang/en/admin/settings/general.php b/resources/lang/en/admin/settings/general.php
index 76159635b..012cedb08 100644
--- a/resources/lang/en/admin/settings/general.php
+++ b/resources/lang/en/admin/settings/general.php
@@ -40,6 +40,8 @@ return array(
'alt_barcode_type' => '1D barcode type',
'eula_settings' => 'EULA Settings',
'eula_markdown' => 'This EULA allows Github flavored markdown.',
+ 'footer_text' => 'Additional Footer Text ',
+ 'footer_text_help' => 'This text will appear in the right-side footer. Links are allowed using Github flavored markdown. Line breaks, headers, images, etc may result in unpredictable results.',
'general_settings' => 'General Settings',
'generate_backup' => 'Generate Backup',
'header_color' => 'Header Color',
@@ -71,6 +73,7 @@ return array(
'ldap_active_flag' => 'LDAP Active Flag',
'ldap_emp_num' => 'LDAP Employee Number',
'ldap_email' => 'LDAP Email',
+ 'license' => 'Software License',
'load_remote_text' => 'Remote Scripts',
'load_remote_help_text' => 'This Snipe-IT install can load scripts from the outside world.',
'login_note' => 'Login Note',
@@ -103,6 +106,8 @@ return array(
'slack_integration' => 'Slack Settings',
'slack_integration_help' => 'Slack integration is optional, however the endpoint and channel are required if you wish to use it. To configure Slack integration, you must first create an incoming webhook on your Slack account.',
'snipe_version' => 'Snipe-IT version',
+ 'support_footer' => 'Support Footer Links ',
+ 'support_footer_help' => 'Specify who sees the links to the Snipe-IT Support info and Users Manual',
'system' => 'System Information',
'update' => 'Update Settings',
'value' => 'Value',
diff --git a/resources/lang/en/admin/users/general.php b/resources/lang/en/admin/users/general.php
index 985138d06..30355972f 100644
--- a/resources/lang/en/admin/users/general.php
+++ b/resources/lang/en/admin/users/general.php
@@ -16,6 +16,7 @@ return array(
'restore_user' => 'Click here to restore them.',
'last_login' => 'Last Login',
'ldap_config_text' => 'LDAP configuration settings can be found Admin > Settings. The (optional) selected location will be set for all imported users.',
+ 'print_assigned' => 'Print All Assigned',
'software_user' => 'Software Checked out to :name',
'view_user' => 'View User :name',
'usercsv' => 'CSV file',
diff --git a/resources/lang/en/general.php b/resources/lang/en/general.php
index f34e34c1d..1ed5a4cd9 100644
--- a/resources/lang/en/general.php
+++ b/resources/lang/en/general.php
@@ -70,6 +70,7 @@
'department' => 'Department',
'deployed' => 'Deployed',
'depreciation_report' => 'Depreciation Report',
+ 'details' => 'Details',
'download' => 'Download',
'depreciation' => 'Depreciation',
'editprofile' => 'Edit Your Profile',
@@ -82,6 +83,7 @@
'first' => 'First',
'first_name' => 'First Name',
'first_name_format' => 'First Name (jane@example.com)',
+ 'files' => 'Files',
'file_name' => 'File',
'file_uploads' => 'File Uploads',
'generate' => 'Generate',
@@ -118,6 +120,7 @@
'locations' => 'Locations',
'logout' => 'Logout',
'lookup_by_tag' => 'Lookup by Asset Tag',
+ 'maintenances' => 'Maintenances',
'manufacturer' => 'Manufacturer',
'manufacturers' => 'Manufacturers',
'markdown' => 'This field allows Github flavored markdown.',
diff --git a/resources/views/components/view.blade.php b/resources/views/components/view.blade.php
index 5f59e9d46..924d6c99b 100644
--- a/resources/views/components/view.blade.php
+++ b/resources/views/components/view.blade.php
@@ -58,7 +58,7 @@
{{ trans('general.asset') }} |
{{ trans('general.qty') }} |
{{ trans('general.date') }} |
- Checkin/Checkout |
+ {{ trans('general.checkin') }}/{{ trans('general.checkout') }} |
diff --git a/resources/views/hardware/bulk.blade.php b/resources/views/hardware/bulk.blade.php
index ff0c4cb8c..8207e9571 100755
--- a/resources/views/hardware/bulk.blade.php
+++ b/resources/views/hardware/bulk.blade.php
@@ -54,8 +54,25 @@
@include ('partials.forms.edit.location-select', ['translated_name' => trans('admin/hardware/form.default_location'), 'fieldname' => 'rtd_location_id'])
+
+
+
+
+
+
- {{ Form::checkbox('is_ad', '1', Input::old('is_ad', $setting->is_ad),array('class' => 'minimal')) }}
+ @if (config('app.lock_passwords')===true)
+ {{ Form::checkbox('is_ad', '1', Input::old('is_ad', $setting->is_ad),['class' => 'minimal disabled', 'disabled' => 'disabled']) }}
+ @else
+ {{ Form::checkbox('is_ad', '1', Input::old('is_ad', $setting->is_ad),array('class' => 'minimal')) }}
+ @endif
+
{{ trans('admin/settings/general.is_ad') }}
{!! $errors->first('is_ad', ':message') !!}
@@ -84,10 +94,16 @@
- {{ Form::label('is_ad', trans('admin/settings/general.ldap_pw_sync')) }}
+ {{ Form::label('ldap_pw_sync', trans('admin/settings/general.ldap_pw_sync')) }}
- {{ Form::checkbox('ldap_pw_sync', '1', Input::old('ldap_pw_sync', $setting->ldap_pw_sync),array('class' => 'minimal')) }}
+ @if (config('app.lock_passwords')===true)
+ {{ Form::checkbox('ldap_pw_sync', '1', Input::old('ldap_pw_sync', $setting->ldap_pw_sync),['class' => 'minimal disabled', 'disabled' => 'disabled']) }}
+ @else
+ {{ Form::checkbox('ldap_pw_sync', '1', Input::old('ldap_pw_sync', $setting->ldap_pw_sync),array('class' => 'minimal')) }}
+ @endif
+
+
{{ trans('general.yes') }}
{{ trans('admin/settings/general.ldap_pw_sync_help') }}
{!! $errors->first('ldap_pw_sync', '
:message') !!}
@@ -132,7 +148,13 @@
{{ Form::label('ldap_tls', trans('admin/settings/general.ldap_tls')) }}
- {{ Form::checkbox('ldap_tls', '1', Input::old('ldap_tls', $setting->ldap_tls),array('class' => 'minimal')) }}
+ @if (config('app.lock_passwords')===true)
+ {{ Form::checkbox('ldap_tls', '1', Input::old('ldap_tls', $setting->ldap_tls),['class' => 'minimal disabled', 'disabled' => 'disabled']) }}
+ @else
+ {{ Form::checkbox('ldap_tls', '1', Input::old('ldap_tls', $setting->ldap_tls),array('class' => 'minimal')) }}
+ @endif
+
+
{{ trans('admin/settings/general.ldap_tls_help') }}
{!! $errors->first('ldap_tls', ':message') !!}
@@ -144,7 +166,13 @@
{{ Form::label('ldap_server_cert_ignore', trans('admin/settings/general.ldap_server_cert')) }}
- {{ Form::checkbox('ldap_server_cert_ignore', '1', Input::old('ldap_server_cert_ignore', $setting->ldap_server_cert_ignore),array('class' => 'minimal')) }}
+ @if (config('app.lock_passwords')===true)
+ {{ Form::checkbox('ldap_server_cert_ignore', '1', Input::old('ldap_server_cert_ignore', $setting->ldap_server_cert_ignore),['class' => 'minimal disabled', 'disabled' => 'disabled']) }}
+ @else
+ {{ Form::checkbox('ldap_server_cert_ignore', '1', Input::old('ldap_server_cert_ignore', $setting->ldap_server_cert_ignore),array('class' => 'minimal')) }}
+ @endif
+
+
{{ trans('admin/settings/general.ldap_server_cert_ignore') }}
{!! $errors->first('ldap_server_cert_ignore', '
:message') !!}
{{ trans('admin/settings/general.ldap_server_cert_help') }}
diff --git a/resources/views/suppliers/view.blade.php b/resources/views/suppliers/view.blade.php
index f81e4f144..2534b0174 100755
--- a/resources/views/suppliers/view.blade.php
+++ b/resources/views/suppliers/view.blade.php
@@ -51,7 +51,7 @@
{{ trans('admin/hardware/form.serial') }} |
{{ trans('general.category') }} |
{{ trans('general.purchase_cost') }} |
-
Checkin/Checkout |
+
{{ trans('general.checkin') }}/{{ trans('general.checkout') }} |
{{ trans('table.actions') }} |
diff --git a/resources/views/users/view.blade.php b/resources/views/users/view.blade.php
index 1996d96c7..d43a5047f 100755
--- a/resources/views/users/view.blade.php
+++ b/resources/views/users/view.blade.php
@@ -241,7 +241,7 @@
{{ trans('admin/users/general.clone') }}
@can('delete', $user)
@@ -478,7 +478,7 @@
|
- {{ trans('general.date') }} |
+ {{ trans('general.date') }} |
{{ trans('general.admin') }} |
{{ trans('general.action') }} |
{{ trans('general.item') }} |
diff --git a/routes/api.php b/routes/api.php
index 36646956c..5b40657a7 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -219,11 +219,32 @@ Route::group(['prefix' => 'v1','namespace' => 'Api'], function () {
'uses' => 'CustomFieldsController@postReorder'
]
);
+ Route::post('{field}/associate',
+ [
+ 'as' => 'api.customfields.associate',
+ 'uses' => 'CustomFieldsController@associate'
+ ]
+ );
+ Route::post('{field}/disassociate',
+ [
+ 'as' => 'api.customfields.disassociate',
+ 'uses' => 'CustomFieldsController@disassociate'
+ ]
+ );
}); // Fields group
/*--- Fieldsets API ---*/
+ Route::group(['prefix' => 'fieldsets'], function () {
+ Route::get('{fieldset}/fields',
+ [
+ 'as' => 'api.fieldsets.fields',
+ 'uses' => 'CustomFieldsetsController@fields'
+ ]
+ );
+ });
+
Route::resource('fieldsets', 'CustomFieldsetsController',
[
'names' =>
@@ -240,7 +261,6 @@ Route::group(['prefix' => 'v1','namespace' => 'Api'], function () {
); // Custom fieldset resource
-
/*--- Groups API ---*/
Route::resource('groups', 'GroupsController',