Guest User

Untitled

a guest
May 22nd, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.81 KB | None | 0 0
  1. <?php
  2. /*----------------------------------------
  3. /* Note: For non-English translations to
  4. /* the datepicker, please be sure that
  5. /* the text encoding of this file is set
  6. /* to the "UTF-8" option, if issues arise.
  7. /*--------------------------------------*/
  8.  
  9. //Woo Settings
  10. $woo_calendar_formatting = get_option('woo_calendar_formatting');
  11. $woo_booking_form = get_option('woo_booking_form');
  12. $woo_start_calendar_range = get_option('woo_start_calendar_range');
  13. $woo_end_calendar_range = get_option('woo_end_calendar_range');
  14. $woo_events_category = get_option('woo_events_category');
  15. $woo_events_ical_export = get_option('woo_events_ical_export');
  16. $woo_booking_form_external_url = get_option('woo_booking_form_external_url');
  17. $woo_booking_form_page = get_option('woo_booking_form_page');
  18. $today = date("m\/d\/Y");
  19. ?>
  20. <script type="text/javascript">
  21. jQuery(document).ready(function(){
  22. //JQUERY UI DATEPICKER
  23. if (jQuery('#events_calendar').length) {
  24. var startRangeDate=new Date('<?php echo $woo_start_calendar_range; ?>');
  25. var endRangeDate=new Date('<?php echo $woo_end_calendar_range; ?>');
  26. //CHECK if Calendar has been setup correctly
  27. if (endRangeDate > startRangeDate) {
  28. var defaultDate;
  29. jQuery('#events_calendar').datepicker({
  30. dateFormat: '<?php echo $woo_calendar_formatting; ?>',
  31. minDate: startRangeDate,
  32. maxDate: endRangeDate,
  33. defaultDate: +0,
  34. onSelect: function(dateText, inst) {
  35. showEvents(dateText, inst);
  36. }
  37. });
  38. //Default UpComing Events
  39. showUpcomingEvents();
  40. //highlightEvents();
  41.  
  42. }
  43. else {
  44. jQuery('#message-none').removeClass('hide');
  45. jQuery('#message-none').text('<?php _e('Please setup the event calendar theme options in the backend correctly.', 'woothemes'); ?>');
  46. }
  47.  
  48.  
  49. }
  50.  
  51. jQuery('.add-calendar').each(function(){
  52. jQuery(this).parent().find('ul').hide();
  53. jQuery(this).click(function() {
  54. jQuery(this).parent().find('ul').toggle();
  55. });
  56. jQuery(this).parent().find('ul li').each(function() {
  57. jQuery(this).find('a').click(function() {
  58. jQuery(this).parent().parent().hide();
  59. });
  60. });
  61. });
  62.  
  63.  
  64. });
  65.  
  66. jQuery(document).ready(function(){
  67. //resetCalendarClickers();
  68. });
  69.  
  70. //reset the jquery on month change
  71. function resetCalendarClickers() {
  72.  
  73. //Next Month button
  74. if (jQuery('.ui-datepicker-next').attr('onClick') !== undefined) {
  75. // attribute exists
  76.  
  77. var currentOnClickJS = jQuery('.ui-datepicker-next').attr('onClick');
  78.  
  79. jQuery('.ui-datepicker-next').removeAttr('onclick');
  80.  
  81. jQuery('.ui-datepicker-next').bind('click', function () { DP_jQuery.datepicker._adjustDate('#events_calendar', +1, 'M'); highlightEvents(); } );
  82.  
  83. /*
  84. var currentOnClickJS = jQuery('.ui-datepicker-next').attr('onClick');
  85. currentOnClickJS = currentOnClickJS.toString() + 'highlightEvents();';
  86. jQuery('.ui-datepicker-next').attr('onClick',currentOnClickJS);
  87. */
  88. }
  89. else {
  90. // attribute does not exist
  91.  
  92. }
  93.  
  94. //Previous Month button
  95. if (jQuery('.ui-datepicker-prev').attr('onClick') !== undefined) {
  96. // attribute exists
  97.  
  98. var currentOnClickJS = jQuery('.ui-datepicker-prev').attr('onClick');
  99.  
  100. jQuery('.ui-datepicker-prev').removeAttr('onclick');
  101.  
  102. jQuery('.ui-datepicker-prev').bind('click', function () { DP_jQuery.datepicker._adjustDate('#events_calendar', -1, 'M'); highlightEvents(); } );
  103.  
  104. /*
  105. var currentOnClickJS = jQuery('.ui-datepicker-prev').attr('onClick');
  106. currentOnClickJS = currentOnClickJS.toString() + 'highlightEvents();';
  107. jQuery('.ui-datepicker-prev').attr('onClick',currentOnClickJS);
  108. */
  109. }
  110. else {
  111. // attribute does not exist
  112. }
  113.  
  114. jQuery('.ui-datepicker-calendar a.ui-state-default').each(function (){
  115.  
  116. if (jQuery(this).parent().attr('onClick') !== undefined) {
  117. // attribute exists
  118.  
  119. var currentOnClickJS = jQuery(this).parent().attr('onClick');
  120. var functionData = currentOnClickJS.toString().split(',');
  121.  
  122. var monthNum = functionData[1];
  123. var yearNum = functionData[2];
  124.  
  125. jQuery(this).parent().removeAttr('onclick');
  126.  
  127. jQuery(this).parent().bind('click', function () {
  128.  
  129. DP_jQuery.datepicker._selectDay('#events_calendar',monthNum,yearNum, this);
  130. highlightEvents();
  131. return false;
  132.  
  133. } );
  134. /*
  135. var currentOnClickJS = jQuery(this).parent().attr('onClick');
  136. var strcurrentOnClickJS = currentOnClickJS.toString();
  137. var brokenstring = strcurrentOnClickJS.split(';');
  138.  
  139. var stringpart1 = brokenstring[0];
  140. var stringpart2 = brokenstring[1];
  141.  
  142. strcurrentOnClickJS = stringpart1.toString() + ';highlightEvents();' + stringpart2.toString() + ';';
  143. jQuery(this).parent().attr('onClick',strcurrentOnClickJS);
  144. */
  145. }
  146. else {
  147. // attribute does not exist
  148. }
  149. });
  150.  
  151.  
  152. resetCalendarDayClickers();
  153.  
  154. }
  155.  
  156. function resetCalendarDayClickers() {
  157. jQuery('.ui-datepicker-calendar a.ui-state-default').each(function (){
  158.  
  159. if ((jQuery(this).hasClass('ui-state-highlight')) || (jQuery(this).hasClass('ui-state-active'))) {
  160. //Remove href attribute
  161. jQuery(this).removeAttr('href');
  162. }
  163. else {
  164. jQuery(this).parent().addClass('ui-datepicker-unselectable ui-state-disabled');
  165. jQuery(this).removeAttr('href');
  166. }
  167.  
  168. if ((jQuery(this).hasClass('ui-state-highlight')) && (jQuery(this).parent().hasClass('ui-datepicker-today'))) {
  169. //check if has events for todays date
  170. var currentDate = new Date('<?php echo $today ?>');
  171. var datepickermonth = jQuery('span.ui-datepicker-month').text();
  172. var datepickeryear = jQuery('span.ui-datepicker-year').text();
  173. var hasevents = false;
  174.  
  175. jQuery('#events-calendar div.event').each(function (){
  176. var startDateRaw = jQuery(this).find('p.date span.startdate').text();
  177. var startDate = new Date(startDateRaw);
  178. //Check for End Date
  179. if (jQuery(this).find('p.date span.enddate').text().length) {
  180.  
  181. var endDateRaw = jQuery(this).find('p.date span.enddate').text();
  182. var endDate = new Date(endDateRaw);
  183.  
  184. date1 = currentDate;
  185. date2 = startDate;
  186. date3 = endDate;
  187.  
  188. if ( (date1.valueOf() >= date2.valueOf()) && (date1.valueOf() <= date3.valueOf()) ) {
  189. hasevents = true;
  190. }
  191. else {
  192. //Do Nothing
  193. }
  194.  
  195. }
  196. else {
  197.  
  198. date1 = currentDate;
  199. date2 = startDate;
  200. if (date1.valueOf() == date2.valueOf()) {
  201. hasevents = true;
  202. }
  203. else {
  204. //Do Nothing
  205. }
  206. }
  207.  
  208. });
  209.  
  210. //Check if has events for today
  211. if (hasevents) {
  212. //Do Not remove highlighting
  213. jQuery(this).removeClass('ui-state-hover');
  214. }
  215. else {
  216. //Remove highlighting from today
  217. jQuery(this).parent().addClass('ui-datepicker-unselectable ui-state-disabled');
  218. jQuery(this).removeClass('ui-state-highlight');
  219. }
  220.  
  221. }
  222.  
  223. });
  224. }
  225.  
  226. //Highlights all event dates in the calendar
  227. function highlightEvents() {
  228.  
  229. var eventDates=new Array();
  230. //Iterate through all the events
  231. jQuery('#events-calendar div.event').each(function (){
  232. //Add start date to the array
  233. var startDateRaw = jQuery(this).find('p.date span.startdate').text();
  234. var startDate = new Date(startDateRaw);
  235. var startDay = startDate.getDate();
  236. var startMonth = startDate.getMonth();
  237. var startYear = startDate.getFullYear();
  238. eventDates.push(startYear + '/' + (startMonth + 1) + '/' + startDay);
  239. //Add end date to the array
  240. if (jQuery(this).find('p.date span.enddate').text().length) {
  241. var endDateRaw = jQuery(this).find('p.date span.enddate').text();
  242. var endDate = new Date(endDateRaw);
  243. var endDay = endDate.getDate();
  244. var endMonth = endDate.getMonth();
  245. var endYear = endDate.getFullYear();
  246. eventDates.push(endYear + '/' + (endMonth + 1) + '/' + endDay);
  247.  
  248. date1 = endDate;
  249. date2 = startDate;
  250. while (date1 > date2)
  251. {
  252.  
  253. date2.setDate(date2.getDate()+1);
  254. // The number of milliseconds in one day
  255. var ONE_DAY = 1000 * 60 * 60 * 24;
  256. // Convert both dates to milliseconds
  257. var date1_ms = endDate.getTime();
  258. var date2_ms = startDate.getTime();
  259. // Calculate the difference in milliseconds
  260. var difference_ms = Math.abs(date1_ms - date2_ms);
  261. // Convert back to days and return
  262. var daysInBetween = Math.round(difference_ms/ONE_DAY);
  263. //Add date to the array
  264. var date2Day = date2.getDate();
  265. var date2Month = date2.getMonth();
  266. var date2Year = date2.getFullYear();
  267. eventDates.push(date2Year + '/' + (date2Month + 1) + '/' + date2Day);
  268.  
  269. }
  270. }
  271.  
  272.  
  273.  
  274. });
  275.  
  276. //Sort the events data
  277. var sortedEvents = arrayUnique(eventDates.sort());
  278. //alert(sortedEvents);
  279.  
  280. var currentDate = new Date(jQuery('#events_calendar').datepicker('getDate'));
  281. var calendarYear = jQuery('span.ui-datepicker-year').text();
  282. var calendarMonth = jQuery('span.ui-datepicker-month').text();
  283. //jQuery('a.ui-state-default');
  284. //alert(calendarMonth);
  285. //alert ( currentDate );
  286. //Iterate through all the calendar dates
  287.  
  288. for (x in sortedEvents)
  289. {
  290. var eventItem =sortedEvents[x];
  291. var streventItem = eventItem.toString();
  292. var brokenstring = streventItem.split('/');
  293.  
  294. var eventYear = brokenstring[0];
  295. var eventMonth = brokenstring[1];
  296. var eventDay = brokenstring[2];
  297.  
  298. //alert(typeof eventMonth);
  299.  
  300. switch(eventMonth)
  301. {
  302. case '1':
  303. eventMonth = '<?php _e('January', 'woothemes') ?>';
  304. break;
  305. case '2':
  306. eventMonth = '<?php _e('February', 'woothemes') ?>';
  307. break;
  308. case '3':
  309. eventMonth = '<?php _e('March', 'woothemes') ?>';
  310. break;
  311. case '4':
  312. eventMonth = '<?php _e('April', 'woothemes') ?>';
  313. break;
  314. case '5':
  315. eventMonth = '<?php _e('May', 'woothemes') ?>';
  316. break;
  317. case '6':
  318. eventMonth = '<?php _e('June', 'woothemes') ?>';
  319. break;
  320. case '7':
  321. eventMonth = '<?php _e('July', 'woothemes') ?>';
  322. break;
  323. case '8':
  324. eventMonth = '<?php _e('August', 'woothemes') ?>';
  325. break;
  326. case '9':
  327. eventMonth = '<?php _e('September', 'woothemes') ?>';
  328. break;
  329. case '10':
  330. eventMonth = '<?php _e('October', 'woothemes') ?>';
  331. break;
  332. case '11':
  333. eventMonth = '<?php _e('November', 'woothemes') ?>';
  334. break;
  335. case '12':
  336. eventMonth = '<?php _e('December', 'woothemes') ?>';
  337. break;
  338. default:
  339. eventMonth = '<?php _e('January', 'woothemes') ?>';
  340. }
  341.  
  342. // Check against the month and the year, not just against the month.
  343.  
  344. if ( ( eventMonth == calendarMonth ) && ( eventYear == calendarYear ) ) {
  345.  
  346. jQuery('.ui-datepicker-calendar a.ui-state-default').each(function (){
  347. var calendarDay = jQuery(this).text();
  348. //alert(jQuery(this).text());
  349. //alert (typeof calendarDay);
  350. //alert (typeof eventDay);
  351. if (calendarDay == eventDay) {
  352. jQuery(this).addClass('ui-state-highlight');
  353. }
  354. else {
  355. //jQuery(this).parent().removeAttr('onClick');
  356. }
  357.  
  358. });
  359.  
  360. }
  361. }
  362.  
  363.  
  364. //Add highlight class to the calendar dates that match the events
  365. resetCalendarClickers();
  366. }
  367.  
  368. //Removes duplicate Array values
  369. function arrayUnique(arrayName) {
  370. var a = [];
  371. var l = arrayName.length;
  372. for(var i=0; i<l; i++) {
  373. for(var j=i+1; j<l; j++) {
  374. // If arrayName[i] is found later in the array
  375. if (arrayName[i] === arrayName[j])
  376. j = ++i;
  377. }
  378. a.push(arrayName[i]);
  379. }
  380. return a;
  381. }
  382.  
  383. //Hides all event items from view
  384. function hideAllEvents() {
  385.  
  386. jQuery('#events-calendar div.event-outer').each(function (){
  387. if (jQuery(this).hasClass('hide')) {
  388. //DO NOTHING
  389. }
  390. else {
  391. jQuery(this).addClass('hide');
  392. }
  393. });
  394.  
  395. }
  396.  
  397. //Displays relevant event items
  398. function showEvents(dateText, inst) {
  399.  
  400. var dateCalendar = new Date(dateText);
  401. //Prepare events
  402. hideAllEvents();
  403. //alert(dateCalendar);
  404. var globalcount = 0;
  405. //Iterate through event items
  406. jQuery('#events-calendar div.event p.date span.startdate').each(function (){
  407. var rawDateEvent = jQuery(this).text();
  408. var dateEvent = new Date(rawDateEvent);
  409. var eventEndDateRaw = jQuery(this).parent().find('span.enddate').text();
  410. var eventEndDate = new Date(eventEndDateRaw);
  411.  
  412.  
  413. //Compare dates
  414. if (dateEvent.valueOf() == dateCalendar.valueOf()) {
  415. if (jQuery(this).parent().parent().parent().hasClass('hide')) {
  416. jQuery(this).parent().parent().parent().removeClass('hide');
  417. globalcount++;
  418. }
  419. else {
  420. //DO NOTHING
  421. }
  422. }
  423. else if (eventEndDateRaw !== undefined) {
  424. //alert('test');
  425. if ((dateCalendar.valueOf() > dateEvent.valueOf()) && (dateCalendar.valueOf() <= eventEndDate.valueOf())) {
  426. if (jQuery(this).parent().parent().parent().hasClass('hide')) {
  427. jQuery(this).parent().parent().parent().removeClass('hide');
  428. globalcount++;
  429. }
  430. else {
  431. //DO NOTHING
  432. }
  433. }
  434. }
  435. else {
  436. //DO NOTHING
  437. }
  438.  
  439. });
  440.  
  441. //Validation Message Output
  442. if (globalcount == 0) {
  443. showNoEvents();
  444. }
  445. else {
  446. if (jQuery('#message-none').hasClass('hide')) {
  447. //DO NOTHING
  448. }
  449. else {
  450. jQuery('#message-none').addClass('hide');
  451. }
  452.  
  453. if (jQuery('#message-upcoming').hasClass('hide')) {
  454. //DO NOTHING
  455. }
  456. else {
  457. jQuery('#message-upcoming').addClass('hide');
  458. }
  459.  
  460. }
  461. //alert(jQuery('#calendar h2 span').text());
  462. var selectedDate = jQuery('#events_calendar').datepicker('getDate');
  463. var selectedMonth = monthText(selectedDate);
  464. jQuery('#calendar h2 span').text(selectedMonth);
  465. highlightEvents();
  466. }
  467.  
  468. //Returns Month Name in text format
  469. function monthText(dateText) {
  470. var d=new Date(dateText);
  471. var month=new Array(12);
  472. month[0]="<?php _e('January', 'woothemes') ?>";
  473. month[1]="<?php _e('February', 'woothemes') ?>";
  474. month[2]="<?php _e('March', 'woothemes') ?>";
  475. month[3]="<?php _e('April', 'woothemes') ?>";
  476. month[4]="<?php _e('May', 'woothemes') ?>";
  477. month[5]="<?php _e('June', 'woothemes') ?>";
  478. month[6]="<?php _e('July', 'woothemes') ?>";
  479. month[7]="<?php _e('August', 'woothemes') ?>";
  480. month[8]="<?php _e('September', 'woothemes') ?>";
  481. month[9]="<?php _e('October', 'woothemes') ?>";
  482. month[10]="<?php _e('November', 'woothemes') ?>";
  483. month[11]="<?php _e('December', 'woothemes') ?>";
  484. var formattedDate = month[d.getMonth()];
  485. return formattedDate;
  486. }
  487.  
  488. //Shows error messages
  489. function showNoEvents() {
  490.  
  491. if (jQuery('#message-none').hasClass('hide')) {
  492. jQuery('#message-none').removeClass('hide');
  493. }
  494. else {
  495. //DO NOTHING
  496. }
  497.  
  498. if (jQuery('#message-upcoming').hasClass('hide')) {
  499. //DO NOTHING
  500. }
  501. else {
  502. jQuery('#message-upcoming').addClass('hide');
  503. }
  504.  
  505. }
  506.  
  507. //Shows Upcoming Events
  508. function showUpcomingEvents() {
  509.  
  510. var count = 0;
  511. var nextDate;
  512.  
  513. var currentDate = new Date(jQuery('#events_calendar').datepicker('getDate'));
  514.  
  515. //Iterate through event items
  516. jQuery('#events-calendar div.event p.date span.startdate').each(function (){
  517. var dateEvent = new Date(jQuery(this).text())
  518. var rawDateEvent = jQuery(this).text();
  519. var rawDateEnd = jQuery(this).parent().find('span.enddate').text();
  520.  
  521. //check if there isnt an end date for this event
  522. if (rawDateEnd == '') {
  523. var dateEnd = '';
  524. }
  525. else {
  526. var dateEnd = new Date(rawDateEnd);
  527. }
  528.  
  529. //check if end date is defined
  530. if (dateEnd != '') {
  531. //if event start or end date equals todays date
  532. if ( (dateEvent.valueOf() == currentDate.valueOf()) || (dateEnd.valueOf() == currentDate.valueOf()) ) {
  533. nextDate = dateEvent;
  534. }
  535. else {
  536. // if start date less than todays date and end date great than todays date
  537. if ( (dateEvent.valueOf() <= currentDate.valueOf()) && (dateEnd.valueOf() >= currentDate.valueOf()) ) {
  538.  
  539. if (nextDate == undefined) {
  540. nextDate = dateEvent;
  541.  
  542. }
  543. }
  544. else {
  545.  
  546. //Default comparison
  547. if ( dateEvent.valueOf() >= currentDate.valueOf() ) {
  548.  
  549. if (nextDate == undefined) {
  550.  
  551. nextDate = dateEvent;
  552. }
  553. }
  554. }
  555. }
  556. }
  557. else {
  558.  
  559. //if event start date equals todays date
  560. if ( dateEvent.valueOf() == currentDate.valueOf() ) {
  561. nextDate = dateEvent;
  562. }
  563. else {
  564. //Default comparison
  565. if ( dateEvent.valueOf() >= currentDate.valueOf() ) {
  566. if (nextDate == undefined) {
  567. nextDate = dateEvent;
  568. }
  569. }
  570. }
  571. }
  572.  
  573.  
  574. });
  575. if (nextDate == undefined) {
  576.  
  577. //throw error
  578. var enddate = jQuery('#events-calendar div.event p.date span.enddate:last').text();
  579. if (enddate == '') {
  580. enddate = jQuery('#events-calendar div.event p.date span.startdate:last').text()
  581. }
  582. nextDate = new Date(enddate);
  583. //Set calendar date and show events
  584. //alert(nextDate);
  585. jQuery('#events_calendar').datepicker('setDate', nextDate );
  586. var inst = 0;
  587. showEvents(nextDate, inst);
  588.  
  589. } else {
  590.  
  591. //Set calendar date and show events
  592. jQuery('#events_calendar').datepicker('setDate', nextDate );
  593. var inst = 0;
  594. showEvents(nextDate, inst);
  595. }
  596. }
  597.  
  598. //Display the next set of events on a date
  599. function nextEventDate() {
  600.  
  601. var count = 0;
  602. var nextDate;
  603.  
  604. var currentDate = new Date(jQuery('#events_calendar').datepicker('getDate'));
  605. //Iterate through event items
  606. jQuery('#events-calendar div.event p.date span.startdate').each(function (){
  607. var dateEvent = new Date(jQuery(this).text())
  608. var rawDateEvent = jQuery(this).text();
  609. //Compare dates
  610. if (dateEvent > currentDate) {
  611. if (nextDate == undefined) {
  612. nextDate = dateEvent;
  613. }
  614. }
  615. });
  616. //If no event found for criteria
  617. if (nextDate == undefined) {
  618. //Iterate through event items from earliest
  619. jQuery('#events-calendar div.event p.date span.startdate').each(function (){
  620. var dateEvent = new Date(jQuery(this).text())
  621. var rawDateEvent = jQuery(this).text();
  622. //Get the first event item in the list
  623. if (count == 0) {
  624. if (dateEvent < currentDate) {
  625. nextDate = dateEvent;
  626. count++;
  627. }
  628. else {
  629. //DO NOTHING
  630. }
  631. }
  632. });
  633. }
  634. else {
  635. //DO NOTHING
  636. }
  637.  
  638. if (nextDate == undefined) {
  639. var enddate = jQuery('#events-calendar div.event p.date span.enddate:last').text();
  640. if (enddate == '') {
  641. enddate = jQuery('#events-calendar div.event p.date span.startdate:last').text()
  642. }
  643. nextDate = new Date(enddate);
  644. }
  645. //Set calendar date and show events
  646. jQuery('#events_calendar').datepicker('setDate', nextDate );
  647. var inst = 0;
  648. showEvents(nextDate, inst);
  649. highlightEvents();
  650. }
  651.  
  652. //Display the previous set of events on a date
  653. function previousEventDate() {
  654.  
  655. var count = 0;
  656. var nextDate;
  657.  
  658. var currentDate = new Date(jQuery('#events_calendar').datepicker('getDate'));
  659. //Iterate through event items
  660. jQuery('#events-calendar div.event p.date span.startdate').each(function (){
  661. var dateEvent = new Date(jQuery(this).text())
  662. var rawDateEvent = jQuery(this).text();
  663. //Compare dates
  664. if (dateEvent < currentDate) {
  665. nextDate = dateEvent;
  666. }
  667. });
  668. //If no event found for criteria
  669. if (nextDate == undefined) {
  670. //Iterate through event items from earliest
  671. jQuery('#events-calendar div.event p.date span.startdate').each(function (){
  672. var dateEvent = new Date(jQuery(this).text())
  673. var rawDateEvent = jQuery(this).text();
  674. //Compare dates until last event found
  675. if (dateEvent > currentDate) {
  676. nextDate = dateEvent;
  677. }
  678. else {
  679. //DO NOTHING
  680. }
  681. });
  682. }
  683. else {
  684. //DO NOTHING
  685. }
  686.  
  687. if (nextDate == undefined) {
  688. var enddate = jQuery('#events-calendar div.event p.date span.enddate:last').text();
  689. if (enddate == '') {
  690. enddate = jQuery('#events-calendar div.event p.date span.startdate:last').text()
  691. }
  692. nextDate = new Date(enddate);
  693. }
  694. //Set calendar date and show events
  695. jQuery('#events_calendar').datepicker('setDate', nextDate );
  696. var inst = 0;
  697. showEvents(nextDate, inst);
  698. highlightEvents();
  699. }
  700. </script>
  701. <?php if ($woo_booking_form == 'disabled') { ?>
  702. <style type="text/css">
  703. #events-calendar .event .buttons ul li.tip {
  704. left:18% !important;
  705. }
  706. </style>
  707. <?php } ?>
  708. <div id="events-calendar-outer">
  709.  
  710. <div id="events-calendar">
  711.  
  712. <div id="calendar" class="fl">
  713.  
  714. <h2><?php _e('Upcoming events in ', 'woothemes') ?><span><?php _e('November', 'woothemes') ?></span></h2>
  715. <div id="events_calendar"></div>
  716. <p class="months">
  717. <span class="fl"><a class="button" onclick="previousEventDate()"><?php _e('Previous Event', 'woothemes') ?></a></span>
  718. <span class="fr"><a class="button" onclick="nextEventDate()"><?php _e('Next Event', 'woothemes') ?></a></span>
  719. </p>
  720.  
  721. </div><!-- /#calendar -->
  722. <?php $js_formatting = stripslashes($woo_calendar_formatting); ?>
  723. <?php
  724. switch ($js_formatting) {
  725. /*case "mm/dd/yy" :
  726. $php_formatting = "m\/d\/Y";
  727. break;
  728. case "yy-mm-dd" :
  729. $php_formatting = "Y\-m\-d";
  730. break;
  731. case "d M, y" :
  732. $php_formatting = "d M, Y";
  733. break;
  734. case "d MM, y" :
  735. $php_formatting = "d F Y";
  736. break;
  737. case "DD, d MM, yy" :
  738. $php_formatting = "l, d F, Y";
  739. break;
  740. case "'day' d 'of' MM 'in the year' yy" :
  741. $php_formatting = "\\d\a\y d \\o\\f F \\i\\n \\t\h\e \\y\e\a\\r Y";
  742. break;*/
  743. default :
  744. $php_formatting = "d\/m\/Y";
  745. break;
  746. } ?>
  747. <?php $category_id = get_cat_ID( $woo_events_category ); ?>
  748.  
  749. <?php
  750. //Improved Diarise get events query
  751. $query_args['cat'] = $category_id;
  752. $query_args['showposts'] = -1;
  753. $query_args['status'] = 'publish';
  754. $num_events = get_option('woo_upcoming_events');
  755. $time_now = strtotime('now');
  756. $the_query = new WP_Query($query_args);
  757. $search_results = array();
  758. if ($the_query->have_posts()) : $count = 0;
  759.  
  760. while ($the_query->have_posts()) : $the_query->the_post();
  761. //add post to array
  762. global $post;
  763. $event_start_date = get_post_meta($post->ID,'event_start_date',true);
  764. $event_end_date = get_post_meta($post->ID,'event_end_date',true);
  765. if ($event_end_date == '') { $event_end_date = $event_start_date; }
  766.  
  767. if ( ( $event_start_date != '' ) && ( $event_end_date != '' ) ) {
  768.  
  769. $time_start = strtotime($event_start_date);
  770. $time_end = strtotime($event_end_date);
  771. $start_range = strtotime($woo_start_calendar_range);
  772. $end_range = strtotime($woo_end_calendar_range);
  773.  
  774. if ( ( ( $time_start <= $start_range ) && ( $time_end >= $start_range ) ) || ( ( $time_start >= $start_range ) && ( $time_end <= $end_range ) ) || ( ( $time_start <= $end_range ) && ( $time_end >= $end_range ) ) ) {
  775. $search_results[$post->ID] = array( 'ID' => $post->ID , 'start' => $time_start , 'end' => $time_end );
  776. }
  777. }
  778.  
  779. endwhile; else:
  780. //no posts
  781. endif;
  782.  
  783. function woo_compare_date_fields($a, $b) {
  784. $retval = strnatcmp($a['start'], $b['start']);
  785. if(!$retval) {
  786. return strnatcmp($a['end'], $b['end']);
  787. }
  788. return $retval;
  789. }
  790. //sort alphabetically by start and end
  791. usort($search_results, 'woo_compare_date_fields');
  792.  
  793. $counter = 0;
  794. $event_results = array();
  795. foreach ($search_results as $search_result) {
  796.  
  797. if ( $counter < $num_events ) { // Removed the '=' to correct the event display count, due to zero-indexed array.
  798. array_push($event_results,$search_result['ID']);
  799. $counter++;
  800. }
  801.  
  802. }
  803.  
  804. $array_counter = count($event_results);
  805. if ( $array_counter > 0 ) {
  806. $query_args['post__in'] = $event_results;
  807. $has_results = true;
  808.  
  809. } else {
  810. $has_results = false;
  811. }
  812. ?>
  813. <?php
  814. foreach ($event_results as $event_result) {
  815.  
  816. $query_args['post__in'] = array($event_result);
  817. ?>
  818. <?php query_posts($query_args); ?>
  819. <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
  820. <?php
  821. //Post Meta
  822. $event_start_date = get_post_meta($post->ID,'event_start_date',true);
  823. $event_end_date = get_post_meta($post->ID,'event_end_date',true);
  824. $event_start_time = get_post_meta($post->ID,'event_start_time',true);
  825. $event_end_time = get_post_meta($post->ID,'event_end_time',true);
  826. $event_location = get_post_meta($post->ID,'event_location',true);
  827. $maps_active = get_post_meta($post->ID,'woo_maps_enable',true);
  828. //Change this to whatever you want your custom date output format to be.
  829. $custom_formatting = $php_formatting;
  830. ?>
  831. <?php if ( ((strtotime($event_start_date)) >= (strtotime($woo_start_calendar_range))) && ((strtotime($event_start_date)) <= (strtotime($woo_end_calendar_range))) ) { ?>
  832. <div class="event-outer fr hide">
  833.  
  834. <div class="event">
  835. <?php woo_get_image('image',$GLOBALS['feat_w'],$GLOBALS['feat_h'],'thumbnail '.$GLOBALS['feat_align']); ?>
  836. <p class="date">
  837. <span class="startdate hide"><?php echo date($php_formatting,strtotime($event_start_date)); ?></span>
  838. <span class="enddate hide"><?php if ( (date($php_formatting,strtotime($event_end_date))) > (date($php_formatting,strtotime($event_start_date))) ) { ?> - <?php echo date($php_formatting,strtotime($event_end_date)); } ?></span>
  839. <span class="startdateoutput"><?php echo date($custom_formatting,strtotime($event_start_date)); ?></span>
  840. <span class="enddateoutput"><?php if ( (date($php_formatting,strtotime($event_end_date))) > (date($php_formatting,strtotime($event_start_date))) ) { ?> - <?php echo date($custom_formatting,strtotime($event_end_date)); } ?></span>
  841. </p>
  842.  
  843. <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
  844.  
  845. <?php if ($woo_booking_form == 'disabled' && $woo_events_ical_export == 'false') { } else { ?>
  846. <div class="buttons">
  847. <?php if ($woo_booking_form == 'disabled') { } else { ?>
  848. <a href="<?php if ($woo_booking_form == 'bookingurl') { echo $woo_booking_form_external_url; } else { echo get_bloginfo('url').'/'.$woo_booking_form_page.'/?event_id='.$post->ID; } ?>" class="button book-tickets"><?php _e('Book Tickets', 'woothemes'); ?></a>
  849. <?php } ?>
  850. <?php if ($woo_events_ical_export == 'true') { ?>
  851. <a onclick="" class="button add-calendar"><?php _e('Add to Calendar', 'woothemes'); ?></a>
  852. <?php $icalurl = woo_get_ical($post->ID,$php_formatting); ?>
  853. <ul>
  854. <li class="outlook"><a href="<?php echo get_bloginfo('template_url'); ?>/download.php?calendar=<?php echo $icalurl['ical']; ?>" title="Microsoft Outlook">Microsoft Outlook</a></li>
  855. <li class="ical"><a href="<?php echo get_bloginfo('template_url'); ?>/download.php?calendar=<?php echo $icalurl['ical']; ?>" title="Apple iCal">Apple iCal</a></li>
  856. <li class="google"><a href="<?php echo $icalurl['google']; ?>" target="_blank" title="Google Calendar">Google Calendar</a></li>
  857. <li class="tip">&nbsp;</li>
  858. </ul>
  859.  
  860. <?php } ?>
  861. </div>
  862. <?php } ?>
  863.  
  864. <?php the_excerpt(); ?>
  865.  
  866. <?php if ( $event_location ) { ?><span><?php _e('Location', 'woothemes'); ?> : </span><?php if ($maps_active == 'on') { ?><a href="<?php the_permalink() ?>#eventlocation"><?php echo $event_location; ?></a><?php } else { ?><span><?php echo $event_location; ?></span><?php } ?><?php } ?>
  867. <div class="fix"></div>
  868.  
  869. </div><!-- /#event -->
  870.  
  871. </div><!-- /#event-outer -->
  872. <?php } ?>
  873. <?php endwhile; endif; ?>
  874. <?php } // End FOREACH Loop ?>
  875. <div id="message-none" class="hide">
  876. <p><?php _e('There are no events for this date.', 'woothemes') ?></p>
  877. </div><!-- /#message -->
  878. <div id="message-upcoming" class="hide">
  879. <p><?php _e('There are no upcoming events.', 'woothemes') ?></p>
  880. </div><!-- /#message -->
  881. <div class="fix"></div>
  882.  
  883. </div><!-- /#events-calendar -->
  884.  
  885. </div><!-- /#events-calendar-outer -->
Add Comment
Please, Sign In to add comment