Skip to content

Commit d0f08a5

Browse files
authored
merge sync with oficial grocerycrud, security input fixeds, datatables and php 7.3 compat
* remove php 7.3 warnings * datatables theme - update table fails after delete * required_fields doesn't work for relation_n_n fields * input filters chars for security
2 parents eab3c1e + 0391c99 commit d0f08a5

File tree

5 files changed

+102
-66
lines changed

5 files changed

+102
-66
lines changed

application/libraries/Grocery_CRUD.php

+40-21
Original file line numberDiff line numberDiff line change
@@ -737,9 +737,16 @@ protected function db_insert_validation()
737737
foreach($add_fields as $add_field)
738738
{
739739
$field_name = $add_field->field_name;
740-
if(!isset($this->validation_rules[$field_name]) && in_array( $field_name, $required_fields) )
741-
{
742-
$this->set_rules( $field_name, $field_types[$field_name]->display_as, 'required');
740+
741+
// Workaround as Codeigniter set_rules has a bug with array and doesn't work with required fields.
742+
// We are basically doing the check here!
743+
if (array_key_exists($field_name, $this->relation_n_n) && in_array($field_name, $required_fields)) {
744+
if (!array_key_exists($field_name, $_POST)) {
745+
// This will always throw an error!
746+
$this->set_rules($field_name, $field_types[$field_name]->display_as, 'required');
747+
}
748+
} else if(!isset($this->validation_rules[$field_name]) && in_array( $field_name, $required_fields) ) {
749+
$this->set_rules($field_name, $field_types[$field_name]->display_as, 'required');
743750
}
744751
}
745752
}
@@ -830,10 +837,19 @@ protected function db_update_validation()
830837
foreach($edit_fields as $edit_field)
831838
{
832839
$field_name = $edit_field->field_name;
833-
if(!isset($this->validation_rules[$field_name]) && in_array( $field_name, $required_fields) )
834-
{
835-
$this->set_rules( $field_name, $field_types[$field_name]->display_as, 'required');
840+
841+
// Workaround as Codeigniter set_rules has a bug with array and doesn't work with required fields.
842+
// We are basically doing the check here!
843+
if (array_key_exists($field_name, $this->relation_n_n) && in_array($field_name, $required_fields)) {
844+
if (!array_key_exists($field_name, $_POST)) {
845+
// This will always throw an error!
846+
$this->set_rules($field_name, $field_types[$field_name]->display_as, 'required');
847+
}
848+
} else if(!isset($this->validation_rules[$field_name]) && in_array( $field_name, $required_fields) ) {
849+
$this->set_rules($field_name, $field_types[$field_name]->display_as, 'required');
836850
}
851+
852+
837853
}
838854
}
839855

@@ -2849,17 +2865,18 @@ protected function get_add_input_fields($field_values = null)
28492865
case 'invisible':
28502866
unset($this->add_fields[$field_num]);
28512867
unset($fields[$field_num]);
2852-
continue;
2853-
break;
2868+
break;
28542869
case 'hidden':
28552870
$this->add_hidden_fields[] = $field_input;
28562871
unset($this->add_fields[$field_num]);
28572872
unset($fields[$field_num]);
2858-
continue;
2859-
break;
2873+
break;
2874+
default:
2875+
$input_fields[$field->field_name] = $field_input;
2876+
break;
28602877
}
28612878

2862-
$input_fields[$field->field_name] = $field_input;
2879+
28632880
}
28642881

28652882
return $input_fields;
@@ -2892,17 +2909,18 @@ protected function get_edit_input_fields($field_values = null)
28922909
case 'invisible':
28932910
unset($this->edit_fields[$field_num]);
28942911
unset($fields[$field_num]);
2895-
continue;
2896-
break;
2912+
break;
28972913
case 'hidden':
28982914
$this->edit_hidden_fields[] = $field_input;
28992915
unset($this->edit_fields[$field_num]);
29002916
unset($fields[$field_num]);
2901-
continue;
2902-
break;
2917+
break;
2918+
default:
2919+
$input_fields[$field->field_name] = $field_input;
2920+
break;
29032921
}
29042922

2905-
$input_fields[$field->field_name] = $field_input;
2923+
29062924
}
29072925

29082926
return $input_fields;
@@ -2950,17 +2968,18 @@ protected function get_read_input_fields($field_values = null)
29502968
case 'invisible':
29512969
unset($this->read_fields[$field_num]);
29522970
unset($fields[$field_num]);
2953-
continue;
29542971
break;
29552972
case 'hidden':
29562973
$this->read_hidden_fields[] = $field_input;
29572974
unset($this->read_fields[$field_num]);
29582975
unset($fields[$field_num]);
2959-
continue;
29602976
break;
2977+
default:
2978+
$input_fields[$field->field_name] = $field_input;
2979+
break;
2980+
29612981
}
29622982

2963-
$input_fields[$field->field_name] = $field_input;
29642983
}
29652984

29662985
return $input_fields;
@@ -3257,12 +3276,12 @@ public function getStateInfo()
32573276
if (is_array($data['search_field'])) {
32583277
$search_array = array();
32593278
foreach ($data['search_field'] as $search_key => $search_field_name) {
3260-
$search_field_name = preg_replace('/[^a-zA-Z0-9_]/', '' , $search_field_name);
3279+
$search_field_name = preg_replace("/[=\"'?\\\\]/", '' , $search_field_name);
32613280
$search_array[$search_field_name] = isset($data['search_text'][$search_key]) ? $data['search_text'][$search_key] : '';
32623281
}
32633282
$state_info->search = $search_array;
32643283
} else {
3265-
$field_name = preg_replace('/[^a-zA-Z0-9_]/', '' , $data['search_field']);
3284+
$field_name = preg_replace("/[=\"'?\\\\]/", '' , $data['search_field']);
32663285
$state_info->search = (object)array(
32673286
'field' => $field_name,
32683287
'text' => $data['search_text'] );
+38-41
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
11
<?php
22
/* Translated by: @slav123 */
3-
$lang['list_add'] = 'Dodaj';
3+
$lang['list_add'] = 'Dodaj';
44
$lang['list_actions'] = 'Operacje';
5-
$lang['list_page'] = 'Strony';
5+
$lang['list_page'] = 'Strony';
66
$lang['list_paging_of'] = 'z';
77
$lang['list_displaying'] = 'Wyświetlanie od {start} do {end} z {results} rekordów';
88
$lang['list_filtered_from'] = '(filtrowanie spośród {total_results} dostępnych pozycji)';
99
$lang['list_show_entries'] = 'Wyświetlanie {paging} pozycji';
1010
$lang['list_no_items'] = 'Brak pozycji do wyświetlenia';
11-
$lang['list_zero_entries'] = 'Zero wyników';
11+
$lang['list_zero_entries'] = 'Brak wyników';
1212
$lang['list_search'] = 'Szukaj';
1313
$lang['list_search_all'] = 'Szukaj wszystkie';
14-
$lang['list_clear_filtering'] = 'Wyczyść filtry';
14+
$lang['list_clear_filtering'] = 'Usuń filtry';
1515
$lang['list_delete'] = 'Usuń';
16-
$lang['list_edit'] = 'Edytuj';
16+
$lang['list_edit'] = 'Edytuj';
1717
$lang['list_paging_first'] = 'Pierwszy';
18-
$lang['list_paging_previous'] = 'Poprzedni';
18+
$lang['list_paging_previous'] = 'Poprzedni';
1919
$lang['list_paging_next'] = 'Następny';
2020
$lang['list_paging_last'] = 'Ostatni';
2121
$lang['list_loading'] = 'Ładowanie...';
2222

23-
$lang['form_edit'] = 'Edytuj';
23+
$lang['form_edit'] = 'Edytuj';
2424
$lang['form_back_to_list'] = 'Wróć do listy';
25-
$lang['form_update_changes'] = 'Zapisz zmiany';
25+
$lang['form_update_changes'] = 'Zapisz zmiany';
2626
$lang['form_cancel'] = 'Anuluj';
27-
$lang['form_update_loading'] = 'Aktualizacja, proszę czekać...';
28-
$lang['update_success_message'] = 'Rekord zostały pomyślnie zaktualizowany.';
29-
$lang['form_go_back_to_list'] = 'Wróć do listy';
27+
$lang['form_update_loading'] = 'Aktualizacja, proszę czekać...';
28+
$lang['update_success_message'] = 'Rekord zostały pomyślnie zaktualizowany.';
29+
$lang['form_go_back_to_list'] = 'Wróć do listy';
3030

31-
$lang['form_add'] = 'Dodaj';
32-
$lang['insert_success_message'] = 'Rekord został pomyślnie zapisany.';
33-
$lang['form_or'] = 'lub';
34-
$lang['form_save'] = 'Zapisz';
35-
$lang['form_insert_loading'] = 'Zapisywanie, proszę czekać...';
31+
$lang['form_add'] = 'Dodaj';
32+
$lang['insert_success_message'] = 'Rekord został pomyślnie zapisany.';
33+
$lang['form_or'] = 'lub';
34+
$lang['form_save'] = 'Zapisz';
35+
$lang['form_insert_loading'] = 'Zapisywanie, proszę czekać...';
3636

37-
$lang['form_upload_a_file'] = 'Dodaj plik';
38-
$lang['form_upload_delete'] = 'usuń';
37+
$lang['form_upload_a_file'] = 'Dodaj plik';
38+
$lang['form_upload_delete'] = 'usuń';
3939
$lang['form_button_clear'] = 'Wyczyść';
4040

41-
$lang['delete_success_message'] = 'Rekord został pomyślnie usunięty z bazy danych.';
42-
$lang['delete_error_message'] = 'Rekord nie został usunięty z bazy danych.';
41+
$lang['delete_success_message'] = 'Rekord został pomyślnie usunięty z bazy danych.';
42+
$lang['delete_error_message'] = 'Rekord nie został usunięty z bazy danych.';
4343

4444
/* Javascript messages */
4545
$lang['alert_add_form'] = 'Dane które dodałeś mogą nie być zapisane.\\nNa pewno chcesz wrócić do listy?';
@@ -56,46 +56,43 @@
5656
$lang['form_active'] = 'aktywny';
5757

5858
/* Added in version 1.2.2 */
59-
$lang['form_save_and_go_back'] = 'Zapisz i wróć do listy';
60-
$lang['form_update_and_go_back']= 'Zaktualizuj i wróc do listy';
59+
$lang['form_save_and_go_back'] = 'Zapisz i wróć do listy';
60+
$lang['form_update_and_go_back'] = 'Zaktualizuj i wróc do listy';
6161

6262
/* Upload functionality */
63-
$lang['string_delete_file'] = "Usuwanie pliku";
63+
$lang['string_delete_file'] = "Usuwanie pliku";
6464
$lang['string_progress'] = "Postęp: ";
65-
$lang['error_on_uploading'] = "Pojawił się błąd podczas wgrywania pliku.";
65+
$lang['error_on_uploading'] = "Pojawił się błąd podczas wgrywania pliku.";
6666
$lang['message_prompt_delete_file'] = "Na pewno chcesz usunąć ten plik?";
6767

68-
$lang['error_max_number_of_files'] = "Możesz tylko wgrać jeden plik na raz.";
68+
$lang['error_max_number_of_files'] = "Możesz wgrać tylko jeden plik na raz.";
6969
$lang['error_accept_file_types'] = "Nie możesz wgrywać plików tego typu.";
7070
$lang['error_max_file_size'] = "Wybrany plik przekracza maksymalny rozmiar {max_file_size} dozwolonych plików.";
7171
$lang['error_min_file_size'] = "Nie możesz wgrywać pustego pliku.";
7272

7373
/* Added in version 1.3.1 */
74-
$lang['list_export'] = "Eksportuj";
75-
$lang['list_print'] = "Drukuj";
76-
$lang['minimize_maximize'] = 'Minimalizuj/Maksymalizuj';
74+
$lang['list_export'] = "Eksportuj";
75+
$lang['list_print'] = "Drukuj";
76+
$lang['minimize_maximize'] = 'Minimalizuj/Maksymalizuj';
7777

7878
/* Added in version 1.4 */
79-
$lang['list_view'] = 'View';
79+
$lang['list_view'] = 'Zobacz';
8080

8181
/* Added in version 1.5.1 */
82-
$lang['ui_day'] = 'dd';
83-
$lang['ui_month'] = 'mm';
84-
$lang['ui_year'] = 'yyyy';
82+
$lang['ui_day'] = 'dd';
83+
$lang['ui_month'] = 'mm';
84+
$lang['ui_year'] = 'yyyy';
8585

8686
/* Added in version 1.5.2 */
87-
$lang['list_more'] = 'More';
87+
$lang['list_more'] = 'Więcej';
8888

8989
/* Added in version 1.5.6 */
90-
$lang['list_search_column'] = 'Search {column_name}';
90+
$lang['list_search_column'] = 'Szukaj {column_name}';
9191

9292
/* Added in version 1.5.8 */
93-
$lang['alert_delete_multiple'] = 'Are you sure that you want to delete those {items_amount} items?';
93+
$lang['alert_delete_multiple'] = 'Czy na pewno chcesz usunąć te rekordy ({items_amount}) ?';
9494

95-
$lang['alert_delete_multiple_one'] = 'Are you sure that you want to delete this 1 item?';
95+
$lang['alert_delete_multiple_one'] = 'Czy na pewno chcesz usunąć ten rekord?';
9696

97-
98-
99-
/* Added in version 1.6.1 */
100-
$lang['list_clone'] = 'Clone';
101-
97+
/* Added in version 1.6.1 */
98+
$lang['list_clone'] = 'Klonuj';

assets/grocery_crud/themes/datatables/js/datatables.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@ function supports_html5_storage()
1313
}
1414
}
1515

16+
function success_message(message) {
17+
$('#list-report-success').html(message);
18+
$('#list-report-success').slideDown();
19+
}
20+
21+
function error_message(message) {
22+
$('#list-report-error').html(message);
23+
$('#list-report-error').slideDown();
24+
}
25+
1626
var use_storage = supports_html5_storage();
1727

1828
var aButtons = [];
@@ -210,8 +220,6 @@ function delete_row(delete_url , row_id)
210220
{
211221
if(data.success)
212222
{
213-
success_message(data.success_message);
214-
215223
chosen_table = datatables_get_chosen_table($('tr#row-'+row_id).closest('.groceryCrudTable'));
216224

217225
$('tr#row-'+row_id).addClass('row_selected');

assets/grocery_crud/themes/flexigrid/js/flexigrid.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
function success_message(message) {
2+
$('#list-report-success').html(message);
3+
$('#list-report-success').slideDown();
4+
}
5+
6+
function error_message(message) {
7+
$('#list-report-error').html(message);
8+
$('#list-report-error').slideDown();
9+
}
10+
111
$(function(){
212
$('.quickSearchButton').click(function(){
313
$(this).closest('.flexigrid').find('.quickSearchBox').slideToggle('normal');
@@ -170,8 +180,6 @@ $(function(){
170180
if(data.success)
171181
{
172182
this_container.find('.ajax_refresh_and_loading').trigger('click');
173-
174-
success_message(data.success_message);
175183
}
176184
else
177185
{

change_log.txt

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
v1.6.3
22
- #465: Translation for Spanish Uruguay by @mlopezcoria
3+
- #470: Update Polish translation by @tikky
4+
- #468: Remove PHP 7.3 warnings
5+
- #38: Bug fix: required_fields doesn't work for relation_n_n fields
6+
- #469: datatables theme - update table fails after delete
37
v 1.6.2
48
- #442: Searching in grid with value 0 is not working
59
- #458: Updated Lithuanian language by @dgvirtual

0 commit comments

Comments
 (0)