Viewing 6 replies - 1 through 6 (of 6 total)
  • – I’m having the same problem, but with 1 January 1970 as the “default” date.
    – Also, when sync, the event is created twice.
    – Another (but “minor”) bug is that the facebook adress is transformed to the “name of the place” field. (I don’t know how its called in the english version. It’s named “recinte” in catalan)

    A temporary solution could be just to sync all the events as draft, so I can review them manually before publishing. Is that easy?

    Thank you a lot.

    my wordpress: http://espai.casaldejoves.org/agenda/
    my fb page: https://www.facebook.com/CasalsDeJovesDeCatalunya/events

    in:
    /wp-content/plugins/sync-facebook-events/sync-facebook-events.php

    replace lines 127 – 141:

    $offset = get_option('gmt_offset')*3600;
    
    		$offsetStart = $event['start_time']+$offset;
    		$offsetEnd = $event['end_time']+$offset;
    
    		//don't update or insert events from the past.
    		if($offsetEnd > time()) {
    
    			$args['EventStartDate'] = date("m/d/Y", $offsetStart);
    			$args['EventStartHour'] = date("H", $offsetStart);
    			$args['EventStartMinute'] = date("i", $offsetStart);
    
    			$args['EventEndDate'] = date("m/d/Y", $offsetEnd);
    			$args['EventEndHour'] = date("H", $offsetEnd);
    			$args['EventEndMinute'] = date("i", $offsetEnd);

    to:

    $dataInicio = date("U",strtotime($event['start_time']));
    		$dataFinal = date("U",strtotime($event['end_time']));
    
    		//don't update or insert events from the past.
    		if($dataInicio > time()) {
    
    			$args['EventStartDate'] = date("m/d/Y", $dataInicio);
    			$args['EventStartHour'] = date("H", $dataInicio);
    			$args['EventStartMinute'] = date("i", $dataInicio);
    
    			$args['EventEndDate'] = date("m/d/Y", $dataFinal);
    			$args['EventEndHour'] = date("H", $dataFinal);
    			$args['EventEndMinute'] = date("i", $dataFinal);

    Abraços 😉

    I dont know if its the wordpress 3.0 update or some of my coding, but its not working at all now, neither the original or the proposed.
    I’m leaving this function deactivated by now 🙁

    It’s working in wordpress 3.5 for me

    <?php
    /*
    Plugin Name: Sync Facebook Events
    Plugin URI: http://pdxt.com
    Description: Sync Facebook Events to The Events Calendar Plugin
    Author: Mark Nelson
    Version: 1.0.6
    Author URI: http://pdxt.com
    */
    
    /*  Copyright 2012 PDX Technologies, LLC. (mark.nelson@pdxt.com)
    
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    */
    
    register_activation_hook(__FILE__,'activate_fbes');
    register_deactivation_hook(__FILE__,'deactivate_fbes');
    function activate_fbes() { wp_schedule_event(time(), 'daily', 'fbes_execute_sync'); }
    function deactivate_fbes() { wp_clear_scheduled_hook('fbes_execute_sync'); }
    add_action('fbes_execute_sync', 'fbes_process_events');
    
    function update_schedule($fbes_frequency) {
    
    		wp_clear_scheduled_hook('fbes_execute_sync');
    		wp_schedule_event(time(), $fbes_frequency, 'fbes_execute_sync');
    }
    
    function fbes_add_page() { add_options_page('Sync FB Events', 'Sync FB Events', 8, __FILE__, 'fbes_options_page'); }
    add_action('admin_menu', 'fbes_add_page');
    
    function fbes_process_events() {
    
    	#Get option values
    	$fbes_api_key = get_option('fbes_api_key');
    	$fbes_api_secret = get_option('fbes_api_secret');
    	$fbes_api_uid = get_option('fbes_api_uid');
    	$fbes_api_uids = get_option('fbes_api_uids');
    	$fbes_frequency = get_option('fbes_frequency');
    
    	$events = fbes_get_events($fbes_api_key, $fbes_api_secret, $fbes_api_uids);
    	fbes_send_events($events);
    }
    
    function fbes_get_events($fbes_api_key, $fbes_api_secret, $fbes_api_uids) {
    
    	require 'facebook.php';
    
    	$facebook = new Facebook(array(
    		'appId'  =>  $fbes_api_key,
    		'secret' =>  $fbes_api_secret,
    		'cookie' => true,
    	));
    
    	$ret = array();
    	foreach ($fbes_api_uids as $key => $value) {
    
    		if($value!='') {
    			//https://developers.facebook.com/docs/reference/fql/event/
    			$fql = "SELECT eid, name, start_time, end_time, location, description
    					FROM event WHERE eid IN ( SELECT eid FROM event_member WHERE uid = $value )
    					ORDER BY start_time desc";
    
    			$param  =   array(
    				'method'    => 'fql.query',
    				'query'     => $fql,
    				'callback'  => ''
    			);
    
    			$result = $facebook->api($param);
    			foreach($result as $k => $v)
    				$result[$k]['uid'] = $value;
    			$ret = array_merge($ret, $result);
    		}
    	}
    
    	return $ret;
    }
    
    function fbes_segments($url='') {
    	$parsed_url = parse_url($url);
    	$path = trim($parsed_url['path'],'/');
    	return explode('/',$path);
    }
    
    function fbes_send_events($events) {
    
    	$query = new WP_Query(array(
    		'post_type'=>'tribe_events',
    		'posts_per_page'=>'-1'
    	));
    
    	foreach($query->posts as $post) {
    		if(!empty($post->to_ping)) {
    			$segments = fbes_segments($post->to_ping);
    			$eid = array_pop($segments);
    			$eids[$eid] = $post->ID;
    		}
    //if you're reading this and you want to delete all those duplicate events, uncomment this temporarially. Note, it will also delete all manually made events since June 13
    //http://codex.wordpress.org/Version_3.4 - June 13, 2012
    //depending on many duplicates you had, you might end up re-loading this script a bunch of times after it times out. Me, I had 14k duplicates. Had to run the script like 10 times.
    /*
    		else {
    			$post_date = trim(substr($post->post_date, 0, 10));
    			if($post->post_date > '2012-06-12')
    				wp_delete_post($post->ID);
    		}
    */
    	}
    	//file_put_contents($_SERVER['DOCUMENT_ROOT'].'/fbevent.log', print_r(array(time(),$events,$eids),1)."\n".str_repeat('=',40)."\n", FILE_APPEND);
    
    	foreach($events as $event) {
    
    		$args['post_title'] = $event['name'];
    
    		$dataInicio = date("U",strtotime($event['start_time']));
    		$dataFinal = date("U",strtotime($event['end_time']));
    
    		//don't update or insert events from the past.
    		if($dataInicio > time()) {
    
    			$args['EventStartDate'] = date("d/m/Y", $dataInicio);
    			$args['EventStartHour'] = date("H", $dataInicio);
    			$args['EventStartMinute'] = date("i", $dataInicio);
    
    			$args['EventEndDate'] = date("m/d/Y", $dataFinal);
    			$args['EventEndHour'] = date("H", $dataFinal);
    			$args['EventEndMinute'] = date("i", $dataFinal);
    
    			$args['post_content'] = $event['description'];
    			$args['Venue']['Venue'] = $event['location'];
    
    			$args['post_status'] = "Publish";
    			$args['post_type'] = "tribe_events";
    			//$args['to_ping'] = $event['eid']; //damn you, sanitize_trackback_urls in 3.4
    			$args['to_ping'] = 'https://www.facebook.com/events/'.$event['eid'].'/';
    
    			if($args['EventStartHour'] == '22' && $event['uid'] == '256763181050120') { //why are UT events 2 hours off???
    				$args['EventStartHour'] = '20';
    				$args['EventEndHour'] = '22';
    				$args['EventEndDate'] = date('m/d/Y',strtotime($args['EventEndDate'], '-1 day'));
    			}
    
    			$inserting = $post_id = false;
    			if (!array_key_exists($event['eid'], $eids)) {
    				//double check
    				$already_exists = false;
    				foreach($query->posts as $post) {
    					if($post->to_ping == $args['to_ping'] || trim($post->pinged) == $args['to_ping']) {
    						$already_exists = true;
    					}
    				}
    				if(!$already_exists) {
    					file_put_contents($_SERVER['DOCUMENT_ROOT'].'/fbevent.log', print_r(array(time(),'creating', $args, $eids, $query->posts),1)."\n".str_repeat('=',40)."\n", FILE_APPEND);
    					$post_id = tribe_create_event($args);
    					echo "<br />Inserting: ".$post_id;
    					$inserting = true;
    				}
    			}
    			if(!$inserting) {
    				$post_id = $eids[$event['eid']];
    				tribe_update_event($post_id, $args);
    				echo "<br />Updating: ".$eids[$event['eid']];
    			}
    			if($post_id)
    				update_metadata('post', $post_id, 'fb_event_obj', $event);
    				//eid, name, start_time, end_time, location, description
    		}
    		reset($eids);
    	}
    }
    
    function fbes_options_page() {
    
    	$fbes_api_uids = array();
    
    	#Get option values
    	$fbes_api_key = get_option('fbes_api_key');
    	$fbes_api_secret = get_option('fbes_api_secret');
    	$fbes_api_uid = get_option('fbes_api_uid');
    	$fbes_api_uids = get_option('fbes_api_uids');
    	$fbes_frequency = get_option('fbes_frequency');
    
    	#Get new updated option values, and save them
    	if( !empty($_POST['update']) ) {
    
    		$fbes_api_key = $_POST['fbes_api_key'];
    		update_option('fbes_api_key', $fbes_api_key);
    
    		$fbes_api_secret = $_POST['fbes_api_secret'];
    		update_option('fbes_api_secret', $fbes_api_secret);
    
    		$fbes_api_uid = $_POST['fbes_api_uid'];
    		update_option('fbes_api_uid', $fbes_api_uid);
    
    		$fbes_frequency = $_POST['fbes_frequency'];
    		update_option('fbes_frequency', $fbes_frequency);
    
    		$events = fbes_get_events($fbes_api_key, $fbes_api_secret, $fbes_api_uids);
    
    		update_schedule($fbes_frequency);
    
    		$msg = "Syncronization of Events from Facebook Complete.";
    ?>
    		<div id="message" class="updated fade"><p><strong><?php echo $msg; ?></strong></p></div>
    <?php
    	} elseif( !empty($_POST['add-uid']) ) {
    
    		if(!in_array($_POST['fbes_api_uid'], $fbes_api_uids)) {
    			$fbes_api_uids[] = $_POST['fbes_api_uid'];
    			update_option('fbes_api_uids', $fbes_api_uids);
    		}
    
    	} elseif( !empty($_GET['r']) ) {
    
    		foreach ($fbes_api_uids as $key => $value)
    			if($fbes_api_uids[$key] == $_GET['r'])
    				unset($fbes_api_uids[$key]);
    
    		update_option('fbes_api_uids', $fbes_api_uids);
    	}
    ?>
    	<div class="wrap">
    	 	<br /><div class="icon32" id="icon-plugins"><br/></div>
    		<h2 style="margin-bottom:10px;">Sync Facebook Events</h2>
    		<form method="post" action="<?php echo $_SERVER['REQUEST_URI'] ?>">
    		<input type="hidden" name="update" />
    		<?php
    		echo '<form action="'. $_SERVER["REQUEST_URI"] .'" method="post"><table style="width:475px;">';
    		echo '<tr><td>Facebook App ID:</td><td><input type="text" id="fbes_api_key" name="fbes_api_key" value="'.htmlentities($fbes_api_key).'" size="35" /></td><tr>';
    		echo '<tr><td>Facebook App Secret:</td><td><input type="text" id="fbes_api_secret" name="fbes_api_secret" value="'.htmlentities($fbes_api_secret) .'" size="35" /></td><tr>';
    
    		echo '<tr><td>Update Fequency:</td><td><select id="fbes_frequency" name="fbes_frequency">';
    		if(htmlentities($fbes_frequency)=="daily") {
    			echo '<option value="daily" SELECTED>Daily</option>';
    		} else {
    			echo '<option value="daily">Daily</option>';
    		}
    		if(htmlentities($fbes_frequency)=="twicedaily") {
    			echo '<option value="twicedaily" SELECTED>Twice Daily</option>';
    		} else {
    			echo '<option value="twicedaily">Twice Daily</option>';
    		}
    		if(htmlentities($fbes_frequency)=="hourly") {
    			echo '<option value="hourly" SELECTED>Hourly</option>';
    		} else {
    			echo '<option value="hourly">Hourly</option>';
    		}
    		echo '</select>';
    
    		echo '<tr><td>Add Facebook Page UID:</td><td><input type="text" id="fbes_api_uid" name="fbes_api_uid" value="" size="15" />';
    		echo '<input type="submit" value="Add" class="button-secondary" name="add-uid" /></td></tr>';
    
    		echo '<tr><td style="vertical-align:top;"></td><td>';
    
    		foreach ($fbes_api_uids as $value) {
    			if($value!='')
    		    	echo '&nbsp;&nbsp;'.$value.'&nbsp;&nbsp;<a href="'.$_SERVER["REQUEST_URI"].'&r='.$value.'">remove</a><br />';
    		}
    
    		echo '</td></tr>';
    
    		echo '<tr><td colspan="2"></td></tr><tr><td colspan="2"><br /><input type="submit" value="Update" class="button-primary"';
    		echo ' name="update" /></td></tr></table>';
    		?>
    		</form>
    	</div>
    	<?php if(isset($events)) { ?>
    		<div style="margin-top:20px;font-size:14px;color:#444;border:1px solid #999;padding:15px;width:95%;font-face:couriernew;">
    		<span style="color:red;">Updaing all facebook events...</span><br />
    		<?php fbes_send_events($events); ?><br />
    		<span style="color:red;">Events Calendar updated with current Facebook events.</span><br /><br />
    		</div>
    	<? } ?>
    <?php
    }
    ?>

    (yes, its 3.5, not 3.0)

    Finally it worked! Incredibly, it seems to be something as obvious as “Y/m/d” instead of “d/m/Y”.

    $args['EventStartDate'] = date("Y/m/d", $dataInicio);

    Now the hour is not the correct one (-1 respect from fb event), but date is OK. This is maybe the UTC value somewhere, but I cant find it.

    Thanks x your help

    mrudle

    (@mrudle)

    I have been working on the same problem ***ALL DAY*** and now I find the solution after I just finished writing the same exact code.

    One thing though, to fix the code from being off a few hours, you have to take into account your server time being different from your local time.

    Make sure you go to the WordPress Options panel and set your correct time zone.

    Then change the following code:

    if($offsetEnd > time()) {

    to:

    if($offsetEnd > current_time(‘timestamp’, false)) {

    Hope this fixes your problem, for the post being 1 hour off.

    This was a really frustrating learning experience! 🙂

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘[Plugin: Sync Facebook Events] Dating all events Dec 31, 1969’ is closed to new replies.