Skip to content

Commit d9a748a

Browse files
committed
Merge branch 'master' into fix-for-left-join-clauses
2 parents 391d78a + 1d0c1b6 commit d9a748a

File tree

16 files changed

+161
-67
lines changed

16 files changed

+161
-67
lines changed

src/app/Http/Controllers/Operations/FetchOperation.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,11 @@ private function fetch($arg)
100100
$tempQuery = $query->{$operation}($searchColumn, $search_string);
101101
}
102102
}
103-
104-
return $tempQuery;
103+
// If developer provide an empty searchable_attributes array it means he don't want us to search
104+
// in any specific column, or try to guess the column from model identifiableAttribute.
105+
// In that scenario we will not have any $tempQuery here, so we just return the query, is up to the developer
106+
// to do his own search.
107+
return $tempQuery ?? $query;
105108
});
106109
} else {
107110
foreach ((array) $config['searchable_attributes'] as $k => $searchColumn) {

src/app/Http/Controllers/Operations/ListOperation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public function search()
7474
$this->crud->applyUnappliedFilters();
7575

7676
$totalRows = $this->crud->model->count();
77-
$filteredRows = $this->crud->count();
77+
$filteredRows = $this->crud->query->toBase()->getCountForPagination();
7878
$startIndex = request()->input('start') ?: 0;
7979
// if a search term was present
8080
if (request()->input('search') && request()->input('search')['value']) {

src/resources/lang/en/base.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
'password_empty' => 'Make sure both password fields are filled out.',
4949
'password_updated' => 'Password updated.',
5050
'account_updated' => 'Account updated successfully.',
51-
'unknown_error' => 'An unknown error has occured. Please try again.',
51+
'unknown_error' => 'An unknown error has occurred. Please try again.',
5252
'error_saving' => 'Error while saving. Please try again.',
5353
'welcome' => 'Welcome!',
5454
'use_sidebar' => 'Use the sidebar to the left to create, edit or delete content.',

src/resources/lang/id/crud.php

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
'save_action_save_and_new' => 'Simpan dan buat baru',
1818
'save_action_save_and_edit' => 'Simpan dan lanjutkan perubahan',
1919
'save_action_save_and_back' => 'Simpan dan kembali',
20+
'save_action_save_and_preview' => 'Simpan dan lihat',
2021
'save_action_changed_notification' => 'Perilaku default setelah penyimpanan diubah.',
2122

2223
// Create form
@@ -37,15 +38,16 @@
3738
'all' => 'Semua ',
3839
'in_the_database' => 'di database',
3940
'list' => 'Daftar',
41+
'reset' => 'Set ulang',
4042
'actions' => 'Aksi',
4143
'preview' => 'Lihat',
4244
'delete' => 'Hapus',
4345
'admin' => 'Admin',
4446
'details_row' => 'Ini adalah baris rincian. Ubah sesuka Anda.',
4547
'details_row_loading_error' => 'Terjadi kesalahan saat memuat detail. Silakan coba lagi.',
4648
'clone' => 'Duplikat',
47-
'clone_success' => '<strong>Entri telah diduplikat</strong><br>Entri baru telah ditambahkan, dengan informasi yang sama.',
48-
'clone_failure' => '<strong>Proses duplikat gagal</strong><br>Entri baru tidak dapat dibuat. Silakan coba lagi.',
49+
'clone_success' => '<strong>Masukan telah diduplikat</strong><br>Masukan baru telah ditambahkan, dengan informasi yang sama.',
50+
'clone_failure' => '<strong>Proses duplikat gagal</strong><br>Masukan baru tidak dapat dibuat. Silakan coba lagi.',
4951

5052
// Confirmation messages and bubbles
5153
'delete_confirm' => 'Anda yakin ingin menghapus item ini?',
@@ -57,7 +59,7 @@
5759
'delete_confirmation_not_deleted_message' => 'Tidak ada yang terjadi. Item Anda aman.',
5860

5961
// Bulk actions
60-
'bulk_no_entries_selected_title' => 'Tidak ada entri yang dipilih',
62+
'bulk_no_entries_selected_title' => 'Tidak ada masukan yang dipilih',
6163
'bulk_no_entries_selected_message' => 'Silakan pilih satu atau lebih untuk melakukan tindakan massal pada mereka.',
6264

6365
// Bulk confirmation
@@ -73,8 +75,8 @@
7375

7476
// DataTables translation
7577
'emptyTable' => 'Tak ada data yang tersedia pada tabel ini',
76-
'info' => 'Menampilkan _START_ dari _END_ dari _TOTAL_ masukan',
77-
'infoEmpty' => '',
78+
'info' => 'Menampilkan _START_ hingga _END_ dari _TOTAL_ masukan',
79+
'infoEmpty' => 'Tidak ada masukan',
7880
'infoFiltered' => '(difilter dari _MAX_ jumlah masukan)',
7981
'infoPostFix' => '.',
8082
'thousands' => ',',
@@ -140,11 +142,18 @@
140142
'internal_link_placeholder' => 'Slug internal. Cth: \'admin/page\' (tanpa tanda kutip) untuk \':url\'',
141143
'external_link' => 'Tautan eksternal',
142144
'choose_file' => 'Pilih File',
145+
'new_item' => 'Item baru',
146+
'select_entry' => 'Pilih masukan',
147+
'select_entries' => 'Pilih masukan',
143148

144149
//Table field
145150
'table_cant_add' => 'Tidak dapat menambahkan :entity yang baru',
146151
'table_max_reached' => 'Jumlah maksimum :max telah tercapai',
147152

148153
// File manager
149154
'file_manager' => 'Manajer File',
155+
156+
// InlineCreateOperation
157+
'related_entry_created_success' => 'Masukan terkait telah dibuat dan dipilih.',
158+
'related_entry_created_error' => 'Tidak dapat membuat masukan terkait.',
150159
];

src/resources/lang/it/base.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010

1111
'registration_closed' => 'Le registrazioni sono chiuse.',
12+
'no_email_column' => 'Gli utenti non hanno un indirizzo email associato.',
1213
'first_page_you_see' => 'La prima pagina che vedi dopo il login',
1314
'login_status' => 'Stato autenticazione',
1415
'logged_in' => 'Sei autenticato!',
@@ -29,8 +30,8 @@
2930
'reset_password' => 'Reimposta password',
3031
'send_reset_link' => 'Invia link di reset',
3132
'click_here_to_reset' => 'Clicca qui per reimpostare la tua password',
32-
'unauthorized' => 'Non autorizzato.',
3333
'change_password' => 'Cambia Password',
34+
'unauthorized' => 'Non autorizzato.',
3435
'dashboard' => 'Dashboard',
3536
'handcrafted_by' => 'Realizzato da',
3637
'powered_by' => 'Creato con',
@@ -40,11 +41,29 @@
4041
'cancel' => 'Annulla',
4142
'error' => 'Errore',
4243
'success' => 'Operazione eseguita con successo',
44+
'warning' => 'Avvertimento',
45+
'notice' => 'Avviso',
4346
'old_password_incorrect' => 'La vecchia password non è corretta.',
4447
'password_dont_match' => 'Le password non corrispondono.',
4548
'password_empty' => 'Accertati di aver riempito entrambi i campi password.',
4649
'password_updated' => 'Password aggiornata.',
4750
'account_updated' => 'Account aggiornato con successo.',
4851
'unknown_error' => 'Si è verificato un errore sconosciuto. Riprova più tardi.',
4952
'error_saving' => 'Errore durante il salvataggio. Riprova più tardi.',
53+
'welcome' => 'Benvenuto!',
54+
'use_sidebar' => 'Utilizza la barra laterale per creare, modificare od eliminare contenuti.',
55+
56+
'password_reset' => [
57+
'greeting' => 'Ciao!',
58+
'subject' => 'Notifica di reset della password',
59+
'line_1' => 'Stai ricevendo questa e-mail in quanto abbiamo ricevuto una richiesta di reset della password dal tuo account.',
60+
'line_2' => 'Clicca il pulsante qui sotto per reimpostare la tua password:',
61+
'button' => 'Reimposta Password',
62+
'notice' => 'Se tu non hai richiesto il reset della password, non è necessaria nessun\'altra azione.',
63+
],
64+
65+
'step' => 'Passo',
66+
'confirm_email' => 'Conferma E-mail',
67+
'choose_new_password' => 'Scegli una nuova password',
68+
'confirm_new_password' => 'Conferma la nuova password',
5069
];

src/resources/lang/it/crud.php

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,32 +17,37 @@
1717
'save_action_save_and_new' => 'Salva ed aggiungi un nuovo elemento',
1818
'save_action_save_and_edit' => 'Salva e modifica questo elemento',
1919
'save_action_save_and_back' => 'Salva e torna indietro',
20+
'save_action_save_and_preview' => 'Salva e vai all\'anteprima',
2021
'save_action_changed_notification' => 'Azione predefinita cambiata',
2122

2223
// Create form
2324
'add' => 'Aggiungi',
24-
'back_to_all' => 'Torna a tutti i ',
25+
'back_to_all' => 'Torna alla lista di ',
2526
'cancel' => 'Annulla',
26-
'add_a_new' => 'Aggiungi un nuovo ',
27+
'add_a_new' => 'Aggiungi nuovo/a ',
2728

2829
// Edit form
2930
'edit' => 'Modifica',
3031
'save' => 'Salva',
3132

3233
// Translatable models
33-
'edit_translations' => 'MODIFICA TRADUZIONI',
34+
'edit_translations' => 'Modifica traduzioni',
3435
'language' => 'Lingua',
3536

3637
// CRUD table view
3738
'all' => 'Tutti i ',
3839
'in_the_database' => 'nel database',
3940
'list' => 'Lista',
41+
'reset' => 'Reimposta',
4042
'actions' => 'Azioni',
4143
'preview' => 'Anteprima',
4244
'delete' => 'Elimina',
4345
'admin' => 'Amministrazione',
4446
'details_row' => 'Questa è la riga dei dettagli. Modificala a tuo piacimento.',
4547
'details_row_loading_error' => "C'è stato un errore caricando i dettagli. Riprova.",
48+
'clone' => 'Duplica',
49+
'clone_success' => '<strong>Elemento duplicato</strong><br>Un nuovo elemento è stato creato con le stesse informazioni di questo.',
50+
'clone_failure' => '<strong>Duplicazione fallita</strong><br>Il nuovo elemento non può essere creato. Per favore, riprova.',
4651

4752
// Confirmation messages and bubbles
4853
'delete_confirm' => 'Sei sicuro di eliminare questo elemento?',
@@ -55,7 +60,7 @@
5560

5661
// Bulk actions
5762
'bulk_no_entries_selected_title' => 'Nessun record selezionato',
58-
'bulk_no_entries_selected_message' => 'Seleziona uno o più record su cui effetturare l\'operaione.',
63+
'bulk_no_entries_selected_message' => 'Seleziona uno o più record su cui effettuare l\'operazione.',
5964

6065
// Bulk confirmation
6166
'bulk_delete_are_you_sure' => 'Sei sicuro di voler eliminare :number record?',
@@ -64,16 +69,17 @@
6469
'bulk_delete_error_title' => 'Record non eliminati',
6570
'bulk_delete_error_message' => 'Non è stato possibile eliminare uno o più record',
6671

72+
// Ajax errors
6773
'ajax_error_title' => 'Errore',
6874
'ajax_error_text' => 'Errore durante il caricamento della pagina. Per favore ricarica la pagina.',
6975

7076
// DataTables translation
7177
'emptyTable' => 'Nessun record da visualizzare',
7278
'info' => 'Visualizzando da _START_ a _END_ record di _TOTAL_',
73-
'infoEmpty' => '',
79+
'infoEmpty' => 'Non vi sono elementi',
7480
'infoFiltered' => '(filtrati da _MAX_ record totali)',
75-
'infoPostFix' => '.',
76-
'thousands' => ',',
81+
'infoPostFix' => ',',
82+
'thousands' => '.',
7783
'lengthMenu' => '_MENU_ record per pagina',
7884
'loadingRecords' => 'Caricamento...',
7985
'processing' => 'Elaborazione...',
@@ -136,11 +142,18 @@
136142
'internal_link_placeholder' => 'Slug interno. Es: \'admin/page\' (no quotes) for \':url\'',
137143
'external_link' => 'Link Esterno',
138144
'choose_file' => 'Scegli file',
145+
'new_item' => 'Nuovo elemento',
146+
'select_entry' => 'Seleziona un elemento',
147+
'select_entries' => 'Select degli elementi',
139148

140149
//Table field
141150
'table_cant_add' => 'Impossibile aggiungere una nuova :entity',
142151
'table_max_reached' => 'Numero massimo di :max raggiunto',
143152

144153
// File manager
145154
'file_manager' => 'File Manager',
155+
156+
// InlineCreateOperation
157+
'related_entry_created_success' => 'L\'elemento correlato è stato creato e selezionato.',
158+
'related_entry_created_error' => 'Non è possibile creare elementi correlati.',
146159
];
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
@if (config('backpack.base.show_powered_by') || config('backpack.base.developer_link'))
22
<div class="text-muted ml-auto mr-auto">
33
@if (config('backpack.base.developer_link') && config('backpack.base.developer_name'))
4-
{{ trans('backpack::base.handcrafted_by') }} <a target="_blank" href="{{ config('backpack.base.developer_link') }}">{{ config('backpack.base.developer_name') }}</a>.
4+
{{ trans('backpack::base.handcrafted_by') }} <a target="_blank" rel="noopener" href="{{ config('backpack.base.developer_link') }}">{{ config('backpack.base.developer_name') }}</a>.
55
@endif
66
@if (config('backpack.base.show_powered_by'))
7-
{{ trans('backpack::base.powered_by') }} <a target="_blank" href="http://backpackforlaravel.com?ref=panel_footer_link">Backpack for Laravel</a>.
7+
{{ trans('backpack::base.powered_by') }} <a target="_blank" rel="noopener" href="http://backpackforlaravel.com?ref=panel_footer_link">Backpack for Laravel</a>.
88
@endif
99
</div>
1010
@endif

src/resources/views/base/inc/main_header.blade.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<header class="{{ config('backpack.base.header_class') }}">
22
<!-- Logo -->
3-
<button class="navbar-toggler sidebar-toggler d-lg-none mr-auto ml-3" type="button" data-toggle="sidebar-show">
3+
<button class="navbar-toggler sidebar-toggler d-lg-none mr-auto ml-3" type="button" data-toggle="sidebar-show" aria-label="{{ trans('backpack::base.toggle_navigation')}}">
44
<span class="navbar-toggler-icon"></span>
55
</button>
6-
<a class="navbar-brand" href="{{ url(config('backpack.base.home_link')) }}">
6+
<a class="navbar-brand" href="{{ url(config('backpack.base.home_link')) }}" title="{{ config('backpack.base.project_name') }}">
77
{!! config('backpack.base.project_logo') !!}
88
</a>
9-
<button class="navbar-toggler sidebar-toggler d-md-down-none" type="button" data-toggle="sidebar-lg-show">
9+
<button class="navbar-toggler sidebar-toggler d-md-down-none" type="button" data-toggle="sidebar-lg-show" aria-label="{{ trans('backpack::base.toggle_navigation')}}">
1010
<span class="navbar-toggler-icon"></span>
1111
</button>
1212

src/resources/views/crud/columns/image.blade.php

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
{{-- image column type --}}
22
@php
33
$value = data_get($entry, $column['name']);
4+
5+
if($value) {
6+
$column['height'] = $column['height'] ?? "25px";
7+
$column['width'] = $column['width'] ?? "auto";
8+
$column['radius'] = $column['radius'] ?? "3px";
9+
$column['prefix'] = $column['prefix'] ?? '';
410
5-
$column['height'] = $column['height'] ?? "25px";
6-
$column['width'] = $column['width'] ?? "auto";
7-
$column['radius'] = $column['radius'] ?? "3px";
8-
$column['prefix'] = $column['prefix'] ?? '';
11+
if (is_array($value)) {
12+
$value = json_encode($value);
13+
}
914
10-
if (is_array($value)) {
11-
$value = json_encode($value);
12-
}
15+
if (preg_match('/^data\:image\//', $value)) { // base64_image
16+
$href = $src = $value;
17+
} elseif (isset($column['disk'])) { // image from a different disk (like s3 bucket)
18+
$href = $src = Storage::disk($column['disk'])->url($column['prefix'].$value);
19+
} else { // plain-old image, from a local disk
20+
$href = $src = asset( $column['prefix'] . $value);
21+
}
1322
14-
if (preg_match('/^data\:image\//', $value)) { // base64_image
15-
$href = $src = $value;
16-
} elseif (isset($column['disk'])) { // image from a different disk (like s3 bucket)
17-
$href = $src = Storage::disk($column['disk'])->url($column['prefix'].$value);
18-
} else { // plain-old image, from a local disk
19-
$href = $src = asset( $column['prefix'] . $value);
23+
$column['wrapper']['element'] = $column['wrapper']['element'] ?? 'a';
24+
$column['wrapper']['href'] = $column['wrapper']['href'] ?? $href;
25+
$column['wrapper']['target'] = $column['wrapper']['target'] ?? '_blank';
2026
}
21-
22-
$column['wrapper']['element'] = $column['wrapper']['element'] ?? 'a';
23-
$column['wrapper']['href'] = $column['wrapper']['href'] ?? $href;
24-
$column['wrapper']['target'] = $column['wrapper']['target'] ?? '_blank';
2527
@endphp
2628

2729
<span>

src/resources/views/crud/fields/relationship/fetch.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ function bpFieldInitFetchElement(element) {
186186
var $dependencies = JSON.parse(element.attr('data-dependencies'));
187187
var $allows_null = element.attr('data-column-nullable') == 'true' ? true : false;
188188
var $appLang = element.attr('data-app-current-lang');
189-
var $selectedOptions = JSON.parse(element.attr('data-selected-options') ?? null);
189+
var $selectedOptions = typeof element.attr('data-selected-options') === 'string' ? JSON.parse(element.attr('data-selected-options')) : JSON.parse(null);
190190
var $multiple = element.prop('multiple');
191191
192192
var FetchAjaxFetchSelectedEntry = function (element) {

0 commit comments

Comments
 (0)