• Resolved dr_blue

    (@dr_blue)


    So I’ve identified a problem with the Event Calendar Widget. If you have enabled the option to show long events, the query from the Calendar Widget modifies the data start-date stored for the event in wp_cache.

    Example: I have an event that spans 2013-10-29 to 2013-10-31. The first call to eo_get_the_occurrences_of(17091) does a database query and returns the correct date.

    The next call to the same function with the same ID correctly returns the data from the cache, with the correct start_date (2013-10-29).

    However, the third call (the second to the cache) returns 2013-11-01 as start-date, still for the same event with the same event id (17091).

    In my template, the sidebar is called before the loop, so the Event Calendar Widget is the responsible function for these first eo_get_the_occurrences_of-queries.
    If I disable the widget, the start-date never is modified and the loop displays the correct start-date. I have from my loop done several (repeatedly) calls to eo_get_the_occurrences_of to the same ID but the start-date stays the same, unmodified.

    It is my conclusion that some code in the Event Calendar Widget gets the cache by reference or compares a hash against the stored cache-hash and does a faulty update of the cache when the event spans more than one day.

    I have yet to look at the widget code to verify this, but something happens there.

    http://wordpress.org/plugins/event-organiser/

Viewing 5 replies - 1 through 5 (of 5 total)
  • Thread Starter dr_blue

    (@dr_blue)

    Also, an update of the core to 3.7 doesn’t seem to solve the problem. I have yet to verify this but there seems to be no bugs reported regarding the wp_cache_get/wp_cache_set-functions for this release.

    Plugin Author Stephen Harris

    (@stephenharris)

    Hi dr_blue,

    Can you clarify the steps to reproduce this? Is this right:

    • Create event spanning multiple days
    • Add calendar widget and select to show long days
    • VIew (any?) event(s) page
    • Dates of events are not correct

    (Where the sidebar is called before the main content).

    I’ll look into this – I’m fairly sure you’re spot on withs. Should be easy to fix though

    Thread Starter dr_blue

    (@dr_blue)

    Hi Stephen,

    thank you for checking in. Yes the steps are correct. I’m browsing archive-event.php when getting this error.

    See this screenshot where the first top-most event says “1 november” but in the widget it’s marked 29-31 october (which is what I configured the event to be).

    http://i.imgur.com/n0FS5Rn.png

    I’m currently in class-eo-calendar-widget.php debugging but I can’t find any obvious errors. You have a foreach-loop in generate_output on line 220 and below where you loop over the events and set up multiday but it’s only a single call to $start = eo_get_the_start and that function doesn’t return anything by reference so I can’t really see that it would update the cache with wrong info.

    Perhaps you see it more clearly :).

    Plugin Author Stephen Harris

    (@stephenharris)

    Yeah its an oversight on my part: Object variables contain an identifier as their value, and this is passed around by functions. So the returned object is pointing to the same thing as the object in the cache. (http://php.net/manual/en/language.oop5.references.php).

    There’s a summary and fix here: https://github.com/stephenharris/Event-Organiser/issues/159 (feel free to verify it does actually fix the issue!).

    Thanks for your help in debugging this!

    Thread Starter dr_blue

    (@dr_blue)

    Ah of course. The cloning in commit e2e50c0 works perfectly.

    Thanks Stephen!

Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘Event that spans more than one day gets wrong startdate’ is closed to new replies.