· 5 years ago · May 03, 2020, 10:58 AM
1#if defined _diary_included
2 #endinput
3#endif
4#define _diary_included
5
6#if !defined DIARY_MYSQL_CONNECTION_ID
7 #define DIARY_MYSQL_CONNECTION_ID \
8 1
9#endif
10
11#if !defined DIARY_MYSQL_TABLE_NAME
12 #define DIARY_MYSQL_TABLE_NAME \
13 "diary"
14#endif
15
16#if !defined DIARY_MYSQL_NOTATION_TABLE_NAME
17 #define DIARY_MYSQL_NOTATION_TABLE_NAME \
18 "diary_notation"
19#endif
20
21#if !defined DIARY_MYSQL_PLAYER_TABLE_NAME
22 #define DIARY_MYSQL_PLAYER_TABLE_NAME \
23 "accounts"
24#endif
25
26#if !defined DIARY_MYSQL_PLAYER_ID_TABLE_NAM
27 #define DIARY_MYSQL_PLAYER_ID_TABLE_NAM \
28 "pID"
29#endif
30
31#if !defined DIARY_MYSQL_PLAYER_NAME_TABLE_N
32 #define DIARY_MYSQL_PLAYER_NAME_TABLE_N \
33 "Name"
34#endif
35
36#if !defined cDIARY_CAPTION
37 #define cDIARY_CAPTION \
38 "{73B461}"
39#endif
40
41#if !defined cDIARY_SORTED_TYPE
42 #define cDIARY_SORTED_TYPE \
43 "{FE542F}"
44#endif
45
46#if !defined cDIARY_SORTED_PICK_TYPE
47 #define cDIARY_SORTED_PICK_TYPE \
48 "{FE542F}"
49#endif
50
51#if !defined cDIARY_SORTED_PICK_NEXT
52 #define cDIARY_SORTED_PICK_NEXT \
53 "{73B461}"
54#endif
55
56#if !defined cDIARY_SORTED_PICK_BACK
57 #define cDIARY_SORTED_PICK_BACK \
58 "{D15F47}"
59#endif
60
61#if !defined cDIARY_EXAMPLE_DIALOG
62 #define cDIARY_EXAMPLE_DIALOG \
63 "{F3FC8D}"
64#endif
65
66#if !defined cDIARY_INFO
67 #define cDIARY_INFO \
68 "{FE542F}"
69#endif
70
71#define DIARY_INVALID_ID 0
72
73const
74 DIARY_MAX_CAPTION_LENGTH = 40,
75 DIARY_MIN_CAPTION_LENGTH = 2,
76
77 DIARY_MAX_CONTENTS_LENGTH = 128,
78 DIARY_MIN_CONTENTS_LENGTH = 2;
79
80// Информация об диалогах
81
82enum
83{
84 DIARY_DIALOG_MENU = 4077,
85 DIARY_DIALOG_NOTATION_MANAGMEN,
86 DIARY_DIALOG_PICK_DATE,
87 DIARY_DIALOG_CREATE_CAPTION,
88 DIARY_DIALOG_CREATE_CONTENTS,
89 DIARY_DIALOG_CREATED_CONTENTS,
90 DIARY_DIALOG_NOTATION_LIST,
91 DIARY_DIALOG_NOTATION_EDIT_M,
92 DIARY_DIALOG_NOTATION_LIST_V,
93 DIARY_DIALOG_NOTATION_EDIT_CAP,
94 DIARY_DIALOG_NOTATION_EDIT_CON,
95 DIARY_DIALOG_ACCEPT_TO_DELETE_D,
96 DIARY_DIALOG_ACCEPT_TO_DELETE_N
97}
98
99// Информация об сортировке даты при создании записи
100
101enum _:e_DIARY_SORTED_PICK_DATE
102{
103 DIARY_SORTED_PICK_DATE_DAY,
104 DIARY_SORTED_PICK_DATE_MONTH,
105 DIARY_SORTED_PICK_DATE_YEAR
106}
107
108const
109 MAX_SORTED_PICK_DATE = e_DIARY_SORTED_PICK_DATE,
110 MAX_SORTED_PICK_DATE_M_NAME = 5,
111 MAX_SORTED_PICK_DATE_NAME = 13,
112 MAX_SORTED_PICK_DATE_IN_ROW = 10,
113 MAX_SORTED_PICK_DATE_LEN = 11;
114
115enum _:e_DiarySortedPickParams
116{
117 dsp_mysqlType[MAX_SORTED_PICK_DATE_M_NAME + 1],
118 dsp_dateName[MAX_SORTED_PICK_DATE_NAME]
119}
120
121static
122 DiarySortedPickParams[MAX_SORTED_PICK_DATE][e_DiarySortedPickParams] =
123 {
124 { // DIARY_SORTED_PICK_DATE_DAY
125 "DAY", "Дням"
126 },
127 { // DIARY_SORTED_PICK_DATE_MONTH
128 "MONTH", "Месяцам"
129 },
130 { // DIARY_SORTED_PICK_DATE_YEAR
131 "YEAR", "Годам"
132 }
133 };
134// Информация об сортировках списков
135
136enum _:e_DIARY_SORTED_TYPE
137{
138 DIARY_SORTED_TYPE_ASC,
139 DIARY_SORTED_TYPE_DESC
140}
141
142const
143 MAX_DIARY_SORTED_TYPE = e_DIARY_SORTED_TYPE,
144 MAX_DIARY_SORTED_TYPE_OPER_LEN = 4,
145 MAX_DIARY_SORTED_TYPE_NAME_LEN = 11;
146
147enum e_DiarySortedInfo
148{
149 ds_operator[MAX_DIARY_SORTED_TYPE_OPER_LEN + 1],
150 ds_name[MAX_DIARY_SORTED_TYPE_NAME_LEN + 1]
151}
152
153static const
154 DIARTY_SORTED_TYPE[e_DIARY_SORTED_TYPE][e_DiarySortedInfo] =
155 {
156 {// DIARY_SORTED_TYPE_ASC
157 "ASC", "Возрастанию"
158 },
159 {// DIARY_SORTED_TYPE_DESC
160 "DESC", "Убыванию"
161 }
162 };
163
164// Информация об цветовых кодах
165
166enum _:e_COLOR_TAG_TYPE
167{
168 COLOR_TAG_BLUE,
169 COLOR_TAG_RED,
170 COLOR_TAG_WHITE
171}
172
173const
174 MAX_COLOR_TAG_TYPE = e_COLOR_TAG_TYPE,
175 MAX_COLOR_TAG_START_LENGTH = 10,
176 MAX_COLOR_TAG_END_LENGTH = 10,
177 MAX_COLOR_TAG_HEX_LENGTH = 10,
178 MAX_COLOR_TAG_NAME_LENGTH = 7;
179
180enum e_ColorTagParams
181{
182 ct_start[MAX_COLOR_TAG_START_LENGTH + 1],
183 ct_end[MAX_COLOR_TAG_START_LENGTH + 1],
184 ct_hex,
185 ct_name[MAX_COLOR_TAG_NAME_LENGTH + 1],
186 ct_startLen,
187 ct_endLen
188}
189
190static
191 ColorTagParams[MAX_COLOR_TAG_TYPE][e_ColorTagParams] =
192 {
193 { // COLOR_TAG_BLUE
194 "<blue>", "</blue>", 0x33AAFFFF, "синий"
195 },
196 { // COLOR_TAG_RED
197 "<red>", "</red>", 0xAA3333FF, "красный"
198 },
199 { // COLOR_TAG_WHITE
200 "<white>", "/white", 0xFFFFFFFF, "белый"
201 }
202 };
203
204const
205 MAX_LIST_COUNT_IN_ROW = 10,
206 MAX_LIST_CONTENTS_LENGTH = 50;
207
208// Информация игрока для записной книги
209
210enum e_PlayerDiaryInfo
211{
212 pd_playerTableId,
213 pd_diaryTableId
214}
215
216static
217 pDiaryInfo[MAX_PLAYERS][e_PlayerDiaryInfo];
218
219// Временная информация игрока для записной книги
220
221enum e_PlayerTempDiaryInfo
222{
223 ptd_sortedType,
224
225 ptd_diaryTableId,
226 ptd_diaryOwnerName[MAX_PLAYER_NAME + 1],
227
228 ptd_caption[DIARY_MAX_CAPTION_LENGTH + 1],
229 ptd_contents[DIARY_MAX_CONTENTS_LENGTH + 1],
230
231 Cache:ptd_dateCacheId,
232
233 Cache:ptd_ListCacheId,
234 ptd_listPage,
235 ptd_listIDX,
236 bool:ptd_listEdit,
237
238 ptd_sortedPickType,
239 ptd_sortedPickDate[MAX_SORTED_PICK_DATE_LEN + 1]
240}
241
242static
243 pTempDiaryInfo[MAX_PLAYERS][e_PlayerTempDiaryInfo],
244 NULL_pTempDiaryInfo[e_PlayerTempDiaryInfo] =
245 {
246 DIARY_SORTED_TYPE_ASC,
247
248 0,
249 "",
250
251 "",
252 "",
253
254 Cache:-1,
255
256 Cache:-1,
257 0,
258 0,
259 false,
260
261 DIARY_SORTED_PICK_DATE_DAY,
262 ""
263 };
264
265
266
267
268
269
270// Установка/Получение данных
271
272static stock diary_SetPlayerTempContents(playerid, input_contents[], const size = sizeof input_contents)
273{
274 strmid(pTempDiaryInfo[playerid][ptd_contents], input_contents, 0,
275 size, DIARY_MAX_CONTENTS_LENGTH);
276}
277
278static stock diary_GetPlayerTempContents(playerid, output_contents[], const size = sizeof output_contents)
279{
280 strcat((output_contents[0] = EOS, output_contents), pTempDiaryInfo[playerid][ptd_contents],
281 size);
282}
283
284static stock diary_SetPlayerTempCaption(playerid, input_caption[], const size = sizeof input_caption)
285{
286 strmid(pTempDiaryInfo[playerid][ptd_caption], input_caption, 0,
287 size, DIARY_MAX_CONTENTS_LENGTH);
288}
289
290static stock diary_GetPlayerTempCaption(playerid, output_caption[], const size = sizeof output_caption)
291{
292 strcat((output_caption[0] = EOS, output_caption), pTempDiaryInfo[playerid][ptd_caption],
293 size);
294}
295
296static stock diary_SetPlayerTempDateCacheId(playerid, Cache:cacheid)
297{
298 pTempDiaryInfo[playerid][ptd_dateCacheId] = cacheid;
299}
300
301static stock Cache:diary_GetPlayerTempDateCacheId(playerid)
302{
303 return pTempDiaryInfo[playerid][ptd_dateCacheId];
304}
305
306static stock diary_SetPlayerTempListCacheId(playerid, Cache:cacheid)
307{
308 pTempDiaryInfo[playerid][ptd_ListCacheId] = cacheid;
309}
310
311static stock Cache:diary_GetPlayerTempListCacheId(playerid)
312{
313 return pTempDiaryInfo[playerid][ptd_ListCacheId];
314}
315
316static stock diary_SetPlayerTempListPage(playerid, page)
317{
318 pTempDiaryInfo[playerid][ptd_listPage] = page;
319}
320
321static stock diary_GetPlayerTempListPage(playerid)
322{
323 return pTempDiaryInfo[playerid][ptd_listPage];
324}
325
326static stock diary_SetPlayerTempListIDX(playerid, idx)
327{
328 pTempDiaryInfo[playerid][ptd_listIDX] = idx;
329}
330
331static stock diary_GetPlayerTempListIDX(playerid)
332{
333 return pTempDiaryInfo[playerid][ptd_listIDX];
334}
335
336static stock bool:diary_IsPlayerTempListEdit(playerid)
337{
338 return pTempDiaryInfo[playerid][ptd_listEdit];
339}
340
341static stock diary_SetPlayerTempListEdit(playerid, bool:edit)
342{
343 pTempDiaryInfo[playerid][ptd_listEdit] = edit;
344}
345
346static stock diary_SetPlayerTempSortedPickD(playerid, input_date[], const size = sizeof input_date)
347{
348 strmid(pTempDiaryInfo[playerid][ptd_sortedPickDate], input_date, 0,
349 size, MAX_SORTED_PICK_DATE_LEN);
350}
351
352static stock diary_GetPlayerTempSortedPickD(playerid, output_date[], const size = sizeof output_date)
353{
354 strcat((output_date[0] = EOS, output_date), pTempDiaryInfo[playerid][ptd_sortedPickDate],
355 size);
356}
357
358static stock diary_SetPlayerTempSortedPickT(playerid, sorted_pick)
359{
360 if (!(0 <= sorted_pick <= MAX_SORTED_PICK_DATE - 1))
361 {
362 return 0;
363 }
364
365 pTempDiaryInfo[playerid][ptd_sortedPickType] = sorted_pick;
366
367 return 1;
368}
369
370static stock diary_GetPlayerTempSortedPickT(playerid)
371{
372 return pTempDiaryInfo[playerid][ptd_sortedPickType];
373}
374
375static stock diary_GetPlayerTempDiaryId(playerid)
376{
377 return pTempDiaryInfo[playerid][ptd_diaryTableId];
378}
379
380static stock diary_SetPlayerTempDiaryId(playerid, diaryid)
381{
382 pTempDiaryInfo[playerid][ptd_diaryTableId] = diaryid;
383}
384
385static stock diary_SetPlayerTempOwnerName(playerid, input_name[], const size = sizeof input_name)
386{
387 strmid(pTempDiaryInfo[playerid][ptd_diaryOwnerName], input_name, 0, MAX_PLAYER_NAME,
388 size);
389}
390
391static stock diary_GetPlayerTempOwnerName(playerid, output_name[], const size = sizeof output_name)
392{
393 strcat((output_name[0] = EOS, output_name), pTempDiaryInfo[playerid][ptd_diaryOwnerName],
394 size);
395}
396
397static stock diary_SetPlayerTempSortedType(playerid, type)
398{
399 if (!(0 <= type <= MAX_DIARY_SORTED_TYPE - 1))
400 {
401 return 0;
402 }
403
404 pTempDiaryInfo[playerid][ptd_sortedType] = type;
405
406 return 1;
407}
408
409static stock diary_GetPlayerTempSortedType(playerid)
410{
411 return pTempDiaryInfo[playerid][ptd_sortedType];
412}
413
414static stock diary_GetSortedTypeName(type, output_name[], const size = sizeof output_name)
415{
416 if (!(0 <= type <= MAX_DIARY_SORTED_TYPE - 1))
417 {
418 return 0;
419 }
420
421 strcat((output_name[0] = EOS, output_name), DIARTY_SORTED_TYPE[type][ds_name], size);
422
423 return 1;
424}
425
426static stock diary_GetSortedTypeOperator(type, output_name[], const size = sizeof output_name)
427{
428 if (!(0 <= type <= MAX_DIARY_SORTED_TYPE - 1))
429 {
430 return 0;
431 }
432
433 strcat((output_name[0] = EOS, output_name), DIARTY_SORTED_TYPE[type][ds_operator], size);
434
435 return 1;
436}
437
438
439static stock diary_GetColorTagStart(type, output_color_tag[], const size = sizeof output_color_tag)
440{
441 if (!(0 <= type <= MAX_COLOR_TAG_TYPE - 1))
442 {
443 return 0;
444 }
445
446 strcat((output_color_tag[0] = EOS, output_color_tag), ColorTagParams[type][ct_start], size);
447
448 return 1;
449}
450
451static stock diary_GetColorTagEnd(type, output_color_tag[], const size = sizeof output_color_tag)
452{
453 if (!(0 <= type <= MAX_COLOR_TAG_TYPE - 1))
454 {
455 return 0;
456 }
457
458 strcat((output_color_tag[0] = EOS, output_color_tag), ColorTagParams[type][ct_end], size);
459
460 return 1;
461}
462
463static stock diary_GetColorTagHEX(type)
464{
465 if (!(0 <= type <= MAX_COLOR_TAG_TYPE - 1))
466 {
467 return 0;
468 }
469
470 return ColorTagParams[type][ct_hex];
471}
472
473static stock diary_GetColorTagStartLen(type)
474{
475 if (!(0 <= type <= MAX_COLOR_TAG_TYPE - 1))
476 {
477 return 0;
478 }
479
480 return ColorTagParams[type][ct_startLen];
481}
482
483static stock diary_GetColorTagEndLen(type)
484{
485 if (!(0 <= type <= MAX_COLOR_TAG_TYPE - 1))
486 {
487 return 0;
488 }
489
490 return ColorTagParams[type][ct_endLen];
491}
492
493stock diary_GetColorTagName(type, output_color_tag[], const size = sizeof output_color_tag)
494{
495 if (!(0 <= type <= MAX_COLOR_TAG_TYPE - 1))
496 {
497 return 0;
498 }
499
500 strcat((output_color_tag[0] = EOS, output_color_tag), ColorTagParams[type][ct_name], size);
501
502 return 1;
503}
504
505stock diary_SetPlayerDiaryId(playerid, diaryid)
506{
507 pDiaryInfo[playerid][pd_diaryTableId] = diaryid;
508}
509
510stock diary_GetPlayerDiaryId(playerid)
511{
512 return pDiaryInfo[playerid][pd_diaryTableId];
513}
514
515
516
517
518stock diary_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
519{
520 switch (dialogid)
521 {
522 case DIARY_DIALOG_MENU:
523 {
524 if (response)
525 {
526 switch (listitem)
527 {
528 case 0:
529 {
530 diary_ShowPlayerNotationManagm(playerid);
531 }
532 case 1:
533 {
534 diary_ShowPlayerAcceptToDelete(playerid);
535 }
536 }
537 }
538 else
539 {
540 pTempDiaryInfo[playerid] = NULL_pTempDiaryInfo;
541
542 diary_DateClearListInfo(playerid);
543 diary_ListClearListInfo(playerid);
544 }
545
546 return 1;
547 }
548 case DIARY_DIALOG_NOTATION_MANAGMEN:
549 {
550 if (response)
551 {
552 switch (listitem)
553 {
554 case 0:
555 {
556 diary_ShowPlayerPickDateMenu(playerid);
557 }
558 case 1:
559 {
560 diary_ShowPlayerNotationList(playerid);
561 }
562 case 2:
563 {
564 new
565 sorted_type = diary_GetPlayerTempSortedType(playerid);
566
567 if (++sorted_type >= MAX_DIARY_SORTED_TYPE)
568 {
569 sorted_type = 0;
570 }
571
572 diary_SetPlayerTempSortedType(playerid, sorted_type);
573 diary_ShowPlayerNotationManagm(playerid);
574 }
575 }
576 }
577 else
578 {
579 diary_DateClearListInfo(playerid);
580
581 new
582 diaryid = diary_GetPlayerTempDiaryId(playerid);
583
584 diary_ShowPlayerDiary(playerid, diaryid);
585 }
586
587 return 1;
588 }
589 case DIARY_DIALOG_PICK_DATE:
590 {
591 if (response)
592 {
593 new
594 column,
595 date[MAX_SORTED_PICK_DATE_LEN + 1],
596 date_column[7 - 2 + 4];
597
598 if (listitem == 0)
599 {
600 new
601 sorted_pick_type = diary_GetPlayerTempSortedPickT(playerid);
602
603 if (++sorted_pick_type >= MAX_SORTED_PICK_DATE)
604 {
605 sorted_pick_type = 0;
606 }
607
608 diary_SetPlayerTempSortedPickT(playerid, sorted_pick_type);
609
610 @MySQL__PickDate(playerid);
611 }
612 else if (strfind(inputtext, "»» Далее") != -1)
613 {
614 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
615 cache_set_active(Cache:diary_GetPlayerTempDateCacheId(playerid),
616 DIARY_MYSQL_CONNECTION_ID);
617
618 column = MAX_SORTED_PICK_DATE_IN_ROW - 1,
619
620 format(date_column, sizeof date_column, "date_%d", column);
621 cache_get_field_content(0, date_column, date);
622
623 diary_DateClearListInfo(playerid);
624
625 diary_ShowPlayerPickDateMenu(playerid, true, date);
626 }
627 else if (strfind(inputtext, "«« Назад") != -1)
628 {
629 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
630 cache_set_active(Cache:diary_GetPlayerTempDateCacheId(playerid),
631 DIARY_MYSQL_CONNECTION_ID);
632
633 column = 0;
634
635 format(date_column, sizeof date_column, "date_%d", column);
636 cache_get_field_content(0, date_column, date);
637
638 diary_DateClearListInfo(playerid);
639
640 diary_ShowPlayerPickDateMenu(playerid, false, date);
641 }
642 else
643 {
644 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
645 cache_set_active(Cache:diary_GetPlayerTempDateCacheId(playerid),
646 DIARY_MYSQL_CONNECTION_ID);
647
648 column = listitem - 1,
649
650 format(date_column, sizeof date_column, "date_%d", column);
651 cache_get_field_content(0, date_column, date);
652
653 if (!diary_IsPlayerTempListEdit(playerid))
654 {
655 diary_SetPlayerTempSortedPickD(playerid, date);
656 diary_ShowPlayerCreateCaption(playerid);
657 }
658 else
659 {
660 diary_SetPlayerTempListEdit(playerid, false);
661
662 diary_DateClearListInfo(playerid);
663
664 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
665 cache_set_active(Cache:diary_GetPlayerTempListCacheId(playerid),
666 DIARY_MYSQL_CONNECTION_ID);
667
668 new
669 idx = diary_GetPlayerTempListIDX(playerid);
670 diary_UpdateNotationColumnVar(idx, "date", date);
671
672 new
673 page = diary_GetPlayerTempListPage(playerid);
674
675 diary_ListClearListInfo(playerid);
676 diary_SetPlayerTempListPage(playerid, page);
677
678 diary_ShowPlayerNotationList(playerid);
679 }
680 }
681 }
682 else
683 {
684 if (!diary_IsPlayerTempListEdit(playerid))
685 {
686 diary_SetPlayerTempSortedPickT(playerid, DIARY_SORTED_PICK_DATE_DAY);
687 diary_ShowPlayerNotationManagm(playerid);
688 }
689 else
690 {
691 diary_SetPlayerTempListEdit(playerid, false);
692 diary_DateClearListInfo(playerid);
693
694 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
695 cache_set_active(Cache:diary_GetPlayerTempListCacheId(playerid),
696 DIARY_MYSQL_CONNECTION_ID);
697
698 new
699 idx = diary_GetPlayerTempListIDX(playerid);
700 diary_ShowPlayerNotationEditMe(playerid, idx);
701 }
702 }
703
704 return 1;
705 }
706 case DIARY_DIALOG_CREATE_CAPTION:
707 {
708 if (response)
709 {
710 new
711 len = strlen(inputtext);
712
713 if (!(DIARY_MIN_CAPTION_LENGTH <= len <= DIARY_MAX_CAPTION_LENGTH))
714 {
715 return diary_ShowPlayerCreateCaption(playerid);
716 }
717
718 diary_SetPlayerTempCaption(playerid, inputtext, len);
719 diary_ShowPlayerCreateContents(playerid);
720 }
721 else
722 {
723 @MySQL__PickDate(playerid);
724 }
725
726 return 1;
727 }
728 case DIARY_DIALOG_CREATE_CONTENTS:
729 {
730 if (response)
731 {
732 new
733 len = strlen(inputtext);
734
735 if (!(DIARY_MIN_CONTENTS_LENGTH <= len <= DIARY_MAX_CONTENTS_LENGTH))
736 {
737 return diary_ShowPlayerCreateContents(playerid);
738 }
739
740 diary_SetPlayerTempContents(playerid, inputtext, len);
741 diary_ShowPlayerCreatedContents(playerid);
742 }
743 else
744 {
745 diary_ShowPlayerCreateCaption(playerid);
746 }
747
748 return 1;
749 }
750 case DIARY_DIALOG_CREATED_CONTENTS:
751 {
752 diary_DateClearListInfo(playerid);
753
754 new
755 diaryid = diary_GetPlayerTempDiaryId(playerid);
756
757 diary_ShowPlayerDiary(playerid, diaryid);
758
759 return 1;
760 }
761 case DIARY_DIALOG_NOTATION_LIST:
762 {
763 if (response)
764 {
765 if (strfind(inputtext, "»» Далее") != -1)
766 {
767 diary_SetPlayerTempListPage(playerid, diary_GetPlayerTempListPage(playerid) + 1);
768 @MySQL__NotationList(playerid);
769 }
770 else if (strfind(inputtext, "«« Назад") != -1)
771 {
772 diary_SetPlayerTempListPage(playerid, diary_GetPlayerTempListPage(playerid) - 1);
773 @MySQL__NotationList(playerid);
774 }
775 else
776 {
777 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
778 cache_set_active(Cache:diary_GetPlayerTempListCacheId(playerid),
779 DIARY_MYSQL_CONNECTION_ID);
780
781 new
782 page = diary_GetPlayerTempListPage(playerid),
783 idx = MAX_LIST_COUNT_IN_ROW*page+listitem;
784
785 diary_ShowPlayerNotationEditMe(playerid, idx);
786 }
787 }
788 else
789 {
790 diary_ListClearListInfo(playerid);
791 diary_ShowPlayerNotationManagm(playerid);
792 }
793
794 return 1;
795 }
796 case DIARY_DIALOG_NOTATION_EDIT_M:
797 {
798 if (response)
799 {
800 new
801 idx = diary_GetPlayerTempListIDX(playerid);
802
803 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
804 cache_set_active(Cache:diary_GetPlayerTempListCacheId(playerid),
805 DIARY_MYSQL_CONNECTION_ID);
806
807 switch (listitem)
808 {
809 case 0:
810 {
811 diary_ShowPlayerNotationView(playerid, idx);
812 }
813 case 1:
814 {
815 diary_ShowPlayerNotationEditCa(playerid, idx);
816 }
817 case 2:
818 {
819 diary_ShowPlayerNotationEditCo(playerid, idx);
820 }
821 case 3:
822 {
823 diary_SetPlayerTempListEdit(playerid, true);
824 diary_ShowPlayerPickDateMenu(playerid);
825 }
826 case 4:
827 {
828 diary_ShowPlayerAcToDeleteNote(playerid, idx);
829 }
830 }
831 }
832 else
833 {
834 @MySQL__NotationList(playerid);
835 }
836
837 return 1;
838 }
839 case DIARY_DIALOG_NOTATION_LIST_V:
840 {
841 new
842 idx = diary_GetPlayerTempListIDX(playerid);
843
844 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
845 cache_set_active(Cache:diary_GetPlayerTempListCacheId(playerid),
846 DIARY_MYSQL_CONNECTION_ID);
847
848 return diary_ShowPlayerNotationEditMe(playerid, idx);
849 }
850 case DIARY_DIALOG_NOTATION_EDIT_CAP:
851 {
852 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
853 cache_set_active(Cache:diary_GetPlayerTempListCacheId(playerid),
854 DIARY_MYSQL_CONNECTION_ID);
855
856 new
857 idx = diary_GetPlayerTempListIDX(playerid);
858
859 if (response)
860 {
861 new
862 length = strlen(inputtext);
863
864 if (!(DIARY_MIN_CAPTION_LENGTH <= length <= DIARY_MAX_CAPTION_LENGTH - 1))
865 {
866 return diary_ShowPlayerNotationEditCa(playerid, idx);
867 }
868
869 diary_UpdateNotationColumnVar(idx, "caption", inputtext);
870
871 new
872 page = diary_GetPlayerTempListPage(playerid);
873
874 diary_ListClearListInfo(playerid);
875 diary_SetPlayerTempListPage(playerid, page);
876
877 diary_ShowPlayerNotationList(playerid);
878 }
879 else
880 {
881 diary_ShowPlayerNotationEditMe(playerid, idx);
882 }
883
884 return 1;
885 }
886 case DIARY_DIALOG_NOTATION_EDIT_CON:
887 {
888 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
889 cache_set_active(Cache:diary_GetPlayerTempListCacheId(playerid),
890 DIARY_MYSQL_CONNECTION_ID);
891
892 new
893 idx = diary_GetPlayerTempListIDX(playerid);
894
895 if (response)
896 {
897 new
898 length = strlen(inputtext);
899
900 if (!(DIARY_MIN_CONTENTS_LENGTH <= length <= DIARY_MAX_CONTENTS_LENGTH - 1))
901 {
902 return diary_ShowPlayerNotationEditCo(playerid, idx);
903 }
904
905 diary_UpdateNotationColumnVar(idx, "contents", inputtext);
906
907 new
908 page = diary_GetPlayerTempListPage(playerid);
909
910 diary_ListClearListInfo(playerid);
911 diary_SetPlayerTempListPage(playerid, page);
912
913 diary_ShowPlayerNotationList(playerid);
914 }
915 else
916 {
917 diary_ShowPlayerNotationEditMe(playerid, idx);
918 }
919
920 return 1;
921 }
922 case DIARY_DIALOG_ACCEPT_TO_DELETE_D:
923 {
924 new
925 diaryid = diary_GetPlayerTempDiaryId(playerid);
926
927 if (response)
928 {
929
930 diary_Delete(diaryid);
931
932 GameTextForPlayer(playerid, !"~r~Diary thrown out", 3000, 3);
933
934 pTempDiaryInfo[playerid] = NULL_pTempDiaryInfo;
935
936 diary_SetPlayerDiaryId(playerid, DIARY_INVALID_ID);
937 }
938 else
939 {
940 diary_ShowPlayerDiary(playerid, diaryid);
941 }
942
943 return 1;
944 }
945 case DIARY_DIALOG_ACCEPT_TO_DELETE_N:
946 {
947 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
948 cache_set_active(Cache:diary_GetPlayerTempListCacheId(playerid),
949 DIARY_MYSQL_CONNECTION_ID);
950
951 new
952 idx = diary_GetPlayerTempListIDX(playerid);
953
954 if (response)
955 {
956 new
957 list_id = cache_get_field_content_int(idx, "id", DIARY_MYSQL_CONNECTION_ID);
958
959 diary_DeleteNotation(list_id);
960
961 new
962 page = diary_GetPlayerTempListPage(playerid);
963
964 diary_ListClearListInfo(playerid);
965 diary_SetPlayerTempListPage(playerid, page);
966
967 diary_ShowPlayerNotationList(playerid);
968 }
969 else
970 {
971 diary_ShowPlayerNotationEditMe(playerid, idx);
972 }
973
974 return 1;
975 }
976 }
977}
978
979
980stock diary_OnPlayerDisconnect(playerid)
981{
982 diary_ListClearListInfo(playerid);
983 diary_DateClearListInfo(playerid);
984}
985
986stock diary_OnGameModeInit()
987{
988 for (new i = 0; i < MAX_COLOR_TAG_TYPE; ++i)
989 {
990 ColorTagParams[i][ct_startLen] = strlen(ColorTagParams[i][ct_start]);
991 ColorTagParams[i][ct_endLen] = strlen(ColorTagParams[i][ct_end]);
992 }
993}
994
995stock diary_AccountLoad(playerid)
996{
997 pTempDiaryInfo[playerid] = NULL_pTempDiaryInfo;
998
999 pDiaryInfo[playerid][pd_playerTableId] = cache_get_field_content_int(0, ""DIARY_MYSQL_PLAYER_ID_TABLE_NAM"");
1000
1001 static const
1002 query_fmt[] = "\
1003 SELECT \
1004 id \
1005 FROM \
1006 "DIARY_MYSQL_TABLE_NAME" \
1007 WHERE \
1008 owner_id=%d";
1009 new
1010 query_string[sizeof(query_fmt) + (-2 + 11)];
1011
1012 format(query_string, sizeof query_string, query_fmt, pDiaryInfo[playerid][pd_playerTableId]);
1013 mysql_tquery(DIARY_MYSQL_CONNECTION_ID, query_string, !"@MySQL__CheckPlayerDiaryId", !"d", playerid);
1014
1015 return 1;
1016}
1017
1018@MySQL__CheckPlayerDiaryId(playerid);
1019@MySQL__CheckPlayerDiaryId(playerid)
1020{
1021 if (cache_num_rows())
1022 {
1023 new
1024 diaryid = cache_get_field_content_int(0, "id");
1025
1026 diary_SetPlayerDiaryId(playerid, diaryid);
1027 }
1028
1029 return 1;
1030}
1031
1032stock diary_Load()
1033{
1034 new
1035 Cache:cacheId;
1036
1037 cacheId = mysql_query(DIARY_MYSQL_CONNECTION_ID, !"SHOW TABLES LIKE '"DIARY_MYSQL_TABLE_NAME"'",
1038 true);
1039
1040 if (!cache_num_rows())
1041 {
1042 mysql_query(DIARY_MYSQL_CONNECTION_ID, "\
1043 CREATE TABLE IF NOT EXISTS `"DIARY_MYSQL_TABLE_NAME"` ( \
1044 `id` int(11) NOT NULL AUTO_INCREMENT, \
1045 `owner_id` int(11) NOT NULL, \
1046 PRIMARY KEY (`id`) \
1047 ) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;", false);
1048
1049 mysql_query(DIARY_MYSQL_CONNECTION_ID, !"\
1050 CREATE UNIQUE INDEX \
1051 owner_id \
1052 ON \
1053 "DIARY_MYSQL_TABLE_NAME"(owner_id)", false);
1054
1055 mysql_query(DIARY_MYSQL_CONNECTION_ID, !"\
1056 ALTER TABLE \
1057 `"DIARY_MYSQL_TABLE_NAME"`\
1058 ADD CONSTRAINT \
1059 `"DIARY_MYSQL_TABLE_NAME"_"DIARY_MYSQL_PLAYER_TABLE_NAME"_fk_1` \
1060 FOREIGN KEY \
1061 (`owner_id`) \
1062 REFERENCES \
1063 `"DIARY_MYSQL_PLAYER_TABLE_NAME"` (`"DIARY_MYSQL_PLAYER_ID_TABLE_NAM"`) \
1064 ON DELETE CASCADE ON UPDATE CASCADE", false);
1065 }
1066
1067 cache_delete(cacheId);
1068
1069 cacheId = mysql_query(DIARY_MYSQL_CONNECTION_ID, !"SHOW TABLES LIKE '"DIARY_MYSQL_NOTATION_TABLE_NAME"'",
1070 true);
1071
1072 if (!cache_num_rows())
1073 {
1074 /*static const
1075 query_fmt[] = "\
1076 CREATE TABLE IF NOT EXISTS `"DIARY_MYSQL_NOTATION_TABLE_NAME"` ( \
1077 `id` int(11) NOT NULL AUTO_INCREMENT, \
1078 `diary_id` int(11) NOT NULL, \
1079 `caption` varchar(%d) NOT NULL, \
1080 `contents` varchar(%d) CHARACTER SET cp1250 NOT NULL, \
1081 `date` date NOT NULL, \
1082 PRIMARY KEY (`id`) \
1083 ) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;";*/
1084
1085 new
1086 query_string[337 + (-2 + 11) * 2 + 1];
1087
1088 mysql_format(DIARY_MYSQL_CONNECTION_ID, query_string, sizeof query_string, "\
1089 CREATE TABLE IF NOT EXISTS `"DIARY_MYSQL_NOTATION_TABLE_NAME"` ( \
1090 `id` int(11) NOT NULL AUTO_INCREMENT, \
1091 `diary_id` int(11) NOT NULL, \
1092 `caption` varchar(%d) NOT NULL, \
1093 `contents` varchar(%d) NOT NULL, \
1094 `date` date NOT NULL, \
1095 PRIMARY KEY (`id`) \
1096 ) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;",
1097 DIARY_MAX_CAPTION_LENGTH, DIARY_MAX_CONTENTS_LENGTH);
1098 mysql_query(DIARY_MYSQL_CONNECTION_ID, query_string, false);
1099
1100 mysql_query(DIARY_MYSQL_CONNECTION_ID, !"\
1101 CREATE INDEX \
1102 diary_id \
1103 ON \
1104 "DIARY_MYSQL_NOTATION_TABLE_NAME"(diary_id)", false);
1105
1106 mysql_query(DIARY_MYSQL_CONNECTION_ID, !"\
1107 CREATE INDEX \
1108 date \
1109 ON \
1110 "DIARY_MYSQL_NOTATION_TABLE_NAME"(date)", false);
1111
1112 mysql_query(DIARY_MYSQL_CONNECTION_ID, !"\
1113 ALTER TABLE \
1114 `"DIARY_MYSQL_NOTATION_TABLE_NAME"`\
1115 ADD CONSTRAINT \
1116 `"DIARY_MYSQL_NOTATION_TABLE_NAME"_"DIARY_MYSQL_TABLE_NAME"_fk_1` \
1117 FOREIGN KEY \
1118 (`diary_id`) \
1119 REFERENCES \
1120 `"DIARY_MYSQL_TABLE_NAME"` (`id`) \
1121 ON DELETE CASCADE ON UPDATE CASCADE", false);
1122 }
1123
1124 cache_delete(cacheId);
1125}
1126
1127stock diary_ShowPlayerDiary(playerid, diaryid)
1128{
1129 if (diaryid == DIARY_INVALID_ID)
1130 {
1131 return 0;
1132 }
1133
1134 static
1135 query_fmt[] = "\
1136 SELECT \
1137 IFNULL((SELECT a."DIARY_MYSQL_PLAYER_NAME_TABLE_N" \
1138 FROM "DIARY_MYSQL_PLAYER_TABLE_NAME" AS a \
1139 WHERE a."DIARY_MYSQL_PLAYER_ID_TABLE_NAM"=d.owner_id), 'Неизвестно') AS owner_name, \
1140 (SELECT COUNT( * ) \
1141 FROM "DIARY_MYSQL_NOTATION_TABLE_NAME" AS dn \
1142 WHERE dn.diary_id=d.id) AS total_notation_count \
1143 FROM \
1144 "DIARY_MYSQL_TABLE_NAME" AS d \
1145 WHERE \
1146 d.id=%d";
1147
1148 new
1149 query_string[sizeof(query_fmt) + (-2 + 11) + 1];
1150
1151 mysql_format(DIARY_MYSQL_CONNECTION_ID, query_string, sizeof query_string,
1152 query_fmt, diaryid);
1153 mysql_tquery(DIARY_MYSQL_CONNECTION_ID, query_string, !"@MySQL__ShowPlayerDiaryInfo",
1154 !"dd", playerid, diaryid);
1155
1156 return 1;
1157}
1158
1159@MySQL__ShowPlayerDiaryInfo(playerid, diaryid);
1160@MySQL__ShowPlayerDiaryInfo(playerid, diaryid)
1161{
1162 if (!cache_num_rows())
1163 {
1164 return 0;
1165 }
1166
1167 new
1168 notation_count,
1169 owner_name[MAX_PLAYER_NAME + 1];
1170
1171 cache_get_field_content(0, "owner_name", owner_name, DIARY_MYSQL_CONNECTION_ID);
1172 notation_count = cache_get_field_content_int(0, "total_notation_count", DIARY_MYSQL_CONNECTION_ID);
1173
1174 diary_SetPlayerTempOwnerName(playerid, owner_name);
1175 diary_SetPlayerTempDiaryId(playerid, diaryid);
1176
1177 static const
1178 caption_fmt[] = ""cDIARY_CAPTION"Дневник {FFFFFF}%s"cDIARY_CAPTION", \
1179 {FFFFFF}%d "cDIARY_CAPTION"шт. записей";
1180
1181 new
1182 caption_string[sizeof(caption_fmt) + (-2 + MAX_PLAYER_NAME) + (-2 + 11) + 1];
1183
1184 format(caption_string, sizeof caption_string, caption_fmt, owner_name, notation_count);
1185
1186 return ShowPlayerDialog(
1187 playerid,
1188 DIARY_DIALOG_MENU,
1189 DIALOG_STYLE_LIST,
1190 caption_string,
1191 !"Управлеине записясми\nВыкинуть дневник",
1192 !"Далее", !"Выход"
1193 );
1194}
1195
1196static stock diary_ShowPlayerNotationManagm(playerid)
1197{
1198 new
1199 owner_name[MAX_PLAYER_NAME + 1],
1200 caption[sizeof(owner_name) + 7 + 8*2 + 1] = ""cDIARY_CAPTION"Дневник {FFFFFF}";
1201
1202 diary_GetPlayerTempOwnerName(playerid, owner_name);
1203 strcat(caption, owner_name);
1204
1205 new
1206 sorted_type,
1207 sorted_name[MAX_DIARY_SORTED_TYPE_NAME_LEN + 1],
1208 information[53 + MAX_DIARY_SORTED_TYPE_NAME_LEN + 8] = ">> Создать запись\nПросмотр записей\n\
1209 Сортировать по: "cDIARY_SORTED_TYPE"";
1210
1211 sorted_type = diary_GetPlayerTempSortedType(playerid);
1212 diary_GetSortedTypeName(sorted_type, sorted_name);
1213
1214 strcat(information, sorted_name);
1215
1216 return ShowPlayerDialog(
1217 playerid,
1218 DIARY_DIALOG_NOTATION_MANAGMEN,
1219 DIALOG_STYLE_LIST,
1220 caption,
1221 information,
1222 !"Далее", !"Назад"
1223 );
1224}
1225
1226stock diary_ShowPlayerPickDateMenu(playerid, bool:sort_forward = true,
1227 start_date[] = "CURDATE()")
1228{
1229 const
1230 MAX_QUERY_FMT_LENGTH = 42;
1231
1232 static const
1233 sort_direction_name[][] =
1234 {
1235 "SUB",
1236 "ADD"
1237 },
1238 query_fmt[][MAX_QUERY_FMT_LENGTH + 1] =
1239 {
1240 "DATE_%s(\"%s\", INTERVAL %d %s) AS date_%d",
1241 "DATE_%s(%s, INTERVAL %d %s) AS date_%d"
1242 };
1243
1244
1245 static
1246 bool:is_current,
1247 _query_string[MAX_QUERY_FMT_LENGTH + 1 + (-2 + sizeof(sort_direction_name[])) + (-2 + MAX_SORTED_PICK_DATE_LEN) + ((-2 + 4) * 2)
1248 + (-2 + MAX_SORTED_PICK_DATE_M_NAME)],
1249 query_string[(sizeof(_query_string) * MAX_SORTED_PICK_DATE_IN_ROW) + 6 + 1];
1250
1251 if (strcmp(start_date, "CURDATE()") == 0)
1252 {
1253 is_current = true;
1254 }
1255 else
1256 {
1257 is_current = false;
1258 }
1259
1260
1261 query_string = "SELECT ";
1262
1263 new
1264 sorted_pick_type = diary_GetPlayerTempSortedPickT(playerid);
1265
1266 for (new i = 0; i < MAX_SORTED_PICK_DATE_IN_ROW; ++i)
1267 {
1268 format(_query_string, sizeof _query_string, query_fmt[_:is_current],
1269 sort_direction_name[_:sort_forward], start_date, i + 1,
1270 DiarySortedPickParams[sorted_pick_type][dsp_mysqlType], i);
1271
1272 strcat(query_string, _query_string);
1273
1274 if (i != MAX_SORTED_PICK_DATE_IN_ROW - 1)
1275 {
1276 strcat(query_string, ",");
1277 }
1278 }
1279
1280 mysql_tquery(DIARY_MYSQL_CONNECTION_ID, query_string, !"@MySQL__PickDate", !"d", playerid);
1281}
1282
1283@MySQL__PickDate(playerid);
1284@MySQL__PickDate(playerid)
1285{
1286
1287 if (diary_GetPlayerTempDateCacheId(playerid) == Cache:-1)
1288 {
1289 diary_SetPlayerTempDateCacheId(playerid, cache_save());
1290 }
1291 else
1292 {
1293 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
1294 cache_set_active(diary_GetPlayerTempDateCacheId(playerid),
1295 DIARY_MYSQL_CONNECTION_ID);
1296 }
1297
1298 if (cache_num_rows())
1299 {
1300 static const
1301 date_column_fmt[] = "date_%d";
1302
1303 goto g_skip_array;
1304
1305 new
1306 date[MAX_SORTED_PICK_DATE_LEN + 1],
1307 date_column[sizeof(date_column_fmt)],
1308 sorted_pick_type;
1309
1310 g_skip_array:
1311
1312 sorted_pick_type = diary_GetPlayerTempSortedPickT(playerid);
1313
1314 static
1315 info_str[30 + 8 + ((MAX_SORTED_PICK_DATE_LEN + 2) * MAX_SORTED_PICK_DATE_IN_ROW) + (8 + 8) * 2];
1316
1317 format(info_str, sizeof info_str, "Сортировка даты по: "cDIARY_SORTED_PICK_TYPE"%s{FFFFFF}\n",
1318 DiarySortedPickParams[sorted_pick_type][dsp_dateName]);
1319
1320 for (new i = 0; i < MAX_SORTED_PICK_DATE_IN_ROW; ++i)
1321 {
1322 format(date_column, sizeof date_column, date_column_fmt, i);
1323 cache_get_field_content(0, date_column, date);
1324
1325 strcat(info_str, date);
1326 strcat(info_str, "\n");
1327 }
1328
1329 strcat(info_str, ""cDIARY_SORTED_PICK_NEXT"»» Далее\n\
1330 "cDIARY_SORTED_PICK_BACK"«« Назад");
1331
1332 ShowPlayerDialog(
1333 playerid,
1334 DIARY_DIALOG_PICK_DATE,
1335 DIALOG_STYLE_LIST,
1336 !""cDIARY_CAPTION"Выберите дату записи",
1337 info_str,
1338 !"Выбрать", !"Назад"
1339 );
1340 }
1341
1342 return 1;
1343}
1344
1345
1346stock diary_ShowPlayerCreateCaption(playerid)
1347{
1348 static const
1349 caption_fmt[] = "\n\
1350 {FFFFFF}Укажите название записи в поле ниже (От %d до %d символов)\n\n\
1351 "cDIARY_EXAMPLE_DIALOG"Например: Встреча выпускников!";
1352
1353 new
1354 caption_str[sizeof(caption_fmt) + (-2 + 3)*2];
1355
1356 format(caption_str, sizeof caption_str, caption_fmt, DIARY_MIN_CAPTION_LENGTH,
1357 DIARY_MAX_CAPTION_LENGTH);
1358
1359 return ShowPlayerDialog(
1360 playerid,
1361 DIARY_DIALOG_CREATE_CAPTION,
1362 DIALOG_STYLE_INPUT,
1363 !""cDIARY_CAPTION"Создание названия записи",
1364 caption_str,
1365 !"Далее", !"Назад"
1366 );
1367
1368}
1369
1370stock diary_ShowPlayerCreateContents(playerid)
1371{
1372 static const
1373 contents_fmt_1[] = "\n\
1374 {FFFFFF}Укажите содержимое записи в поле ниже (От %d до %d символов)\n\
1375 Так-же вы можете воспользоваться BB-кодами: \n",
1376 contents_fmt_2[] = "\n\
1377 %s %s - {%06x}%s\n{FFFFFF}",
1378 contents_fmt_3[] = "\n\n\
1379 "cDIARY_EXAMPLE_DIALOG"Например: Встречаемся в <red>7:30</red> у крыльца нашей \
1380 <blue>школы</blue>";
1381
1382 static
1383 color_tag_start[MAX_COLOR_TAG_START_LENGTH + 1],
1384 color_tag_end[MAX_COLOR_TAG_END_LENGTH + 1],
1385 color_tag_hex,
1386 color_tag_name[MAX_COLOR_TAG_NAME_LENGTH + 1],
1387 contents_str_2[(sizeof(contents_fmt_2) + (-2 + MAX_COLOR_TAG_START_LENGTH)
1388 + (-2 + MAX_COLOR_TAG_END_LENGTH) + (-2 + MAX_COLOR_TAG_HEX_LENGTH)
1389 + (-2 + MAX_COLOR_TAG_NAME_LENGTH))*MAX_COLOR_TAG_TYPE],
1390 contents_str[sizeof(contents_fmt_1) + (-2 + 4)*2 + sizeof(contents_fmt_3)
1391 + sizeof(contents_str_2)];
1392
1393 format(contents_str, sizeof contents_str, contents_fmt_1,
1394 DIARY_MIN_CONTENTS_LENGTH, DIARY_MAX_CONTENTS_LENGTH);
1395
1396 for (new i = 0; i < MAX_COLOR_TAG_TYPE; ++i)
1397 {
1398 diary_GetColorTagStart(i, color_tag_start);
1399 diary_GetColorTagEnd(i, color_tag_end);
1400 color_tag_hex = diary_GetColorTagHEX(i);
1401 diary_GetColorTagName(i, color_tag_name);
1402
1403 format(contents_str_2, sizeof contents_str_2, contents_fmt_2,
1404 color_tag_start, color_tag_end, color_tag_hex >>> 8,
1405 color_tag_name);
1406 strcat(contents_str, contents_str_2);
1407 }
1408
1409 strcat(contents_str, contents_fmt_3);
1410
1411 return ShowPlayerDialog(
1412 playerid,
1413 DIARY_DIALOG_CREATE_CONTENTS,
1414 DIALOG_STYLE_INPUT,
1415 !""cDIARY_CAPTION"Создание содержания записи",
1416 contents_str,
1417 !"Создать", !"Назад"
1418 );
1419}
1420
1421stock diary_ShowPlayerCreatedContents(playerid)
1422{
1423 static
1424 date[MAX_SORTED_PICK_DATE_LEN + 1],
1425 caption[DIARY_MAX_CAPTION_LENGTH + 1],
1426 contents[DIARY_MAX_CONTENTS_LENGTH + 1],
1427 diaryid;
1428
1429 diary_GetPlayerTempCaption(playerid, caption);
1430 diary_GetPlayerTempContents(playerid, contents);
1431 diary_GetPlayerTempSortedPickD(playerid, date);
1432 diaryid = diary_GetPlayerTempDiaryId(playerid);
1433
1434 diary_InstertNotation(diaryid, date, caption, contents);
1435
1436 static
1437 created_str[180 + (-2 + MAX_SORTED_PICK_DATE_LEN) + (-2 + DIARY_MAX_CAPTION_LENGTH)
1438 + (-2 + DIARY_MAX_CONTENTS_LENGTH)];
1439
1440 diary_ConvertTagToColor(contents);
1441
1442 format(created_str, sizeof created_str, "\n\
1443 {FFFFFF}Вы успешно создали новую запись!\n\n\
1444 Дата:\t\t"cDIARY_INFO"%s\n\
1445 {FFFFFF}Название:\t"cDIARY_INFO"%s\n\
1446 {FFFFFF}Содержимое:\n%s\n",
1447 date, caption, contents);
1448
1449 return ShowPlayerDialog(
1450 playerid,
1451 DIARY_DIALOG_CREATED_CONTENTS,
1452 DIALOG_STYLE_MSGBOX,
1453 !" ",
1454 created_str,
1455 !"Окей", ""
1456 );
1457}
1458
1459stock diary_ShowPlayerNotationList(playerid)
1460{
1461 new
1462 diaryid = diary_GetPlayerTempDiaryId(playerid);
1463
1464 if (diaryid == DIARY_INVALID_ID)
1465 {
1466 return 0;
1467 }
1468
1469 if (diary_GetPlayerTempListCacheId(playerid) == Cache:-1)
1470 {
1471 static const
1472 query_fmt[] = "\
1473 SELECT \
1474 id,caption,contents,date \
1475 FROM \
1476 "DIARY_MYSQL_NOTATION_TABLE_NAME" \
1477 WHERE \
1478 diary_id=%d \
1479 ORDER BY \
1480 date %s";
1481
1482 goto g_skip_array;
1483
1484 new
1485 query_str[sizeof(query_fmt) + (- 2 + 11) + (-2 + MAX_DIARY_SORTED_TYPE_OPER_LEN)],
1486 operator_name[MAX_DIARY_SORTED_TYPE_OPER_LEN + 1],
1487 sorted_type;
1488
1489 g_skip_array:
1490
1491 sorted_type = diary_GetPlayerTempSortedType(playerid);
1492 diary_GetSortedTypeOperator(sorted_type, operator_name);
1493
1494 format(query_str, sizeof query_str, query_fmt, diaryid, operator_name);
1495 mysql_tquery(DIARY_MYSQL_CONNECTION_ID, query_str, !"@MySQL__NotationList", !"d",
1496 playerid);
1497 }
1498 else
1499 {
1500 @MySQL__NotationList(playerid);
1501 }
1502
1503 return 1;
1504}
1505
1506@MySQL__NotationList(playerid);
1507@MySQL__NotationList(playerid)
1508{
1509 new
1510 row_count;
1511 if (diary_GetPlayerTempListCacheId(playerid) == Cache:-1)
1512 {
1513 row_count = cache_num_rows();
1514 if (!row_count)
1515 {
1516 SendClientMessage(playerid, -1, !"Список записей пуст");
1517 return diary_ShowPlayerNotationManagm(playerid);
1518 }
1519
1520 diary_SetPlayerTempListCacheId(playerid, cache_save());
1521 }
1522 else
1523 {
1524 cache_set_active(Cache:0, DIARY_MYSQL_CONNECTION_ID);
1525 cache_set_active(diary_GetPlayerTempListCacheId(playerid),
1526 DIARY_MYSQL_CONNECTION_ID);
1527
1528 row_count = cache_num_rows();
1529 }
1530
1531 goto g_skip_array;
1532
1533 new
1534 page ,
1535 i,
1536 tmp,
1537 length,
1538
1539 list_id,
1540 list_caption[DIARY_MAX_CAPTION_LENGTH + 1],
1541 list_contents[MAX_LIST_CONTENTS_LENGTH + 1 + 4],
1542 list_date[MAX_SORTED_PICK_DATE_LEN + 1];
1543
1544 g_skip_array:
1545
1546 page = diary_GetPlayerTempListPage(playerid);
1547 i = (page) * MAX_LIST_COUNT_IN_ROW;
1548 tmp = i;
1549
1550 static
1551 dialog_string[80 + (sizeof(list_caption) + sizeof(list_contents) + sizeof(list_date) + (-2 + 11))
1552 * MAX_LIST_COUNT_IN_ROW];
1553
1554 dialog_string = "{FFFFFF}Номер записи\t{FFFFFF}Название\t{FFFFFF}Содержание\t{FFFFFF}Дата\n";
1555
1556 for (new j; i < row_count; i++, j++)
1557 {
1558 if (j == MAX_LIST_COUNT_IN_ROW)
1559 break;
1560
1561 list_id = cache_get_field_content_int(i, "id", DIARY_MYSQL_CONNECTION_ID);
1562 cache_get_field_content(i, "caption", list_caption, DIARY_MYSQL_CONNECTION_ID);
1563 cache_get_field_content(i, "contents", list_contents, DIARY_MYSQL_CONNECTION_ID);
1564 cache_get_field_content(i, "date", list_date, DIARY_MYSQL_CONNECTION_ID);
1565
1566 //diary_ConvertTagToColor(list_contents);
1567
1568 if ((length = strlen(list_contents)) > MAX_LIST_CONTENTS_LENGTH)
1569 {
1570 strdel(list_contents, MAX_LIST_CONTENTS_LENGTH, length + 1);
1571 strcat(list_contents, "...");
1572 }
1573
1574 format(dialog_string, sizeof dialog_string, "%s{FFFFFF}%d\t%s\t%s{FFFFFF}\t%s\n",
1575 dialog_string, list_id, list_caption, list_contents, list_date);
1576 }
1577
1578 if (row_count > tmp + MAX_LIST_COUNT_IN_ROW)
1579 {
1580 strcat(dialog_string, ""cDIARY_SORTED_PICK_NEXT"»» Далее\n");
1581 if (page > 0)
1582 {
1583 strcat(dialog_string, ""cDIARY_SORTED_PICK_BACK"«« Назад\n");
1584 }
1585 }
1586 else if (page > 0)
1587 {
1588 strcat(dialog_string, ""cDIARY_SORTED_PICK_BACK"«« Назад\n");
1589 }
1590
1591 return ShowPlayerDialog(
1592 playerid,
1593 DIARY_DIALOG_NOTATION_LIST,
1594 DIALOG_STYLE_TABLIST_HEADERS,
1595 !""cDIARY_CAPTION"Список записей",
1596 dialog_string,
1597 !"Выбарть", !"Назад"
1598 );
1599}
1600
1601static stock diary_ShowPlayerNotationEditMe(playerid, idx)
1602{
1603 diary_SetPlayerTempListIDX(playerid, idx);
1604
1605 new
1606 caption[13 + 8 * 2 + 11 + 1],
1607
1608 list_id = cache_get_field_content_int(idx, "id", DIARY_MYSQL_CONNECTION_ID);
1609
1610 format(caption, sizeof caption, ""cDIARY_CAPTION"Меню записи {FFFFFF}№%d",
1611 list_id);
1612
1613 return ShowPlayerDialog(
1614 playerid,
1615 DIARY_DIALOG_NOTATION_EDIT_M,
1616 DIALOG_STYLE_LIST,
1617 caption,
1618 !"\
1619 Просмотр\n\
1620 Редактирование названия\n\
1621 Редактирование содержимого\n\
1622 Редактирование даты\n\
1623 Удалить\n\
1624 ",
1625 !"Далее", !"Назад"
1626 );
1627}
1628
1629static stock diary_ShowPlayerNotationView(playerid, idx)
1630{
1631 static
1632 list_id,
1633 list_caption[DIARY_MAX_CAPTION_LENGTH + 1],
1634 list_contents[DIARY_MAX_CONTENTS_LENGTH + 1],
1635 list_date[MAX_SORTED_PICK_DATE_LEN + 1];
1636
1637 list_id = cache_get_field_content_int(idx, "id", DIARY_MYSQL_CONNECTION_ID);
1638 cache_get_field_content(idx, "caption", list_caption, DIARY_MYSQL_CONNECTION_ID);
1639 cache_get_field_content(idx, "contents", list_contents, DIARY_MYSQL_CONNECTION_ID);
1640 cache_get_field_content(idx, "date", list_date, DIARY_MYSQL_CONNECTION_ID);
1641
1642 static
1643 info_string[138 + (-2 + sizeof(list_caption) + (-2 + sizeof(list_contents))
1644 + (-2 + sizeof(list_date)) + (-2 + 11))];
1645
1646 diary_ConvertTagToColor(list_contents);
1647
1648 format(info_string, sizeof info_string, "\n\
1649 {FFFFFF}Номер:\t\t"cDIARY_INFO"№%d\n\
1650 {FFFFFF}Дата:\t\t"cDIARY_INFO"%s\n\
1651 {FFFFFF}Название:\t"cDIARY_INFO"%s\n\
1652 {FFFFFF}Содержание:\n%s",
1653 list_id, list_date,
1654 list_caption, list_contents);
1655
1656 return ShowPlayerDialog(
1657 playerid,
1658 DIARY_DIALOG_NOTATION_LIST_V,
1659 DIALOG_STYLE_MSGBOX,
1660 !" ",
1661 info_string,
1662 !"Назад", !""
1663 );
1664}
1665
1666static stock diary_ShowPlayerNotationEditCa(playerid, idx)
1667{
1668 diary_SetPlayerTempListIDX(playerid, idx);
1669
1670 static const
1671 info_fmt[] = "\n\
1672 {FFFFFF}Введите новое название в поле ниже (от %d до %d символов)\n\n\
1673 Текущее название: "cDIARY_INFO"%s";
1674
1675 new
1676 list_caption[DIARY_MAX_CAPTION_LENGTH + 1];
1677
1678 cache_get_field_content(idx, "caption", list_caption, DIARY_MYSQL_CONNECTION_ID);
1679
1680 new
1681 info_string[sizeof(info_fmt) + (-2 + sizeof(list_caption) + (-2 + 4)*2)];
1682
1683 format(info_string, sizeof info_string, info_fmt, DIARY_MIN_CAPTION_LENGTH,
1684 DIARY_MAX_CAPTION_LENGTH, list_caption);
1685
1686 return ShowPlayerDialog(
1687 playerid,
1688 DIARY_DIALOG_NOTATION_EDIT_CAP,
1689 DIALOG_STYLE_INPUT,
1690 !" ",
1691 info_string,
1692 !"Изменить", "Назад"
1693 );
1694}
1695
1696static stock diary_ShowPlayerNotationEditCo(playerid, idx)
1697{
1698 static const
1699 contents_fmt_1[] = "\n\
1700 {FFFFFF}Введите в поле новое содержание (от %d до %d символов)\n\
1701 Так-же вы можете воспользоваться BB-кодами: \n",
1702 contents_fmt_2[] = "\n\
1703 %s %s - {%06x}%s\n{FFFFFF}",
1704 contents_fmt_3[] = "\n\n\
1705 Текущее содержание:\n";
1706
1707 static
1708 color_tag_start[MAX_COLOR_TAG_START_LENGTH + 1],
1709 color_tag_end[MAX_COLOR_TAG_END_LENGTH + 1],
1710 color_tag_hex,
1711 color_tag_name[MAX_COLOR_TAG_NAME_LENGTH + 1],
1712 list_contents[DIARY_MAX_CONTENTS_LENGTH + 1],
1713 contents_str_2[(sizeof(contents_fmt_2) + (-2 + MAX_COLOR_TAG_START_LENGTH)
1714 + (-2 + MAX_COLOR_TAG_END_LENGTH) + (-2 + MAX_COLOR_TAG_HEX_LENGTH)
1715 + (-2 + MAX_COLOR_TAG_NAME_LENGTH))*MAX_COLOR_TAG_TYPE],
1716 contents_str[sizeof(contents_fmt_1) + (-2 + 4)*2 + sizeof(contents_fmt_3)
1717 + sizeof(contents_str_2) + sizeof(list_contents)];
1718
1719 cache_get_field_content(idx, "contents", list_contents, DIARY_MYSQL_CONNECTION_ID);
1720
1721 format(contents_str, sizeof contents_str, contents_fmt_1,
1722 DIARY_MIN_CONTENTS_LENGTH, DIARY_MAX_CONTENTS_LENGTH);
1723
1724 for (new i = 0; i < MAX_COLOR_TAG_TYPE; ++i)
1725 {
1726 diary_GetColorTagStart(i, color_tag_start);
1727 diary_GetColorTagEnd(i, color_tag_end);
1728 color_tag_hex = diary_GetColorTagHEX(i);
1729 diary_GetColorTagName(i, color_tag_name);
1730
1731 format(contents_str_2, sizeof contents_str_2, contents_fmt_2,
1732 color_tag_start, color_tag_end, color_tag_hex >>> 8,
1733 color_tag_name);
1734 strcat(contents_str, contents_str_2);
1735 }
1736
1737 strcat(contents_str, contents_fmt_3);
1738
1739 diary_ConvertTagToColor(list_contents);
1740 strcat(contents_str, list_contents);
1741
1742 return ShowPlayerDialog(
1743 playerid,
1744 DIARY_DIALOG_NOTATION_EDIT_CON,
1745 DIALOG_STYLE_INPUT,
1746 !" ",
1747 contents_str,
1748 !"Изменить", !"Назад"
1749 );
1750}
1751
1752static stock diary_ShowPlayerAcceptToDelete(playerid)
1753{
1754 new
1755 owner_name[MAX_PLAYER_NAME + 1],
1756 caption[sizeof(owner_name) + 7 + 8*2 + 1] = ""cDIARY_CAPTION"Дневник {FFFFFF}";
1757
1758 diary_GetPlayerTempOwnerName(playerid, owner_name);
1759 strcat(caption, owner_name);
1760
1761 return ShowPlayerDialog(
1762 playerid,
1763 DIARY_DIALOG_ACCEPT_TO_DELETE_D,
1764 DIALOG_STYLE_MSGBOX,
1765 caption,
1766 !"\n\
1767 {FFFFFF}Вы действительно желаете выкинуть дневник?\n\n\
1768 {D15F47}Внимание! Вернуть дневник с записями будет невозможно!",
1769 !"Выкинуть", !"Назад"
1770 );
1771}
1772
1773static stock diary_ShowPlayerAcToDeleteNote(playerid, idx)
1774{
1775 new
1776 caption[19 + 8 * 2 + 11 + 1],
1777
1778 list_id = cache_get_field_content_int(idx, "id", DIARY_MYSQL_CONNECTION_ID);
1779
1780 format(caption, sizeof caption, ""cDIARY_CAPTION"Удаление записи {FFFFFF}№%d",
1781 list_id);
1782
1783 return ShowPlayerDialog(
1784 playerid,
1785 DIARY_DIALOG_ACCEPT_TO_DELETE_N,
1786 DIALOG_STYLE_MSGBOX,
1787 caption,
1788 !"\n\
1789 {FFFFFF}Вы действительно желаете удалить запись?\n\n",
1790 !"Удалить", !"Назад"
1791 );
1792}
1793
1794stock diary_DeleteNotation(id)
1795{
1796 static const
1797 query_fmt[] = "\
1798 DELETE FROM \
1799 "DIARY_MYSQL_NOTATION_TABLE_NAME" \
1800 WHERE \
1801 id=%d";
1802
1803 new
1804 query_str[sizeof(query_fmt) + (-2 + 11) + 1];
1805
1806 format(query_str, sizeof query_str, query_fmt, id);
1807 mysql_tquery(DIARY_MYSQL_CONNECTION_ID, query_str);
1808}
1809
1810stock diary_Delete(diaryid)
1811{
1812 if (diaryid == DIARY_INVALID_ID)
1813 {
1814 return 0;
1815 }
1816
1817 static const
1818 query_fmt[] = "\
1819 DELETE FROM \
1820 "DIARY_MYSQL_TABLE_NAME" \
1821 WHERE \
1822 id=%d";
1823 new
1824 query_str[sizeof(query_fmt) + (-2 + 11) + 1];
1825
1826 format(query_str, sizeof query_str, query_fmt, diaryid);
1827 mysql_tquery(DIARY_MYSQL_CONNECTION_ID, query_str);
1828
1829 return 1;
1830}
1831
1832stock diary_InstertNotation(diaryid, const date[MAX_SORTED_PICK_DATE_LEN + 1],
1833 const caption[DIARY_MAX_CAPTION_LENGTH + 1],
1834 const contents[DIARY_MAX_CONTENTS_LENGTH + 1])
1835{
1836 if (diaryid == DIARY_INVALID_ID)
1837 {
1838 return 0;
1839 }
1840
1841 static
1842 query_str[115 + (-2 + MAX_SORTED_PICK_DATE_LEN + 1)
1843 + (DIARY_MAX_CAPTION_LENGTH + 1) + (DIARY_MAX_CONTENTS_LENGTH + 1)];
1844
1845 mysql_format(DIARY_MYSQL_CONNECTION_ID, query_str, sizeof query_str, "\
1846 INSERT INTO \
1847 "DIARY_MYSQL_NOTATION_TABLE_NAME"(diary_id,caption,contents,date) \
1848 VALUES \
1849 (%d,'%e','%e','%e')",
1850 diaryid, caption, contents, date);
1851 mysql_tquery(DIARY_MYSQL_CONNECTION_ID, query_str);
1852
1853 return 1;
1854}
1855
1856static stock diary_UpdateNotationColumnVar(idx, const column[], const value[])
1857{
1858 const
1859 MAX_DIARY_NOTATION_COLUMN_LEN = 8;
1860
1861 #if DIARY_MAX_CONTENTS_LENGTH > DIARY_MAX_CAPTION_LENGTH
1862 #define size_value DIARY_MAX_CONTENTS_LENGTH
1863 #elseif MAX_SORTED_PICK_DATE_LEN > DIARY_MAX_CONTENTS_LENGTH
1864 #define size_value MAX_SORTED_PICK_DATE_LEN
1865 #endif
1866
1867 goto g_skip_array;
1868
1869 new
1870 query_string[81 + (-2 + MAX_DIARY_NOTATION_COLUMN_LEN + 1) + (-2 + size_value) + (-2 + 11)],
1871 list_id;
1872
1873 g_skip_array:
1874
1875 #undef size_value
1876
1877 list_id = cache_get_field_content_int(idx, "id", DIARY_MYSQL_CONNECTION_ID);
1878
1879 mysql_format(DIARY_MYSQL_CONNECTION_ID, query_string, sizeof query_string, "\
1880 UPDATE \
1881 "DIARY_MYSQL_NOTATION_TABLE_NAME" \
1882 SET \
1883 %s='%e' \
1884 WHERE \
1885 id=%d",
1886 column, value, list_id);
1887 mysql_tquery(DIARY_MYSQL_CONNECTION_ID, query_string);
1888}
1889
1890static stock diary_ListClearListInfo(playerid)
1891{
1892 if (diary_GetPlayerTempListCacheId(playerid) != Cache:-1)
1893 {
1894 cache_delete(Cache:diary_GetPlayerTempListCacheId(playerid));
1895 diary_SetPlayerTempListCacheId(playerid, Cache:-1);
1896 diary_SetPlayerTempListPage(playerid, 0);
1897 diary_SetPlayerTempListIDX(playerid, 0);
1898 }
1899}
1900
1901static stock diary_DateClearListInfo(playerid)
1902{
1903 if (diary_GetPlayerTempDateCacheId(playerid) != Cache:-1)
1904 {
1905 cache_delete(Cache:diary_GetPlayerTempDateCacheId(playerid));
1906 diary_SetPlayerTempDateCacheId(playerid, Cache:-1);
1907 }
1908}
1909
1910stock diary_ConvertTagToColor(output_string[], const size = sizeof output_string,
1911 default_tag_end = COLOR_TAG_WHITE)
1912{
1913 static
1914 color_tag_start[MAX_COLOR_TAG_START_LENGTH + 1],
1915 color_tag_end[MAX_COLOR_TAG_END_LENGTH + 1],
1916 color_tag_hex,
1917 color_tag_hex_fmt[6 + (-4 + 6) + 1];
1918
1919 for (new bool:is_found; ; )
1920 {
1921 for (new j = 0, pos, len; j < MAX_COLOR_TAG_TYPE; ++j)
1922 {
1923 is_found = false;
1924
1925 diary_GetColorTagStart(j, color_tag_start);
1926
1927 if ((pos = strfind(output_string, color_tag_start)) != -1)
1928 {
1929 is_found = true;
1930
1931 len = diary_GetColorTagStartLen(j);
1932 color_tag_hex = diary_GetColorTagHEX(j);
1933
1934 format(color_tag_hex_fmt, sizeof color_tag_hex_fmt, "{%06x}",
1935 color_tag_hex >>> 8);
1936
1937 strdel(output_string, pos, pos+len);
1938 strins(output_string, color_tag_hex_fmt, pos, size);
1939 //strmid(output_string, color_tag_hex_fmt, pos, pos+len, size);
1940
1941 diary_GetColorTagEnd(j, color_tag_end);
1942
1943 if ((pos = strfind(output_string, color_tag_end)) != -1)
1944 {
1945 len = diary_GetColorTagEndLen(j);
1946 color_tag_hex = diary_GetColorTagHEX(default_tag_end);
1947
1948 format(color_tag_hex_fmt, sizeof color_tag_hex_fmt, "{%06x}",
1949 color_tag_hex >>> 8);
1950
1951 strdel(output_string, pos, pos+len);
1952 strins(output_string, color_tag_hex_fmt, pos, size);
1953 //strmid(output_string, color_tag_hex_fmt, pos, pos+len, size);
1954 }
1955 }
1956 }
1957
1958 if (!is_found)
1959 {
1960 return;
1961 }
1962 }
1963}