Events+ and Gravity Forms / Front-End Posting with additional fields / Buddypress

I am aware that Events+ comes with front-end posting/editing capabilities. However, since I require additional taxonomies to go together with an event posting, I would like to use Gravity Forms for front-end submission.

I kind of got it working with all my taxonomies etc, also hiding stuff from the user using a "hidden" custom post field.

However, one problem remains:
After submission, everything is created properly, except for the Buddypress Activity entry link ("user has created a new event"), which, instead of linking to site/year of event/month of event/title links to site/year of creation/month of creation/title. So if an event takes place in June but is created today, it links to site/2013/4/title instead of site/2013/6/title. The event link itself (in archives, etc) is correct, only the link Buddypress Activity stream contains the wrong link...

Any ideas how to:
- fix this
- purge the /year/month/ from the link completely and replace it by a custom permalink structure, eg /site/event/by/user/title, which would be what I prefer...

  • Hannes Heckel

    I figured it out myself - although I still have no idea why the wrong link is created.

    Step 1 - Turn off automatic buddypress activity posting (if you want automatic bp activity posting for attendance, you might leave the addon installed and just disable the notification upon creation - there is a bug that prevents you from setting the "No activity update" action, I used "Group only".

    Step 2 - Create your Gravity Form and submit all the custom fields except for the dates and times for GF won't let you check against valid dates (end before start etc). I also left out group and status, although both are mandatory entries in the database. Status: I included a logic where events are automatically expired when the date is in the past. Group: I am trying to find a way to auto-create a group upon event creation for discussion and images.

    Step 3 - Put something in your functions.php:

    add_action("gform_after_submission_8", "validate_activity", 10, 2);
    function validate_activity($entry, $form){
    
        //getting post
        $id = $entry["post_id"];
        $event = get_post($id);
        $meta = get_post_meta($id);
    
        //date and time stuff
        $start = $meta['incsub_event_no_start'] == 1
        	? $entry[17]
        	: $entry[17] . ' ' . $entry[16];
        update_post_meta($id, 'incsub_event_start', $start);	
    
        $end = $entry[20] == ''
        	? $start
        	: $entry[20];
    
        $end = $meta['incsub_event_no_end'] == 1
        	? $end
        	: $end . ' ' . $entry[22];
    
        $end = strtotime($end) < strtotime($start)
        	? $start
        	: $end;
        update_post_meta($id, 'incsub_event_end', $end);	
    
        //setting the status
        $status = strtotime($end) < strtotime('now')
        	? 'expired'
        	: 'open';
        update_post_meta($id, 'incsub_event_status', $status);	
    
        //group
        $group = 0;
        update_post_meta($id, 'eab_event-bp-group_event', $group);	
    
        //set creator as attending
        update_post_meta($id, 'incsub_event_yes_count', 1);
        update_post_meta($id, 'incsub_event_attending_count', 1);
    		global $wpdb, $current_user;
    
    	    $event_id = $id;
    	    $user_id = get_current_user_id();
    	    $wpdb->show_errors();
    		$wpdb->query(
    		    $wpdb->prepare("INSERT INTO wp_eab_bookings VALUES(null, %d, %d, NOW(), 'yes') ON DUPLICATE KEY UPDATE <code>status</code> = 'yes';", $event_id, $user_id)
    		);
    
    	// Buddypress
    	$user_link = bp_core_get_userlink($event->post_author);
    	$update = false;
    	$update = sprintf(__('%s hat eine neue Aktivität angelegt', Eab_EventsHub::TEXT_DOMAIN), $user_link);
    	$update = sprintf("{$update}: <a href='%s'>%s</a>", get_permalink($event->ID), $event->post_title);
    
    	$activity = array(
    		'action' => $update,
    		'component' => 'eab_events',
    		'type' => 'event_created',
    		'item_id' => $event_id,
    	);
    	bp_activity_add($activity);
    }

    Explanation:
    - The function is added to the GF with ID 8 - replace with your ID
    - It pulls the post and post meta
    - It validates the time, so that the user can leave end date empty etc. ´$entry[##]` are the GF field IDs.
    - It sets the status
    - It sets no group - here my group creation will kick in later
    - It sets the creator as first attendant - I have no idea why this is missing in the original code
    - Finally, it updates Buddypress correctly. Although this is almost exactly the function from the addon, this time the link created is correct.