I am experimenting with COD as a way to manage multiple events for a academic society. Is it possible to create multiple events (i.e., meeting 2010, 2011), and easily associate sessions as paper proposals, etc. with a particular event? It looks to me as if COD is currently setup to have the entire site be oriented around a single event.

If this is already described somewhere, I would be content with a pointer.

Thanks,
Maria

Comments

ezra-g’s picture

The Signup module allows you to have multiple signup-enabled events, and there's nothing in COD that prevents you from using this functionality with the same checkout workflow provided by uc_signup for each event.

However, when you have not just multiple events per Drupal installation, but multiple conferences per Drupal installation, you add some non-trivial complexity, because now most content (like session submissions and announcements) needs to be filtered out so that it doesn't display with a conference that it's not associated with. Organic Groups seems like a natural architectural choice to power this, but we should be deliberate in the way it works, with a bit of consideration towards information architecture for the different conference-specific content.

That makes me feel like it's a feature that's probably best suited for the Drupal 7 version of COD, though I'm happy to discuss with anyone who wishes to implement this for Drupal 6.

ezra-g’s picture

I marked #977454: Include event as a node reference field as a duplicate of this.

mariagwyn’s picture

Hmm. Since I have always been a bit confused by OG (though I do use it on a number of sites), I used views to filter I placed an argument which functions on the date of the event. I am still building the site, so I only have two annual meetings partially entered, but so far it seems to work.

Is there something I am missing in going the views rather than OG route? I know that OpenScholar uses groups for its multisite architecture, the first time I have seen OG used for something other than groups.

Bricks and Clicks Marketing’s picture

I am also trying to figure this out. OG *might* work but I am not completely sure how for a number of things, especially how session proposals will be handled.

Bricks and Clicks Marketing’s picture

I'm having some success in this using nodereference & nodereference url to connect sessions/rooms/etc to events. Only hitch so far is that when editing a session, rooms & timeslots for ALL events are selectable, which will obviously get more & more confusing over time. If I can figure out a solution for that, I can move on to determining different payment levels, etc.

Bricks and Clicks Marketing’s picture

OK - I'm a bit stumped by how to limit the time slots/rooms that are available to a session based on the event. The behavior I'm looking for when choosing a time slot for a session is 'show only those time slots that are referencing the same event as the session is referencing.' There must be some way of doing this if sessions, time slots and rooms all reference the same event, but it is completely escaping me.

This is, I think, the last bridge to cross for a multi-event setup with COD using node reference. I think I have the other aspects completed :)

brentratliff’s picture

You need to patch cod_session.module. I used a node reference field to modify an old version of COD but the patch is no longer applicable to the latest code. Basically you need to check the node reference field before building the schedule for the room, time slot, and session. Something like this where the machine name of your field is 'field_event_reference':

$view = views_get_current_view();
  $args = $view->args;

............

// alter the query to include your reference field
$result = db_query("SELECT node.nid AS nid, node.title, node_data_field_event_reference.field_event_reference_nid, node.type, node.vid FROM node node  LEFT JOIN content_field_event_reference node_data_field_event_reference ON node.vid = node_data_field_event_reference.vid WHERE node.type in ('room')");

.............

while ($node = db_fetch_object($result)) {
	foreach ($slot_nids as $slot_nid) {
    $slot = node_load($slot_nid);
    // if added for multi-event -- only show applicable time slots
    if ($slot->field_event_reference[0][nid] == $args[0])  {
      $slots[$slot->nid] = $slot;
   }
  }
 ..............

       if($node->field_event_reference_nid == $args[0]) {
      $rooms[$node->nid] = check_plain($node->title);
    }
  

.............

lisarex’s picture

Component: Documentation » Code

Moving this out of the Documentation component

Bricks and Clicks Marketing’s picture

Thanks Brent! I'm trying to figure out where these edits would be made- lines 1, 147, 186? & ?

Will this code become part of the module, or should I be prepared to patch the module moving forward?

brentratliff’s picture

That code (adjusted for the name of your reference field) is just an example of the cck syntax you'll need in a couple places to build the session view schedule by checking for event. Otherwise, your schedule will include the sessions and items from all events. I used that code for alpha 2. After reading though the latest cod_session.module file, especially after the bof patch got in, I see that it will take a fairly significant patch to get the right days, slots, rooms, etc. The schedule has a lot of great new functionality but that makes it harder to filter by an event reference field. It will just take trial and error to make sure you are checking the reference field when trying to build the schedule. The other option is, to not use the program/session-schedule functionality and build your own schedule view filtered by view argument.

As far as controlling the selection of rooms and slots by event on the session node edit form, you can alter the room and slot fields to offer items based on a view. You can then just create a simple view for rooms and slots that filter by event.

brentratliff’s picture

StatusFileSize
new4.74 KB

Here's an example of a view to sort by event. The argument is passed in via php.

brentratliff’s picture

In my opinion, mulit-event is non trivial and will require significant development that keeps track of patches that change with each new release. If I were doing it now, I would use organic groups and set the event content type as a group node. This however, will most likely require some patching to the Ubercart checkout process.

Bricks and Clicks Marketing’s picture

As far as controlling the selection of rooms and slots by event on the session node edit form, you can alter the room and slot fields to offer items based on a view. You can then just create a simple view for rooms and slots that filter by event.

This sounds like a much better option than hacking the module. I was not aware that node edit forms could be customized with views so I will try this first.

I do agree that multi-event is non-trivial, thus I would like to test as much as possible and determine whether it the final results are usable or if it is better to do something like use multisite and place new events on their own subdomain.

brentratliff’s picture

Just to be clear, using a view to determine which rooms and timeslots show up on the node edit form and "hacking" the module for the schedule view tackle two completely different problems. I don't know of a way to show the cod_session.module schedule view using the supplied views plugin and a node reference field without hacking it and keeping the diff up to date on your own. You can build your own views schedule but it won't work with the cod views plugin without modification.

Bricks and Clicks Marketing’s picture

I'm focussing on the rooms/timeslots on the edit form for now, that's the biggest problem I'm perceiving in trying to create this proof of concept. I'm actually not sure how to use arguments and views for node edit forms as I've not done it before. Is there a write-up or tutorial that I can use as a guide?

brentratliff’s picture

You can rename your event reference field to field_event_reference and import the view I attached above.

Bricks and Clicks Marketing’s picture

The event reference field in which content type - session? Time slot? Room?

brentratliff’s picture

I used one event reference field pointing back to the event. All my content types used the same field. The example view has the content type 'Room' with field_event_reference pointing back to the event content type.

Bricks and Clicks Marketing’s picture

I'm unable to change the field name after the fact - it's currently field_event (field type: node reference, widget type: reference from url). When I replace instanced of field_event_reference in your view with field_event, the arguments section of the view states:

Broken/missing handler: node_data_field_event_room > field_event_room_nid

brentratliff’s picture

Is your field on the room content type or is it on the event content type referencing the room? It sounds like it's on the room. If that's the case, I don't know why it's missing.

Bricks and Clicks Marketing’s picture

Yes, it is on the room, session, schedule item & time slot, all referencing the event. I originally had forgotten to make them all use the same field, so I redid it yesterday and will recereate events/rooms/slots/etc today and then see how it goes.

Bricks and Clicks Marketing’s picture

While adding content I notice that Session Schedules show all rooms whether they are related to an event or not. Starting to have some doubts about this endeavor :/

ezra-g’s picture

Version: 6.x-1.0-alpha3 » 6.x-1.x-dev
brentratliff’s picture

arphaus, that's what I was talking about with the schedule grid and the code above. Even if you filter the events on the node edit form, you have to check the reference field when the grid is built. It is not trivial and requires significant code changes. There is no way to use the cod schedule without modifying the code and tracking your diffs as upgrades come out. I really think organic groups is the right approach but uc_signup may have issues there. Currently, most conferences use a single site per event. You can always import your users tables or share them between sites.

Bricks and Clicks Marketing’s picture

That is what I am thinking, if the boss etc is ok with it. Specifically, multisite, with each event being a distinct subdomain with users table common between all sites.

Still, this has been a good experiment - it's all learning, regardless of the outcome :)

Bricks and Clicks Marketing’s picture

OK - testing my next proof of concept: separate sites with some shared tables (user, etc), as described by Lullabot: http://www.lullabot.com/articles/drupal-single-sign-across-sub-domains

I'm going to have 1 main site and events will be new COD installs in subfolders, like /events/event-name. The main site will be a COD install as I need to sync users and roles - the same people will need to do the same conference management actions from site to site.

It would be *super* helpful if I could get a list of tables that should be synced - I guess tables involving profiles, related content, bookmarks, order history, signups, etc. I will try to figure out the list myself but I certainly wouldn't mind some suggestions ;)

Thanks for the help & encouragement so far - here's hoping this approach works!

Bricks and Clicks Marketing’s picture

Wondering now which tables *don't* need to be synced - definitely seems like more need to be synced than not.

Bricks and Clicks Marketing’s picture

OK - I've created the Master site & 2 Client sites for testing in subfolders. 2 issues I've found so far:

1) cck module errors, seemingly to do with node fields

I've seen this error on all 3 sites after creating my first event on Client1:

Client 1: warning: Invalid argument supplied for foreach() in /var/www/cod/events/summer-conference-2012/sites/all/modules/contrib/cck/content.module on line 1022.
warning: Invalid argument supplied for foreach() in /.../events/summer-conference-2012/sites/all/modules/contrib/cck/content.module on line 1022.

Master site: warning: Invalid argument supplied for foreach() in /.../sites/all/modules/contrib/cck/content.module on line 1284.

Client2: /.../events/summer-conference-2013/sites/all/modules/contrib/cck/content.module on line 1284.

Oddly, this error appeared before AND after I synced the node tables.

2) product not visible on Master site (will ask at UC too, but it's hit or miss if anyone actually responds there)

The Event product was created on Client1 and the uc_products db is synced. When I check the dbs, as expected there is nothing in Client1's uc_products table but there is in the Master uc_products table. Anyone have an idea why it's not visible on the Master site?

Bricks and Clicks Marketing’s picture

I've given up on the idea of the multi-site install. I will, however, keep looking at either Nodereference or OG as possible solutions for making a multi-event version of COD. I'm going to discuss it at the next Drupalcamp I go to, and might offer a bounty to get it done. It would be awesome to sponsor a solution and give it back to the community :)

Bricks and Clicks Marketing’s picture

arphaus, that's what I was talking about with the schedule grid and the code above. Even if you filter the events on the node edit form, you have to check the reference field when the grid is built. It is not trivial and requires significant code changes. There is no way to use the cod schedule without modifying the code and tracking your diffs as upgrades come out. I really think organic groups is the right approach but uc_signup may have issues there. Currently, most conferences use a single site per event. You can always import your users tables or share them between sites.

I'm looking back at this now. Assuming that the node edit forms can show just the rooms & timeslots for a specific event it *seems* like the next step would be to figure out how to display the schedules separately. There must be *some* way of filtering a view based on a Nodereference to a specific event.

The multi-site test seemed like it kept running into issues. Also, requiring a new site for each event makes things a bit more technical - at least using Nodereference, Views etc it would all be within Drupal.

iRex’s picture

subscribing!

Bricks and Clicks Marketing’s picture

I'm moving on to creating a solution with OG. (yes, I did say 'creating' and not 'trying' ;))

Bricks and Clicks Marketing’s picture

Quick update: Using OG, and making an Event a 'group' node, allows for the filtering of Session Schedules based on the Event! So it is possible to create multiple events & have unique schedules for each.

Now to limit the rooms/timeslots on a Session edit form. This probably involves views & arguments, and maybe nodereference?

Bricks and Clicks Marketing’s picture

As far as controlling the selection of rooms and slots by event on the session node edit form, you can alter the room and slot fields to offer items based on a view. You can then just create a simple view for rooms and slots that filter by event.

Hi Brent - I'm trying to figure this out. Using OG, and making Events into 'groups,' I can create schedule views that are specific to a single event - overcoming one big issue from my previous effort. So I'm going to continue with Events as OG group nodes.

I've created a View using arguments to filter Rooms based on OG nid. The live preview works as expected - I enter the nid for an event & the Rooms for that event only are visible - so far so good. The page url works too - you can see the rooms for the two events at http://sandbox.nmc.org/codog/rooms/21 & http://sandbox.nmc.org/codog/rooms/31

I'm unclear on how to set up the cck field and then how to pass the argument into the node add url. For testing, I go to Manage Fields for Sessions, then click Configure for the Room field. I got ADVANCED - NODES THAT CAN BE REFERENCED (VIEW) and select the View I created. Now I'm lost - if I enter comma-separated nids, I can only get it to show the rooms for the first nid listed (this also means that every time a new event is created, I would probably have to add its nid here - this would reduce the usefulness of using arguments).

If I leave the arguments for the field empty, no Rooms are shown (as per my view argument to display empty text if argument not present). I assume I just need to create a url with the argument in it but nothing I've tried is working yet. The url is node/add/session/ and I've tried

node/add/session/21
nod/add/session/rooms/21 (adding the view url)

What am I missing?

Bricks and Clicks Marketing’s picture

What I was missing was this:

node/add/session?gids[]=21

which was in the Group Details block that I hadn't activated. Thanks to Nevets, I've sussed out 1) creating unique, per-event schedules and 2) limiting Rooms & Slots in Sessions/Schedule Items to those specific to an Event.

brentratliff’s picture

That's great if you got it working that way. What I did was provide a default argument to the view that grabbed the nid from the URL of the edit screen and used it to filter the rooms and sessions.

kclarkson’s picture

StatusFileSize
new366.59 KB

Arphaus,

Sorry for the long delay. Looks like you have gotten Multiple events to work. I too have got multiple events working using OG and making the Event content type a "group type".

I used a combination of Panels and views.
1. In the session view, added a content pane with the argument of OG: groups. Validation was group nodes and argument type is node id.
2. Used panels to do a node override of the event type node.
3. Added the following as content to the panel; node body and node image from event type. Added the session view content pane.

So now when you click on a specific conference/event you will see the logo, description and the schedule that is related to that event. Of course news, speakers, etc can be done the same way.

See Screenshot.

Two major features where I am stumped:
1. I would like to have Event menus to separate pages for each event section (sessions, accepted sessions, directions, presenters, etc) so that I do not have one huge page the scrolls forever.

-The main issue I have with the separate pages is that I have one view (for each event section) with arguments so that I do not have to re-create another view every time an event is added. How do I add as a menu item if its one view?

- My current idea is to use a view with flag to make the menu ceation simple but how do I still add the view to the menu if that is the case. I don't want to use OG Menu because I would then have to create a new menu every time an event is added.

2. For each of the separate pages I would like to have the same page header at the top. That consists of the Event content types, image, body and date. (similar to the screenshot).

-I tried the same process with panels and views but for some reason the argument does not work.

So it continues :)

Bricks and Clicks Marketing’s picture

Maybe the menu items can be a block that displays on the same pages as the views?

denix’s picture

Hi guys, thanks for sharing this!
do you know if and when this new feature will be added to COD?

Denis

greggles’s picture

Title: Single site for multiple events » Support for multiple events in one cod site (next generation feature)
Version: 6.x-1.x-dev » 7.x-1.x-dev
Category: support » feature
Status: Active » Postponed

This has the most discussion, so changing it to a feature request so other requests for the idea can be marked a duplicate of this.

It's still a "next generation" feature, though (i.e. it's unlikely to be implemented in the near future). Setting title/status to reflect that.

Anyone who needs this feature is, of course, welcome to add it to their site and share lessons-learned here (as some folks have been doing). That will help make sure the final version is the best it can be!

kclarkson’s picture

@arphaus and I have been working on some configurations.

once the COD 7 features are a little closer to complete I think we have conceptualized a good concept using OG and flag module for menus.

Bricks and Clicks Marketing’s picture

I worked with Nevets to create multi-event functionality for the Drupal 6 version, but the client isn't using it :/

ezra-g’s picture

#1663296: Reporting across multiple conferences discuss approaches for cross-conference reporting, which is one common motivation for putting multiple conferences in a single site.

kclarkson’s picture

I am feeling really good about the Organic Groups solution I have been configuring for having multiple events (conferences) on one site.

Once there is a solid development release of COD it shouldn't take me long to create a "features override" feature that adds the functionality.

The biggest hurdle was figuring out how to deal with each event specific Menu.

Organic Groups Menu, looks to moving in the right direction as it now automatically creates a menu for each group (event) created. #1494856: Possible to auto-create the menus for new groups? This accompanied with custom panels pages allows for event specific menus for sessions, news, etc.. that are automatically generated upon creation.

Thanks to ZipMonkey and others who are working hard for the OG Menu module.

brentratliff’s picture

@kclarkson, Which version of OG are you using? Besides the menus, does placing the event content type into an OG handle everything or are there other steps? Since the features are still in flux would you mind posting your steps? I have stripped the features for the Drupalcamp Atlanta COD 7 site into a fresh install and would love to get a feature (override) for this.

kclarkson’s picture

@brentratliff,

I was really hoping to wait and see if there could be a release of COD in its current state just so that I wouldn't have to re-do any features override. If you wanted to ping me and share what you have I could configure something. But if you wanted to do it yourself here are my steps / theory for building a Multiple event COD site.

1. Organic Groups Content Type: I created another content type called "conference", and made this an Organic Group.

2. OG Posts - I then made all of the other content types OG posts

3. Views - I used views to create OG argumented views (made panel panes) of all the OG posts (sessions, speakers, events, rooms, etc).

4. Panels - I then created a node override with panels for the "conference" content type that included all of the Panels Panes for that I created in views. At this point you should be able to see the "conference" content type with sessions, events, speakers etc.

5. OG Menus - Download the 7.x-3.x Dev version and also make sure that you are using the correct version of OG. This was my biggest hurdle, trying to figure out how to auto-create the menu building for each "conference" (sessions, speakers, etc). #1494856: Possible to auto-create the menus for new groups?

The automated menus are the Argumented Views that you created at which every conference would need. With this setup every time you create a new conference group the menus are automatically populated with links to the views.

6. OG Menu in Panel Override - Of course you need to add the OG Menu to the Panels Override so that it shows on each conference. You could also use context to place the OG Menu in the sidebar.

7. Entity Registration - This doesn't really need any additional configuration except for the "conference" content type would need to be activated as an entity registration. All registrations are for the "conference" content type so I there is no reference that needs to be added.

Things I have not tried or considered (please add to this if I have forgotten):
1. Reports - I noticed that there was a request to develop reporting for all events. I am assuming the reports could be done the exact same way as long as you can put OG reference on those reports then you should be good right ?

2.

damienmckenna’s picture

FYI the ideas from #47 could be fairly easily turned into an additional feature and contributed.

kclarkson’s picture

@DamienMcKenna,

Yes I agree, this would be an easy feature but it would also require some feature overrides.

So I am waiting for a development release of COD that has the most recent version of the content types especially the "event" content type because the feature overrides would be adding entity reference and OG fields to all the content types.

I am sure we could start this now but as a site builder I would like to work from something that is the most up to date so that we can test it.

So if we could kindly persuade the maintainers to update COD #1807370: D7 Release Update - Can Maintainers Release an Alpha or Dev ? with all of the patches we could all at least begin using and building features :)

adrift73’s picture

Subscribing

cvhasselt’s picture

I would also be really interested in a solution for this!
Thanks
Coen

damienmckenna’s picture

Looking at the alpha1 release, couldn't this be driven by making the existing Event content type a group, and then making all of the other content types group content? I'm working on this today, I'll see if I can bundle it up as a feature and upload it, at least as something to look at.

brentratliff’s picture

DamienMcKenna,

That appears to be the preferred approach for those who have implemented it but there may be some outliers that aren't easily bundled.

ezra-g’s picture

I would support (possibly in a new branch of COD) making an OG-segmented site the default.

That way, we could have entities per group (such as tracks, sessions, etc) and the ability to spin up entire new conferences by creating a new group. This would provide this widely requested feature without having to deal with multiple fundamental configurations.

damienmckenna’s picture

I'm building this functionality for another site, I'll try to keep it clean and will upload what I have tomorrow.

kclarkson’s picture

I would suggest that we add a new content type and rename the current event content type to "special event".

The reason being is that we need one content type to be the "group", that provides the multi-conference feature but we still need a content type for a special event during the conference.

Breakdown
Group Type -New content type called "event" or "conference".
Group posts - rename current event to "special event"

I would prefer to rename the current event content type to "special event" because many people will use this distro for non-conference events.

What do you think ?

kclarkson’s picture

Status: Postponed » Needs work
StatusFileSize
new156.19 KB

From Ezra's last comment it would be great to get another branch up so we can clone from that one.

This is my first patch so I am excited to FINALLY give back to the community with some code :)

UPDATE:
Special Events- I created a "special event" content type with all of the same fields as the cod_events feature but made this an Organic Group post. The purpose of this content type is to replace the cod_events for events such as; After-Parties, Networking or Participant excursions. I also kept the ability to register for the event for both paid and free just like the previous cod_events.

Events- I then converted the existing events content type into an Organic Group. So this content type is now what provides the Multi events functionality.

All other content types / features I made OG Posts.

THINGS TO DO:
-update all related views to include the group id argument
-Panels vs. Context: Decide whether we use panels or context to override the display of the "new events" content type.
-OG Menus: Add the OG menus functionality so that the menus are automatically populated
-Entityreference PrePopulate: Add prepopulate links for all content types; sessions, evals, bofs etc... This is VERY important because as events get added it will become difficult to select the event from the dropdown.

kclarkson’s picture

Status: Needs work » Needs review
japerry’s picture

Status: Needs review » Fixed

Fixed in alpha2! (Basically redesigned everything based in this sandbox: http://drupal.org/sandbox/japerry/1869860)

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.