@@ -637,3 +637,112 @@ function privacy_setting_callback($val, $key, $mod) {
637
637
}
638
638
return $ val ;
639
639
}
640
+
641
+ if (!hm_exists ('get_scheduled_date ' )) {
642
+ function get_scheduled_date ($ format , $ only_label = false ) {
643
+ switch ($ format ) {
644
+ case 'later_in_day ' :
645
+ $ date_string = 'today 18:00 ' ;
646
+ $ label = 'Later in the day ' ;
647
+ break ;
648
+ case 'tomorrow ' :
649
+ $ date_string = '+1 day 08:00 ' ;
650
+ $ label = 'Tomorrow ' ;
651
+ break ;
652
+ case 'next_weekend ' :
653
+ $ date_string = 'next Saturday 08:00 ' ;
654
+ $ label = 'Next weekend ' ;
655
+ break ;
656
+ case 'next_week ' :
657
+ $ date_string = 'next week 08:00 ' ;
658
+ $ label = 'Next week ' ;
659
+ break ;
660
+ case 'next_month ' :
661
+ $ date_string = 'next month 08:00 ' ;
662
+ $ label = 'Next month ' ;
663
+ break ;
664
+ default :
665
+ $ date_string = $ format ;
666
+ $ label = 'Certain date ' ;
667
+ break ;
668
+ }
669
+
670
+ $ time = strtotime ($ date_string );
671
+
672
+ if ($ only_label ) {
673
+ return [$ label , date ('D, H:i ' , $ time )];
674
+ }
675
+
676
+ return date ('D, d M Y H:i T ' , $ time );
677
+ }
678
+ }
679
+
680
+
681
+ /**
682
+ * @subpackage imap/functions
683
+ */
684
+ if (!hm_exists ('nexter_formats ' )) {
685
+ function nexter_formats () {
686
+ $ values = array (
687
+ 'tomorrow ' ,
688
+ 'next_weekend ' ,
689
+ 'next_week ' ,
690
+ 'next_month '
691
+ );
692
+ if (date ('H ' ) <= 16 ) {
693
+ array_push ($ values , 'later_in_day ' );
694
+ }
695
+ return $ values ;
696
+ }}
697
+
698
+ if (!hm_exists ('schedule_dropdown ' )) {
699
+ function schedule_dropdown ($ output , $ send_now = false ) {
700
+ $ values = nexter_formats ();
701
+
702
+ $ txt = '' ;
703
+ if ($ send_now ) {
704
+ $ txt .= '<div class="dropdown d-inline-block">
705
+ <button type="button" class="btn btn-light btn-sm dropdown-toggle" id="dropdownMenuNexterDate" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> ' .$ output ->trans ('Reschedule ' ).'</button> ' ;
706
+ }
707
+ $ txt .= '<ul class="dropdown-menu nexter_dropdown schedule_dropdown" aria-labelledby="dropdownMenuNexterDate"> ' ;
708
+ foreach ($ values as $ format ) {
709
+ $ labels = get_scheduled_date ($ format , true );
710
+ $ txt .= '<li><a href="#" class="nexter_date_helper dropdown-item d-flex justify-content-between gap-5" data-value=" ' .$ format .'"><span> ' .$ output ->trans ($ labels [0 ]).'</span> <span class="text-end"> ' .$ labels [1 ].'</span></a></li> ' ;
711
+ }
712
+ $ txt .= '<li><hr class="dropdown-divider"></li> ' ;
713
+ $ txt .= '<li><label for="nexter_input_date" class="nexter_date_picker dropdown-item cursor-pointer"> ' .$ output ->trans ('Pick a date ' ).'</label> ' ;
714
+ $ txt .= '<input id="nexter_input_date" type="datetime-local" min=" ' .date ('Y-m-d\Th:m ' ).'" class="nexter_input_date" style="visibility: hidden; position: absolute; height: 0;"> ' ;
715
+ $ txt .= '<input class="nexter_input" style="display:none;"></li> ' ;
716
+ if ($ send_now ) {
717
+ $ txt .= '<li><hr class="dropdown-divider"></li> ' ;
718
+ $ txt .= '<li><a href="#" data-value="now" class="nexter_date_helper dropdown-item""> ' .$ output ->trans ('Send now ' ).'</a></li> ' ;
719
+ }
720
+ $ txt .= '</ul> ' ;
721
+ if ($ send_now ) {
722
+ $ txt .= '</div> ' ;
723
+ }
724
+
725
+ return $ txt ;
726
+ }}
727
+
728
+ /**
729
+ * @subpackage imap/functions
730
+ */
731
+ if (!hm_exists ('parse_delayed_header ' )) {
732
+ function parse_delayed_header ($ header , $ name )
733
+ {
734
+ $ header = str_replace ("$ name: " , '' , $ header );
735
+ $ result = [];
736
+ foreach (explode ('; ' , $ header ) as $ keyValue )
737
+ {
738
+ $ keyValue = trim ($ keyValue );
739
+ $ spacePos = strpos ($ keyValue , ' ' );
740
+ if ($ spacePos > 0 ) {
741
+ $ result [rtrim (substr ($ keyValue , 0 , $ spacePos ), ': ' )] = trim (substr ($ keyValue , $ spacePos +1 ));
742
+ } else {
743
+ $ result [$ keyValue ] = true ;
744
+ }
745
+ }
746
+ return $ result ;
747
+ }
748
+ }
0 commit comments