@@ -25,6 +25,24 @@ class GoogleSheetsProcess {
2525 * Process google sheet.
2626 */
2727 public function __construct ($ gsheet_returned_data , $ sheet_letters , $ process = 'ss ' ) {
28+ // Validate input data.
29+ if (!is_array ($ gsheet_returned_data ) || empty ($ gsheet_returned_data )) {
30+ $ this ->processedData = ['rows ' => [], 'header ' => []];
31+ return ;
32+ }
33+
34+ // Validate and sanitize process parameter.
35+ $ allowed_processes = ['ss ' , 'custom ' ];
36+ $ process = in_array ($ process , $ allowed_processes , TRUE ) ? $ process : 'ss ' ;
37+
38+ // Validate sheet_letters is a string before processing.
39+ // If not a string (e.g., NULL, array), default to empty string
40+ // which results in no columns being selected for processing.
41+ if (!is_string ($ sheet_letters )) {
42+ $ sheet_letters = '' ;
43+ }
44+
45+ // Sanitize sheet letters input.
2846 $ sheet_letters = strtolower ($ sheet_letters );
2947 $ sheet_letters = str_replace (' ' , '' , $ sheet_letters );
3048 $ sheet_letters = explode (', ' , Xss::filter ($ sheet_letters ));
@@ -54,50 +72,67 @@ public function __construct($gsheet_returned_data, $sheet_letters, $process = 's
5472 'v ' => 21 ,
5573 'w ' => 22 ,
5674 'x ' => 23 ,
57- 'y ' => 25 ,
58- 'z ' => 26 ,
75+ 'y ' => 24 ,
76+ 'z ' => 25 ,
5977 ];
78+ $ sheet_items = [];
6079 foreach ($ sheet_letters as $ sheet_letter ) {
61- $ sheet_items [] = $ alphabet [$ sheet_letter ];
80+ if (isset ($ alphabet [$ sheet_letter ])) {
81+ $ sheet_items [] = $ alphabet [$ sheet_letter ];
82+ }
6283 }
63- // @todo looking for $process but there may be a better way to clean this up
64- // later. Fix some day.
65- if ($ process == 'custom ' ) {
84+ if ($ process === 'custom ' ) {
85+ $ sheet_header = [];
6686 foreach ($ gsheet_returned_data [0 ] as $ key => $ value ) {
6787 $ sheet_header [] = $ key ;
6888 $ i ++;
6989 }
90+ $ headers = [];
7091 foreach ($ sheet_items as $ value ) {
71- $ headers [] = $ sheet_header [$ value ];
92+ if (isset ($ sheet_header [$ value ])) {
93+ $ headers [] = $ sheet_header [$ value ];
94+ }
7295 }
7396
7497 $ format = "markdown " ;
98+ $ rows = [];
7599 foreach ($ gsheet_returned_data as $ key => $ value ) {
100+ $ item = [];
76101 foreach ($ headers as $ key => $ header ) {
77- $ item [$ key ] = isset ($ value [$ header ]) ? check_markup ($ value [$ header ], $ format ) : '' ;
102+ // Sanitize data from external spreadsheet.
103+ $ raw_value = $ value [$ header ] ?? '' ;
104+ $ item [$ key ] = check_markup (Xss::filter ($ raw_value ), $ format );
78105 }
79106 $ rows [] = [
80107 'data ' => $ item ,
81108 ];
82109 }
83110 }
84111 else {
112+ $ sheet_header = [];
85113 foreach ($ gsheet_returned_data [0 ] as $ key => $ value ) {
86114 $ sheet_header [] = $ value ;
87115 $ i ++;
88116 }
117+ $ headers = [];
89118 foreach ($ sheet_items as $ value ) {
90- $ headers [] = $ sheet_header [$ value ];
119+ if (isset ($ sheet_header [$ value ])) {
120+ $ headers [] = $ sheet_header [$ value ];
121+ }
91122 }
92123
93124 $ format = "markdown " ;
125+ $ rows = [];
94126 $ rows_exist = isset ($ gsheet_returned_data [1 ]) ? TRUE : FALSE ;
95127 if ($ rows_exist ) {
96128 foreach ($ gsheet_returned_data as $ key => $ value ) {
97129 // Skip first header row.
98- if ($ key != 0 ) {
130+ if ($ key !== 0 ) {
131+ $ item = [];
99132 foreach ($ sheet_items as $ key => $ header ) {
100- $ item [$ key ]['data ' ]['#markup ' ] = isset ($ value [$ header ]) ? check_markup ($ value [$ header ], $ format ) : '' ;
133+ // Sanitize data from external spreadsheet.
134+ $ raw_value = $ value [$ header ] ?? '' ;
135+ $ item [$ key ]['data ' ]['#markup ' ] = check_markup (Xss::filter ($ raw_value ), $ format );
101136 }
102137 $ rows [] = $ item ;
103138 }
0 commit comments