@@ -16,6 +16,32 @@ class MainController extends Controller
16
16
{
17
17
# Рендер главной страницы приложения
18
18
public function index () {
19
+ $ section = Subsection::where ('id ' , 1 )->first ();
20
+ # Диагнозы
21
+ $ diagnoses = [];
22
+ # Вопросы
23
+ $ questions = [];
24
+ # Ответы
25
+ $ answers = [];
26
+ foreach ($ section ->diagnoses () as $ diag ) {
27
+ $ answersArray = [];
28
+ foreach ($ diag ->answers () as $ answer ) {
29
+ $ answersArray [] = $ answer ->id ;
30
+ $ answers [] = $ answer ;
31
+ $ questions [] = [
32
+ 'id ' => $ answer ->question ()->id ,
33
+ 'title ' => $ answer ->question ()->title ,
34
+ 'priority ' => $ answer ->question ()->priority ,
35
+ ];
36
+ }
37
+
38
+ $ diag ['answers ' ] = $ answersArray ;
39
+ $ diagnoses [] = $ diag ;
40
+ }
41
+
42
+ # Сортировка массива вопросов по приоритету
43
+ $ questions = array_unique ($ questions , SORT_REGULAR );
44
+
19
45
$ sections = Section::all ();
20
46
$ subsections = Subsection::all ();
21
47
return view ('welcome ' , compact ('sections ' , 'subsections ' ));
@@ -50,7 +76,12 @@ public function section(Request $request, $id) {
50
76
51
77
# Выбор подраздела
52
78
public function subsection ($ id ) {
53
- $ section = Subsection::where ('id ' , $ id )->first ();
79
+ return Main::apiData ($ id );
80
+ }
81
+
82
+ # API Первичное получение данных
83
+ public function apiIndex () {
84
+ $ section = Subsection::where ('id ' , 1 )->first ();
54
85
# Диагнозы
55
86
$ diagnoses = [];
56
87
# Вопросы
@@ -66,7 +97,7 @@ public function subsection($id) {
66
97
'id ' => $ answer ->question ()->id ,
67
98
'title ' => $ answer ->question ()->title ,
68
99
'priority ' => $ answer ->question ()->priority ,
69
- ];
100
+ ];
70
101
}
71
102
72
103
$ diag ['answers ' ] = $ answersArray ;
@@ -75,13 +106,189 @@ public function subsection($id) {
75
106
76
107
# Сортировка массива вопросов по приоритету
77
108
$ questions = array_unique ($ questions , SORT_REGULAR );
78
- // usort($questions, function($a, $b){
79
- // return ($a['priority'] - $b['priority']);
80
- // });
81
- return [
82
- 'diagnoses ' => $ diagnoses ,
83
- 'questions ' => $ questions ,
84
- 'answers ' => $ answers ,
85
- ];
109
+
110
+ $ sections = Section::all ();
111
+ $ subsections = Subsection::all ();
112
+ return compact ('sections ' , 'subsections ' );
113
+ }
114
+
115
+ # API Получения раздела
116
+ public function apiSection (Request $ request , $ id ) {
117
+ $ sex = $ request ->sex ;
118
+ if (!$ sex ) {
119
+ $ sex = 'w ' ;
120
+ }
121
+ if ($ id == '* ' ) {
122
+ # Обнулить пол (вывести все и для М и для Ж)
123
+ $ subsectionsList = Subsection::all ();
124
+ } else {
125
+ # выбираем все разделы и конвертируем json
126
+ $ subsections = Subsection::all ();
127
+ $ subsectionsList = [];
128
+ foreach ($ subsections as $ sub ) {
129
+ try {
130
+ foreach (json_decode ($ sub ->sections ) as $ section ) {
131
+ # Если в JSON найден id секции то добавляем подраздел в массив для вывода
132
+ if ($ section == $ id && (($ sub ->sex == $ sex ) || !isset ($ sub ->sex ))) {
133
+ $ subsectionsList [] = $ sub ;
134
+ }
135
+ }
136
+ } catch (Throwable $ e ) {
137
+
138
+ }
139
+ }
140
+ }
141
+
142
+ return $ subsectionsList ;
143
+ }
144
+
145
+ # API Получения подраздела
146
+ public function apiSubsection ($ id ) {
147
+ $ data = Main::apiData ($ id );
148
+ if (!$ data ) {
149
+ return Main::$ error ;
150
+ }
151
+
152
+ return reset ($ data ['questions ' ]);
153
+ }
154
+
155
+ # API Ответа на вопрос
156
+ public function apiAnswer (Request $ request ) {
157
+ if (!isset ($ request ->questions ) || !isset ($ request ->subsection )) {
158
+ return ['error ' => 'Некорректные данные ' ];
159
+ }
160
+
161
+ # Получить массив результатов
162
+ $ results = json_decode ($ request ->questions , true );
163
+
164
+ $ data = Main::apiData ((int )$ request ->subsection );
165
+ if (!$ data ) {
166
+ return Main::$ error ;
167
+ }
168
+
169
+ $ questions = $ data ['questions ' ];
170
+ $ userAnswers = Array ();
171
+
172
+ # Получаем массив с id ответов пользователя
173
+ foreach ($ data ['answers ' ] as $ answer ) {
174
+ foreach ($ results as $ key => $ res ) {
175
+ if ($ answer ->question_id == $ key && $ answer ->answer == $ res ) {
176
+ $ userAnswers [] = $ answer ->id ;
177
+ }
178
+ }
179
+ }
180
+
181
+ $ deleting = Array ();
182
+ # Пускаем цикл по диагнозам
183
+ foreach ($ data ['diagnoses ' ] as $ key => $ diagnoses ) {
184
+ $ deleteAnswers = Array ();
185
+ $ deleteQuestions = Array ();
186
+ $ opposite = 0 ;
187
+
188
+ foreach ($ diagnoses ->answers as $ delDiagnoses ) {
189
+ foreach ($ data ['answers ' ] as $ answer ) {
190
+ if ($ delDiagnoses == $ answer ->id ) {
191
+ foreach ($ userAnswers as $ userAnswer ) {
192
+ foreach ($ data ['answers ' ] as $ answer2 ) {
193
+ if ($ userAnswer == $ answer2 ->id ) {
194
+ if ($ answer2 ->question_id == $ answer ->question_id && ($ answer ->answer != $ answer2 ->answer )) {
195
+ $ opposite ++;
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+
204
+ if ($ opposite > 0 ) {
205
+
206
+ } else {
207
+ foreach ($ diagnoses ->answers as $ delDiagnoses ) {
208
+ $ count = 0 ;
209
+
210
+ foreach ($ userAnswers as $ userAnswer ) {
211
+ if ($ userAnswer == $ delDiagnoses ) {
212
+ $ count ++;
213
+ }
214
+ }
215
+
216
+ if ($ count == 0 ) {
217
+ $ deleteAnswers [] = $ delDiagnoses ;
218
+ }
219
+ }
220
+
221
+ // Получаем ID вопросов для удаления из массива
222
+ foreach ($ deleteAnswers as $ del ) {
223
+ foreach ($ data ['answers ' ] as $ delAnswer ) {
224
+ if ($ delAnswer ->id == $ del ) {
225
+ $ deleteQuestions [] = $ delAnswer ->question_id ;
226
+ }
227
+ }
228
+ }
229
+
230
+ $ questCount = 0 ;
231
+ // Цикл по вопросам
232
+ foreach ($ deleteQuestions as $ kek ) {
233
+ foreach ($ questions as $ ques ) {
234
+ // Добавить проверку на противоположный ответ
235
+ if ($ kek == $ ques ['id ' ]) {
236
+ $ questCount ++;
237
+ }
238
+ }
239
+ }
240
+
241
+ // Если все вопросы найдены в массиве - то мы их удаляем из массива
242
+ // Удаления
243
+ if ($ questCount == count ($ deleteQuestions )) {
244
+ // Удалить из массива TEST -> deleteQuestions
245
+ // Добавить в массив для удаления
246
+ foreach ($ deleteQuestions as $ del ) {
247
+ $ deleting [] = $ del ;
248
+ }
249
+ }
250
+ }
251
+ }
252
+
253
+
254
+ # Проверка на диагноз
255
+ $ diagnos = Main::checkDiagnos ($ request ->subsection , $ userAnswers );
256
+
257
+ if ($ diagnos ) {
258
+ return ['diagnoses ' => $ diagnos ];
259
+ }
260
+
261
+ ######################################################
262
+ ######################################################
263
+ ############ Удаление вопросов из массива ############
264
+ ######################################################
265
+ ######################################################
266
+
267
+ # Удаление вопросов на которые уже ответили
268
+ foreach ($ questions as $ keyQuestion => $ quest ) {
269
+ foreach ($ results as $ keyResult => $ res ) {
270
+ if ($ quest ['id ' ] == $ keyResult ) {
271
+ unset($ questions [$ keyQuestion ]);
272
+ }
273
+ }
274
+ }
275
+
276
+ $ newQuestions = $ questions ;
277
+ # Удаление вопросов
278
+ foreach ($ questions as $ keyQuestion => $ quest ) {
279
+ $ foundCount = 0 ;
280
+ foreach ($ deleting as $ res ) {
281
+ if ($ quest ['id ' ] == $ res ) {
282
+ $ foundCount ++;
283
+ }
284
+ }
285
+
286
+ # Если вопрос не найден - то удаляем его из массива
287
+ if ($ foundCount == 0 ) {
288
+ unset($ newQuestions [$ keyQuestion ]);
289
+ }
290
+ }
291
+
292
+ return reset ($ newQuestions );
86
293
}
87
294
}
0 commit comments