1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633: 634: 635: 636: 637: 638: 639: 640: 641: 642: 643: 644: 645: 646: 647: 648: 649: 650: 651: 652: 653: 654: 655: 656: 657: 658: 659: 660: 661: 662: 663: 664: 665: 666: 667: 668: 669: 670: 671: 672: 673: 674: 675: 676: 677: 678: 679: 680: 681: 682: 683: 684: 685: 686: 687: 688: 689: 690: 691: 692: 693: 694: 695: 696: 697: 698: 699: 700: 701: 702: 703: 704: 705: 706: 707: 708: 709: 710: 711: 712: 713: 714: 715: 716: 717: 718: 719: 720: 721: 722: 723: 724: 725: 726: 727: 728: 729: 730: 731: 732: 733: 734: 735: 736: 737: 738: 739: 740: 741: 742: 743: 744: 745: 746: 747: 748: 749: 750: 751: 752: 753: 754: 755: 756: 757: 758: 759: 760: 761: 762: 763: 764: 765: 766: 767: 768: 769: 770: 771: 772: 773: 774: 775: 776: 777: 778: 779: 780: 781: 782: 783: 784: 785: 786: 787: 788: 789: 790: 791: 792: 793: 794: 795: 796: 797: 798: 799: 800: 801: 802: 803: 804: 805: 806: 807: 808: 809: 810: 811: 812: 813: 814: 815: 816: 817: 818: 819: 820: 821: 822: 823: 824: 825: 826: 827: 828: 829: 830: 831: 832: 833: 834: 835: 836: 837: 838: 839: 840: 841: 842: 843: 844: 845: 846: 847: 848: 849: 850: 851: 852: 853: 854: 855: 856: 857: 858: 859: 860: 861: 862: 863: 864: 865: 866: 867: 868: 869: 870: 871: 872: 873: 874: 875: 876: 877: 878: 879: 880: 881: 882: 883: 884: 885: 886: 887: 888: 889: 890: 891: 892: 893: 894: 895: 896: 897: 898: 899: 900: 901: 902: 903: 904: 905: 906: 907: 908: 909: 910: 911: 912: 913: 914: 915: 916: 917: 918: 919: 920: 921: 922: 923: 924: 925: 926: 927: 928: 929: 930: 931: 932: 933: 934: 935: 936: 937: 938: 939: 940: 941: 942: 943: 944: 945: 946: 947: 948: 949: 950: 951: 952: 953: 954: 955: 956: 957: 958: 959: 960: 961: 962: 963: 964: 965: 966: 967: 968: 969: 970: 971: 972: 973: 974: 975: 976: 977: 978: 979: 980: 981: 982: 983: 984: 985: 986: 987: 988: 989: 990: 991: 992: 993: 994: 995: 996: 997: 998: 999: 1000: 1001: 1002: 1003: 1004: 1005: 1006: 1007: 1008: 1009: 1010: 1011: 1012: 1013: 1014: 1015: 1016: 1017: 1018: 1019: 1020: 1021: 1022: 1023: 1024: 1025: 1026: 1027: 1028: 1029: 1030: 1031: 1032: 1033: 1034: 1035: 1036: 1037: 1038: 1039: 1040: 1041: 1042: 1043: 1044: 1045: 1046: 1047: 1048: 1049: 1050: 1051: 1052: 1053: 1054: 1055: 1056: 1057: 1058: 1059: 1060: 1061: 1062: 1063: 1064: 1065: 1066: 1067: 1068: 1069: 1070: 1071: 1072: 1073: 1074: 1075: 1076: 1077: 1078: 1079: 1080: 1081: 1082: 1083: 1084: 1085: 1086: 1087: 1088: 1089: 1090: 1091: 1092: 1093: 1094: 1095: 1096: 1097: 1098: 1099: 1100: 1101: 1102: 1103: 1104: 1105: 1106: 1107: 1108: 1109: 1110: 1111: 1112: 1113: 1114: 1115: 1116: 1117: 1118: 1119: 1120: 1121: 1122: 1123: 1124: 1125: 1126: 1127: 1128: 1129: 1130: 1131: 1132: 1133: 1134: 1135: 1136: 1137: 1138: 1139: 1140: 1141: 1142: 1143: 1144: 1145: 1146: 1147: 1148: 1149: 1150: 1151: 1152: 1153: 1154: 1155: 1156: 1157: 1158: 1159: 1160: 1161: 1162: 1163: 1164: 1165: 1166: 1167: 1168: 1169: 1170: 1171: 1172: 1173: 1174: 1175: 1176: 1177: 1178: 1179: 1180: 1181: 1182: 1183: 1184: 1185: 1186: 1187: 1188: 1189: 1190: 1191: 1192:
<?php
function template_main()
{
global $context;
echo '
<div id="calendar">';
if (empty($context['blocks_disabled']))
echo '
<div id="month_grid">
', template_show_month_grid('prev', true), '
', template_show_month_grid('current', true), '
', template_show_month_grid('next', true), '
</div>';
if ($context['calendar_view'] == 'viewlist')
echo '
<div id="main_grid">
', template_show_upcoming_list('main'), '
</div>';
elseif ($context['calendar_view'] == 'viewweek')
echo '
<div id="main_grid">
', template_show_week_grid('main'), '
</div>';
else
echo '
<div id="main_grid">
', template_show_month_grid('main'), '
</div>';
echo '
</div><!-- #calendar -->';
}
function template_show_upcoming_list($grid_name)
{
global $context, $scripturl, $txt;
if (!isset($context['calendar_grid_' . $grid_name]))
return false;
$calendar_data = &$context['calendar_grid_' . $grid_name];
if (empty($calendar_data['disable_title']))
echo '
<div class="cat_bar">
<h3 class="catbg centertext largetext">
<a href="', $scripturl, '?action=calendar;viewlist;year=', $calendar_data['start_year'], ';month=', $calendar_data['start_month'], ';day=', $calendar_data['start_day'], '">', $txt['calendar_upcoming'], '</a>
</h3>
</div>';
template_calendar_top($calendar_data);
if (empty($calendar_data['events']) && empty($calendar_data['birthdays']) && empty($calendar_data['holidays']))
echo '
<div class="descbox">', $txt['calendar_empty'], '</div>';
if (!empty($calendar_data['events']))
{
echo '
<div>
<div class="title_bar">
<h3 class="titlebg">', str_replace(':', '', $txt['events']), '</h3>
</div>
<ul>';
foreach ($calendar_data['events'] as $date => $date_events)
{
foreach ($date_events as $event)
{
echo '
<li class="windowbg">
<strong class="event_title">', $event['link'], '</strong>';
if ($event['can_edit'])
echo ' <a href="' . $event['modify_href'] . '"><span class="main_icons calendar_modify" title="', $txt['calendar_edit'], '"></span></a>';
if ($event['can_export'])
echo ' <a href="' . $event['export_href'] . '"><span class="main_icons calendar_export" title="', $txt['calendar_export'], '"></span></a>';
echo '
<br>';
if (!empty($event['allday']))
{
echo '<time datetime="' . $event['start_iso_gmdate'] . '">', trim($event['start_date_local']), '</time>', ($event['start_date'] != $event['end_date']) ? ' – <time datetime="' . $event['end_iso_gmdate'] . '">' . trim($event['end_date_local']) . '</time>' : '';
}
else
{
echo '<time datetime="' . $event['start_iso_gmdate'] . '">', trim($event['start_date_local']), ', ', trim($event['start_time_local']), '</time> – <time datetime="' . $event['end_iso_gmdate'] . '">';
if ($event['start_date_local'] != $event['end_date_local'])
echo trim($event['end_date_local']) . ', ';
echo trim($event['end_time_local']);
if ($event['start_date_local'] . $event['start_time_local'] != $event['start_date_orig'] . $event['start_time_orig'])
{
echo '</time> (<time datetime="' . $event['start_iso_gmdate'] . '">';
if ($event['start_date_orig'] != $event['start_date_local'] || $event['end_date_orig'] != $event['end_date_local'] || $event['start_date_orig'] != $event['end_date_orig'])
echo trim($event['start_date_orig']), ', ';
echo trim($event['start_time_orig']), '</time> – <time datetime="' . $event['end_iso_gmdate'] . '">';
if ($event['start_date_orig'] != $event['end_date_orig'])
echo trim($event['end_date_orig']) . ', ';
echo trim($event['end_time_orig']), ' ', $event['tz_abbrev'], '</time>)';
}
else
echo ' ', $event['tz_abbrev'], '</time>';
}
if (!empty($event['location']))
echo '<br>', $event['location'];
echo '
</li>';
}
}
echo '
</ul>
</div>';
}
if (!empty($calendar_data['birthdays']))
{
echo '
<div>
<div class="title_bar">
<h3 class="titlebg">', str_replace(':', '', $txt['birthdays']), '</h3>
</div>
<div class="windowbg">';
foreach ($calendar_data['birthdays'] as $date)
{
echo '
<p class="inline">
<strong>', $date['date_local'], '</strong>: ';
unset($date['date_local']);
$birthdays = array();
foreach ($date as $member)
$birthdays[] = '<a href="' . $scripturl . '?action=profile;u=' . $member['id'] . '">' . $member['name'] . (isset($member['age']) ? ' (' . $member['age'] . ')' : '') . '</a>';
echo implode(', ', $birthdays);
echo '
</p>';
}
echo '
</div><!-- .windowbg -->
</div>';
}
if (!empty($calendar_data['holidays']))
{
echo '
<div>
<div class="title_bar">
<h3 class="titlebg">', str_replace(':', '', $txt['calendar_prompt']), '</h3>
</div>
<div class="windowbg">
<p class="inline holidays">';
$holidays = array();
foreach ($calendar_data['holidays'] as $date)
{
$date_local = $date['date_local'];
unset($date['date_local']);
foreach ($date as $holiday)
$holidays[] = $holiday . ' (' . $date_local . ')';
}
echo implode(', ', $holidays);
echo '
</p>
</div><!-- .windowbg -->
</div>';
}
}
function template_show_month_grid($grid_name, $is_mini = false)
{
global $context, $txt, $scripturl, $modSettings;
if (!isset($context['calendar_grid_' . $grid_name]))
return false;
$calendar_data = &$context['calendar_grid_' . $grid_name];
if (isset($calendar_data['show_week_links']) && ($calendar_data['show_week_links'] == 3 || (($calendar_data['show_week_links'] == 1 && $is_mini === true) || $calendar_data['show_week_links'] == 2 && $is_mini === false)))
$show_week_links = true;
else
$show_week_links = false;
if (empty($calendar_data['disable_title']))
{
echo '
<div class="cat_bar">
<h3 class="catbg centertext largetext">';
if (empty($calendar_data['previous_calendar']['disabled']) && $calendar_data['show_next_prev'] && $is_mini === false)
echo '
<span class="floatleft">
<a href="', $calendar_data['previous_calendar']['href'], '">«</a>
</span>';
if (empty($calendar_data['next_calendar']['disabled']) && $calendar_data['show_next_prev'] && $is_mini === false)
echo '
<span class="floatright">
<a href="', $calendar_data['next_calendar']['href'], '">»</a>
</span>';
echo '
<a href="', $scripturl, '?action=calendar;', $context['calendar_view'], ';year=', $calendar_data['current_year'], ';month=', $calendar_data['current_month'], ';day=', $calendar_data['current_day'], '">', $txt['months_titles'][$calendar_data['current_month']], ' ', $calendar_data['current_year'], '</a>
</h3>
</div><!-- .cat_bar -->';
}
if ($is_mini === false)
template_calendar_top($calendar_data);
echo '
<table class="calendar_table">';
if (empty($calendar_data['disable_day_titles']))
{
echo '
<tr>';
if ($show_week_links === true)
echo '
<th></th>';
foreach ($calendar_data['week_days'] as $day)
echo '
<th class="days" scope="col">', !empty($calendar_data['short_day_titles']) || $is_mini === true ? $txt['days_short'][$day] : $txt['days'][$day], '</th>';
echo '
</tr>';
}
foreach ($calendar_data['weeks'] as $week)
{
$current_month_started = false;
$count = 1;
$final_count = 1;
echo '
<tr class="days_wrapper">';
if ($show_week_links === true)
echo '
<td class="windowbg weeks">
<a href="', $scripturl, '?action=calendar;viewweek;year=', $calendar_data['current_year'], ';month=', $calendar_data['current_month'], ';day=', $week['days'][0]['day'], '" title="', $txt['calendar_view_week'], '">»</a>
</td>';
foreach ($week['days'] as $day)
{
$classes = array('days');
if (!empty($day['day']))
{
$classes[] = !empty($day['is_today']) ? 'calendar_today' : 'windowbg';
foreach (array('events', 'holidays', 'birthdays') as $event_type)
if (!empty($day[$event_type]))
$classes[] = $event_type;
}
else
{
$classes[] = 'disabled';
}
echo '
<td class="', implode(' ', $classes), '">';
if (!empty($day['day']))
{
$title_prefix = !empty($day['is_first_of_month']) && $context['current_month'] == $calendar_data['current_month'] && $is_mini === false ? (!empty($calendar_data['short_month_titles']) ? $txt['months_short'][$calendar_data['current_month']] . ' ' : $txt['months_titles'][$calendar_data['current_month']] . ' ') : '';
if (!empty($modSettings['cal_daysaslink']) && $context['can_post'])
echo '
<a href="', $scripturl, '?action=calendar;sa=post;year=', $calendar_data['current_year'], ';month=', $calendar_data['current_month'], ';day=', $day['day'], ';', $context['session_var'], '=', $context['session_id'], '"><span class="day_text">', $title_prefix, $day['day'], '</span></a>';
elseif ($is_mini)
echo '
<a href="', $scripturl, '?action=calendar;', $context['calendar_view'], ';year=', $calendar_data['current_year'], ';month=', $calendar_data['current_month'], ';day=', $day['day'], '"><span class="day_text">', $title_prefix, $day['day'], '</span></a>';
else
echo '
<span class="day_text">', $title_prefix, $day['day'], '</span>';
if ($is_mini === false)
{
if (!empty($day['holidays']))
echo '
<div class="smalltext holiday">
<span>', $txt['calendar_prompt'], '</span> ', implode(', ', $day['holidays']), '
</div>';
if (!empty($day['birthdays']))
{
echo '
<div class="smalltext">
<span class="birthday">', $txt['birthdays'], '</span> ';
$use_js_hide = empty($context['show_all_birthdays']) && count($day['birthdays']) > 15;
$birthday_count = 0;
foreach ($day['birthdays'] as $member)
{
echo '<a href="', $scripturl, '?action=profile;u=', $member['id'], '"><span class="fix_rtl_names">', $member['name'], '</span>', isset($member['age']) ? ' (' . $member['age'] . ')' : '', '</a>', $member['is_last'] || ($count == 10 && $use_js_hide) ? '' : ', ';
if ($birthday_count == 10 && $use_js_hide)
echo '<span class="hidelink" id="bdhidelink_', $day['day'], '">...<br><a href="', $scripturl, '?action=calendar;month=', $calendar_data['current_month'], ';year=', $calendar_data['current_year'], ';showbd" onclick="document.getElementById(\'bdhide_', $day['day'], '\').classList.remove(\'hidden\'); document.getElementById(\'bdhidelink_', $day['day'], '\').classList.add(\'hidden\'); return false;">(', sprintf($txt['calendar_click_all'], count($day['birthdays'])), ')</a></span><span id="bdhide_', $day['day'], '" class="hidden">, ';
++$birthday_count;
}
if ($use_js_hide)
echo '
</span>';
echo '
</div><!-- .smalltext -->';
}
if (!empty($day['events']))
{
uasort($day['events'], function($a, $b) {
if ($a['start_timestamp'] == $b['start_timestamp'])
return 0;
return ($a['start_timestamp'] < $b['start_timestamp']) ? -1 : 1;
});
echo '
<div class="smalltext lefttext">
<span class="event">', $txt['events'], '</span><br>';
foreach ($day['events'] as $event)
{
$event_icons_needed = ($event['can_edit'] || $event['can_export']) ? true : false;
echo '
<div class="event_wrapper', $event['starts_today'] == true ? ' event_starts_today' : '', $event['ends_today'] == true ? ' event_ends_today' : '', $event['allday'] == true ? ' allday' : '', $event['is_selected'] ? ' sel_event' : '', '">
', $event['link'], '<br>
<span class="event_time', empty($event_icons_needed) ? ' floatright' : '', '">';
if (!empty($event['start_time_local']) && $event['starts_today'] == true)
echo trim(str_replace(':00 ', ' ', $event['start_time_local']));
elseif (!empty($event['end_time_local']) && $event['ends_today'] == true)
echo strtolower($txt['ends']), ' ', trim(str_replace(':00 ', ' ', $event['end_time_local']));
elseif (!empty($event['allday']))
echo $txt['calendar_allday'];
echo '
</span>';
if (!empty($event['location']))
echo '
<br>
<span class="event_location', empty($event_icons_needed) ? ' floatright' : '', '">' . $event['location'] . '</span>';
if ($event['can_edit'] || $event['can_export'])
{
echo '
<span class="modify_event_links">';
if ($event['can_edit'])
echo '
<a class="modify_event" href="', $event['modify_href'], '">
<span class="main_icons calendar_modify" title="', $txt['calendar_edit'], '"></span>
</a>';
if ($event['can_export'])
echo '
<a class="modify_event" href="', $event['export_href'], '">
<span class="main_icons calendar_export" title="', $txt['calendar_export'], '"></span>
</a>';
echo '
</span><br class="clear">';
}
echo '
</div><!-- .event_wrapper -->';
}
echo '
</div><!-- .smalltext -->';
}
}
$current_month_started = $count;
}
elseif ($is_mini === false)
{
if (empty($current_month_started) && !empty($context['calendar_grid_prev']))
echo '<a href="', $scripturl, '?action=calendar;year=', $context['calendar_grid_prev']['current_year'], ';month=', $context['calendar_grid_prev']['current_month'], '">', $context['calendar_grid_prev']['last_of_month'] - $calendar_data['shift']-- +1, '</a>';
elseif (!empty($current_month_started) && !empty($context['calendar_grid_next']))
echo '<a href="', $scripturl, '?action=calendar;year=', $context['calendar_grid_next']['current_year'], ';month=', $context['calendar_grid_next']['current_month'], '">', $current_month_started + 1 == $count ? (!empty($calendar_data['short_month_titles']) ? $txt['months_short'][$context['calendar_grid_next']['current_month']] . ' ' : $txt['months_titles'][$context['calendar_grid_next']['current_month']] . ' ') : '', $final_count++, '</a>';
}
echo '
</td>';
++$count;
}
echo '
</tr>';
}
echo '
</table>';
}
function template_show_week_grid($grid_name)
{
global $context, $txt, $scripturl, $modSettings;
if (!isset($context['calendar_grid_' . $grid_name]))
return false;
$calendar_data = &$context['calendar_grid_' . $grid_name];
$iteration = 1;
foreach ($calendar_data['months'] as $month_data)
{
if ($iteration == 1)
{
echo '
<div class="cat_bar">
<h3 class="catbg centertext largetext">';
if (empty($calendar_data['previous_calendar']['disabled']) && !empty($calendar_data['show_next_prev']))
echo '
<span class="floatleft">
<a href="', $calendar_data['previous_week']['href'], '">«</a>
</span>';
if (empty($calendar_data['next_calendar']['disabled']) && !empty($calendar_data['show_next_prev']))
echo '
<span class="floatright">
<a href="', $calendar_data['next_week']['href'], '">»</a>
</span>';
if (!empty($calendar_data['week_title']))
echo $calendar_data['week_title'];
echo '
</h3>
</div><!-- .cat_bar -->';
template_calendar_top($calendar_data);
}
echo '
<div class="week_month_title">
<a href="', $scripturl, '?action=calendar;month=', $month_data['current_month'], '">
', $txt['months_titles'][$month_data['current_month']], '
</a>
</div>';
echo '
<table class="table_grid calendar_week">
<tr>
<th class="days" scope="col">', $txt['calendar_day'], '</th>
<th class="days" scope="col">', $txt['events'], '</th>
<th class="days" scope="col">', $txt['calendar_prompt'], '</th>
<th class="days" scope="col">', $txt['birthdays'], '</th>
</tr>';
foreach ($month_data['days'] as $day)
{
$classes = array('days');
$classes[] = !empty($day['is_today']) ? 'calendar_today' : 'windowbg';
echo '
<tr class="days_wrapper">
<td class="', implode(' ', $classes), ' act_day">';
if (!empty($modSettings['cal_daysaslink']) && $context['can_post'])
echo '
<a href="', $scripturl, '?action=calendar;sa=post;month=', $month_data['current_month'], ';year=', $month_data['current_year'], ';day=', $day['day'], ';', $context['session_var'], '=', $context['session_id'], '">', $txt['days'][$day['day_of_week']], ' - ', $day['day'], '</a>';
else
echo $txt['days'][$day['day_of_week']], ' - ', $day['day'];
echo '
</td>
<td class="', implode(' ', $classes), '', empty($day['events']) ? (' disabled' . ($context['can_post'] ? ' week_post' : '')) : ' events', ' event_col" data-css-prefix="' . $txt['events'] . ' ', (empty($day['events']) && empty($context['can_post'])) ? $txt['none'] : '', '">';
if (!empty($day['events']))
{
uasort($day['events'], function($a, $b) {
if ($a['start_timestamp'] == $b['start_timestamp'])
return 0;
return ($a['start_timestamp'] < $b['start_timestamp']) ? -1 : 1;
});
foreach ($day['events'] as $event)
{
echo '
<div class="event_wrapper">';
$event_icons_needed = ($event['can_edit'] || $event['can_export']) ? true : false;
echo $event['link'], '<br>
<span class="event_time', empty($event_icons_needed) ? ' floatright' : '', '">';
if (!empty($event['start_time_local']))
echo trim($event['start_time_local']), !empty($event['end_time_local']) ? ' – ' . trim($event['end_time_local']) : '';
else
echo $txt['calendar_allday'];
echo '
</span>';
if (!empty($event['location']))
echo '<br>
<span class="event_location', empty($event_icons_needed) ? ' floatright' : '', '">' . $event['location'] . '</span>';
if (!empty($event_icons_needed))
{
echo ' <span class="modify_event_links">';
if (!empty($event['can_edit']))
echo '
<a class="modify_event" href="', $event['modify_href'], '">
<span class="main_icons calendar_modify" title="', $txt['calendar_edit'], '"></span>
</a>';
if (!empty($event['can_export']))
echo '
<a class="modify_event" href="', $event['export_href'], '">
<span class="main_icons calendar_export" title="', $txt['calendar_export'], '"></span>
</a>';
echo '
</span><br class="clear">';
}
echo '
</div><!-- .event_wrapper -->';
}
if (!empty($context['can_post']))
{
echo '
<div class="week_add_event">
<a href="', $scripturl, '?action=calendar;sa=post;month=', $month_data['current_month'], ';year=', $month_data['current_year'], ';day=', $day['day'], ';', $context['session_var'], '=', $context['session_id'], '">', $txt['calendar_post_event'], '</a>
</div>
<br class="clear">';
}
}
else
{
if (!empty($context['can_post']))
echo '
<div class="week_add_event">
<a href="', $scripturl, '?action=calendar;sa=post;month=', $month_data['current_month'], ';year=', $month_data['current_year'], ';day=', $day['day'], ';', $context['session_var'], '=', $context['session_id'], '">', $txt['calendar_post_event'], '</a>
</div>';
}
echo '
</td>
<td class="', implode(' ', $classes), !empty($day['holidays']) ? ' holidays' : ' disabled', ' holiday_col" data-css-prefix="' . $txt['calendar_prompt'] . ' ">';
if (!empty($day['holidays']))
echo implode('<br>', $day['holidays']);
echo '
</td>
<td class="', implode(' ', $classes), '', !empty($day['birthdays']) ? ' birthdays' : ' disabled', ' birthday_col" data-css-prefix="' . $txt['birthdays'] . ' ">';
if (!empty($day['birthdays']))
{
foreach ($day['birthdays'] as $member)
echo '
<a href="', $scripturl, '?action=profile;u=', $member['id'], '">', $member['name'], '</a>
', isset($member['age']) ? ' (' . $member['age'] . ')' : '', '
', $member['is_last'] ? '' : '<br>';
}
echo '
</td>
</tr>';
}
++$iteration;
echo '
</table>';
}
}
function template_calendar_top($calendar_data)
{
global $context, $scripturl, $txt;
echo '
<div class="calendar_top roundframe', empty($calendar_data['disable_title']) ? ' noup' : '', '">
<div id="calendar_viewselector" class="buttonrow floatleft">
<a href="', $scripturl, '?action=calendar;viewlist;year=', $context['current_year'], ';month=', $context['current_month'], ';day=', $context['current_day'], '" class="button', $context['calendar_view'] == 'viewlist' ? ' active' : '', '">', $txt['calendar_list'], '</a>
<a href="', $scripturl, '?action=calendar;viewmonth;year=', $context['current_year'], ';month=', $context['current_month'], ';day=', $context['current_day'], '" class="button', $context['calendar_view'] == 'viewmonth' ? ' active' : '', '">', $txt['calendar_month'], '</a>
<a href="', $scripturl, '?action=calendar;viewweek;year=', $context['current_year'], ';month=', $context['current_month'], ';day=', $context['current_day'], '" class="button', $context['calendar_view'] == 'viewweek' ? ' active' : '', '">', $txt['calendar_week'], '</a>
</div>
', template_button_strip($context['calendar_buttons'], 'right');
echo '
<form action="', $scripturl, '?action=calendar;', $context['calendar_view'], '" id="', !empty($calendar_data['end_date']) ? 'calendar_range' : 'calendar_navigation', '" method="post" accept-charset="', $context['character_set'], '">
<input type="text" name="start_date" id="start_date" maxlength="10" value="', $calendar_data['start_date'], '" tabindex="', $context['tabindex']++, '" class="date_input start" data-type="date">';
if (!empty($calendar_data['end_date']))
echo '
<span>', strtolower($txt['to']), '</span>
<input type="text" name="end_date" id="end_date" maxlength="10" value="', $calendar_data['end_date'], '" tabindex="', $context['tabindex']++, '" class="date_input end" data-type="date">';
echo '
<input type="submit" class="button" style="float:none" id="view_button" value="', $txt['view'], '">
</form>
</div><!-- .calendar_top -->';
}
function template_event_post()
{
global $context, $txt, $scripturl, $modSettings;
echo '
<form action="', $scripturl, '?action=calendar;sa=post" method="post" name="postevent" accept-charset="', $context['character_set'], '" onsubmit="submitonce(this);">';
if (!empty($context['event']['new']))
echo '
<input type="hidden" name="eventid" value="', $context['event']['eventid'], '">';
echo '
<div id="post_event">
<div class="cat_bar">
<h3 class="catbg">
', $context['page_title'], '
</h3>
</div>';
if (!empty($context['post_error']['messages']))
echo '
<div class="errorbox">
<dl class="event_error">
<dt>
', $context['error_type'] == 'serious' ? '<strong>' . $txt['error_while_submitting'] . '</strong>' : '', '
</dt>
<dt class="error">
', implode('<br>', $context['post_error']['messages']), '
</dt>
</dl>
</div>';
echo '
<div class="roundframe noup">
<fieldset id="event_main">
<legend><span', isset($context['post_error']['no_event']) ? ' class="error"' : '', '>', $txt['calendar_event_title'], '</span></legend>
<input type="hidden" name="calendar" value="1">
<div class="event_options_left" id="event_title">
<div>
<input type="text" id="evtitle" name="evtitle" maxlength="255" size="55" value="', $context['event']['title'], '" tabindex="', $context['tabindex']++, '">
</div>
</div>';
if ($context['event']['new'] && !empty($context['event']['categories']))
{
echo '
<div class="event_options_right" id="event_board">
<div>
<span class="label">', $txt['calendar_post_in'], '</span>
<input type="checkbox" name="link_to_board"', (!empty($context['event']['board']) ? ' checked' : ''), ' onclick="toggleLinked(this.form);">
<select name="board"', empty($context['event']['board']) ? ' disabled' : '', '>';
foreach ($context['event']['categories'] as $category)
{
echo '
<optgroup label="', $category['name'], '">';
foreach ($category['boards'] as $board)
echo '
<option value="', $board['id'], '"', $board['selected'] ? ' selected' : '', '>', $board['child_level'] > 0 ? str_repeat('==', $board['child_level'] - 1) . '=>' : '', ' ', $board['name'], '</option>';
echo '
</optgroup>';
}
echo '
</select>
</div>
</div><!-- #event_board -->';
}
echo '
</fieldset>
<fieldset id="event_options">
<legend>', $txt['calendar_event_options'], '</legend>
<div class="event_options_left" id="event_time_input">
<div>
<span class="label">', $txt['start'], '</span>
<input type="text" name="start_date" id="start_date" maxlength="10" value="', $context['event']['start_date'], '" tabindex="', $context['tabindex']++, '" class="date_input start" data-type="date">
<input type="text" name="start_time" id="start_time" maxlength="11" value="', $context['event']['start_time_local'], '" tabindex="', $context['tabindex']++, '" class="time_input start" data-type="time"', !empty($context['event']['allday']) ? ' disabled' : '', '>
</div>
<div>
<span class="label">', $txt['end'], '</span>
<input type="text" name="end_date" id="end_date" maxlength="10" value="', $context['event']['end_date'], '" tabindex="', $context['tabindex']++, '" class="date_input end" data-type="date"', $modSettings['cal_maxspan'] == 1 ? ' disabled' : '', '>
<input type="text" name="end_time" id="end_time" maxlength="11" value="', $context['event']['end_time_local'], '" tabindex="', $context['tabindex']++, '" class="time_input end" data-type="time"', !empty($context['event']['allday']) ? ' disabled' : '', '>
</div>
</div><!-- #event_time_input -->
<div class="event_options_right" id="event_time_options">
<div id="event_allday">
<label for="allday"><span class="label">', $txt['calendar_allday'], '</span></label>
<input type="checkbox" name="allday" id="allday"', !empty($context['event']['allday']) ? ' checked' : '', ' tabindex="', $context['tabindex']++, '">
</div>
<div id="event_timezone">
<span class="label">', $txt['calendar_timezone'], '</span>
<select name="tz" id="tz"', !empty($context['event']['allday']) ? ' disabled' : '', '>';
foreach ($context['all_timezones'] as $tz => $tzname)
echo '
<option', is_numeric($tz) ? ' value="" disabled' : ' value="' . $tz . '"', $tz === $context['event']['tz'] ? ' selected' : '', '>', $tzname, '</option>';
echo '
</select>
</div>
</div><!-- #event_time_options -->
<div>
<span class="label">', $txt['location'], '</span>
<input type="text" name="event_location" id="event_location" maxlength="255" value="', !empty($context['event']['location']) ? $context['event']['location'] : '', '" tabindex="', $context['tabindex']++, '">
</div>
</fieldset>';
echo '
<input type="submit" value="', empty($context['event']['new']) ? $txt['save'] : $txt['post'], '" class="button">';
if (empty($context['event']['new']))
echo '
<input type="submit" name="deleteevent" value="', $txt['event_delete'], '" data-confirm="', $txt['calendar_confirm_delete'], '" class="button you_sure">';
echo '
<input type="hidden" name="', $context['session_var'], '" value="', $context['session_id'], '">
<input type="hidden" name="eventid" value="', $context['event']['eventid'], '">
</div><!-- .roundframe -->
</div><!-- #post_event -->
</form>';
}
function template_bcd()
{
global $context, $scripturl;
$alt = false;
echo '
<table class="table_grid" style="margin: 0 auto 0 auto; border: 1px solid #ccc;">
<tr>
<th class="windowbg" style="font-weight: bold; text-align: center; border-bottom: 1px solid #ccc;" colspan="6">BCD Clock</th>
</tr>
<tr class="windowbg">';
foreach ($context['clockicons'] as $t => $v)
{
echo '
<td style="padding-', $alt ? 'right' : 'left', ': 1.5em;">';
foreach ($v as $i)
echo '
<img src="', $context['offimg'], '" alt="" id="', $t, '_', $i, '"><br>';
echo '
</td>';
$alt = !$alt;
}
echo '
</tr>
<tr class="windowbg" style="border-top: 1px solid #ccc; text-align: center;">
<td colspan="6">
<a href="', $scripturl, '?action=clock;rb">Are you hardcore?</a>
</td>
</tr>
</table>
<script>
var icons = new Object();';
foreach ($context['clockicons'] as $t => $v)
{
foreach ($v as $i)
echo '
icons[\'', $t, '_', $i, '\'] = document.getElementById(\'', $t, '_', $i, '\');';
}
echo '
function update()
{
// Get the current time
var time = new Date();
var hour = time.getHours();
var min = time.getMinutes();
var sec = time.getSeconds();
// Break it up into individual digits
var h1 = parseInt(hour / 10);
var h2 = hour % 10;
var m1 = parseInt(min / 10);
var m2 = min % 10;
var s1 = parseInt(sec / 10);
var s2 = sec % 10;
// For each digit figure out which ones to turn off and which ones to turn on
var turnon = new Array();';
foreach ($context['clockicons'] as $t => $v)
{
foreach ($v as $i)
echo '
if (', $t, ' >= ', $i, ')
{
turnon.push("', $t, '_', $i, '");
', $t, ' -= ', $i, ';
}';
}
echo '
for (var i in icons)
if (!in_array(i, turnon))
icons[i].src = "', $context['offimg'], '";
else
icons[i].src = "', $context['onimg'], '";
window.setTimeout("update();", 500);
}
// Checks for variable in theArray.
function in_array(variable, theArray)
{
for (var i = 0; i < theArray.length; i++)
{
if (theArray[i] == variable)
return true;
}
return false;
}
update();
</script>';
}
function template_hms()
{
global $context, $scripturl;
$alt = false;
echo '
<table class="table_grid" style="margin: 0 auto 0 auto; border: 1px solid #ccc;">
<tr>
<th class="windowbg" style="font-weight: bold; text-align: center; border-bottom: 1px solid #ccc;">Binary Clock</th>
</tr>';
foreach ($context['clockicons'] as $t => $v)
{
echo '
<tr class="windowbg">
<td>';
foreach ($v as $i)
echo '
<img src="', $context['offimg'], '" alt="" id="', $t, '_', $i, '" style="padding: 2px;">';
echo '
</td>
</tr>';
$alt = !$alt;
}
echo '
<tr class="windowbg" style="border-top: 1px solid #ccc; text-align: center;">
<td>
<a href="', $scripturl, '?action=clock">Too tough for you?</a>
</td>
</tr>
</table>';
echo '
<script>
var icons = new Object();';
foreach ($context['clockicons'] as $t => $v)
{
foreach ($v as $i)
echo '
icons[\'', $t, '_', $i, '\'] = document.getElementById(\'', $t, '_', $i, '\');';
}
echo '
function update()
{
// Get the current time
var time = new Date();
var h = time.getHours();
var m = time.getMinutes();
var s = time.getSeconds();
// For each digit figure out which ones to turn off and which ones to turn on
var turnon = new Array();';
foreach ($context['clockicons'] as $t => $v)
{
foreach ($v as $i)
echo '
if (', $t, ' >= ', $i, ')
{
turnon.push("', $t, '_', $i, '");
', $t, ' -= ', $i, ';
}';
}
echo '
for (var i in icons)
if (!in_array(i, turnon))
icons[i].src = "', $context['offimg'], '";
else
icons[i].src = "', $context['onimg'], '";
window.setTimeout("update();", 500);
}
// Checks for variable in theArray.
function in_array(variable, theArray)
{
for (var i = 0; i < theArray.length; i++)
{
if (theArray[i] == variable)
return true;
}
return false;
}
update();
</script>';
}
function template_omfg()
{
global $context;
$alt = false;
echo '
<table class="table_grid" style="margin: 0 auto 0 auto; border: 1px solid #ccc;">
<tr>
<th class="windowbg" style="font-weight: bold; text-align: center; border-bottom: 1px solid #ccc;">OMFG Binary Clock</th>
</tr>';
foreach ($context['clockicons'] as $t => $v)
{
echo '
<tr class="windowbg">
<td>';
foreach ($v as $i)
echo '
<img src="', $context['offimg'], '" alt="" id="', $t, '_', $i, '" style="padding: 2px;">';
echo '
</td>
</tr>';
$alt = !$alt;
}
echo '
</table>
<script>
var icons = new Object();';
foreach ($context['clockicons'] as $t => $v)
{
foreach ($v as $i)
echo '
icons[\'', $t, '_', $i, '\'] = document.getElementById(\'', $t, '_', $i, '\');';
}
echo '
function update()
{
// Get the current time
var time = new Date();
var month = time.getMonth() + 1;
var day = time.getDate();
var year = time.getFullYear();
year = year % 100;
var hour = time.getHours();
var min = time.getMinutes();
var sec = time.getSeconds();
// For each digit figure out which ones to turn off and which ones to turn on
var turnon = new Array();';
foreach ($context['clockicons'] as $t => $v)
{
foreach ($v as $i)
echo '
if (', $t, ' >= ', $i, ')
{
turnon.push("', $t, '_', $i, '");
', $t, ' -= ', $i, ';
}';
}
echo '
for (var i in icons)
if (!in_array(i, turnon))
icons[i].src = "', $context['offimg'], '";
else
icons[i].src = "', $context['onimg'], '";
window.setTimeout("update();", 500);
}
// Checks for variable in theArray.
function in_array(variable, theArray)
{
for (var i = 0; i < theArray.length; i++)
{
if (theArray[i] == variable)
return true;
}
return false;
}
update();
</script>';
}
function template_thetime()
{
global $context;
$alt = false;
echo '
<table class="table_grid" style="margin: 0 auto 0 auto; border: 1px solid #ccc;">
<tr>
<th class="windowbg" style="font-weight: bold; text-align: center; border-bottom: 1px solid #ccc;">The time you requested</th>
</tr>';
foreach ($context['clockicons'] as $v)
{
echo '
<tr class="windowbg">
<td>';
foreach ($v as $i)
echo '
<img src="', $i ? $context['onimg'] : $context['offimg'], '" alt="" style="padding: 2px;">';
echo '
</td>
</tr>';
$alt = !$alt;
}
echo '
</table>';
}
?>