i'm going to be developing an Availability Module for drupal, which i'll outline below--if all goes well it should be released before the end of june. i wanted to get a discussion started on the possible features/functionality of this module so i can develop it with everyone's best interest in mind. that said...

CASE STUDY?:
specifically this need arose out of communication difficulties my band has been experiencing--our booking person would like a more efficient way to see what dates everyone is available to play a show. right now it's a big email-fest in order to get everybody's status, and i think it would be much more efficient if there was a central place where all the band members could mark/view their availability.

so what is needed is some way for users w/ the appropriate edit permissions to be able to mark their availability for certain days, and for users w/ view permissions to look at a calendar and get an overview of who's available on each day of a week or month, etc.

here's an early run of how i'm picturing the functionality:

three permission levels: view availability, edit own availability, admin availability
users w/ view permissions would see a list of everyone who's marked their availabilty for a certain date, displayed in a calender (looks like i'll be using the functionality of event.module for calendar rendering)
users w/ edit own permissions would see a checkbox appear in each date on the calendar, where they can mark/unmark their availability for the day.
admin permissions would see everybody's (meaning all users w/ edit permissions) availability, and would be able to mark/unmark any as they see fit.

as a relative newcomer to drupal, i'd like to initally try to keep this module fairly simple, unless i was going to have a more experienced drupaller help me with it. here's what i'm willing to commit to for this module:

1. implement the basic functionality described above, or some close variation of it.
2. implement the two or three most requested additional features from the community--given that they're pretty much within my coding abilities (i'm willing to stretch a little... ;) and won't be drastically time consuming to build
3. do #1 and #2 above in such a way as to make future development of the module as easy as possible.

so, with all that in mind, i have a few starter questions for the discussion:

1. should the above functionality be integrated into the display of the events calendar, or should it be seperate? my early consideration is that people will be marking their availability for some 'event', so having it display along with the events might be best. not sure about that though...
2. currently my need is to manage the availability of one 'group' (my band)--will that be enough functionality for starters, or does the module need to be able to manage the availability of multiple groups?
3. how should i store the availability? my inital thought is not to use nodes, but rather to just store the data in a table and inject it directly into a calendar. but will this hamper the addition of future functionality? i must admit that i'm pretty blind in this area--all i'm seeing right now is the current functionality i've outlined...
4. how about taxonomy features? the current event calendar allows filtering of events by taxonomy (as well as content type, for that matter). is that kind of filtering needed for availability?
5. how specific would we need to make the availability? will it be enough to mark availability for an entire day, or should there be an additional option for marking availability for specific times during the day as well?

i'd love to hear any ideas about implementation/functionality/features for this module, and will try to keep this thread updated w/ my progress on the module...

thanks!

chad

Comments

hunmonk’s picture

no other comments yet--looks like i may be talking to myself on this project... ;)

in answer to some of the above questions, i've decide to proceed along the following lines, unless i hear good reasoning otherwise:

1. availability data will be stored in a table and injected directly into the events calendar for those users that have the 'view availability' permission. my reasoning here is that project coordinators will need to know both the availability of all group members as well as previously scheduled events in order to properly schedule another event, and an integrated display will make this easiest for them. i haven't decided yet whether to automatically display availability data for a user w/ view permissions, or to provide those users with a way to toggle the display of that data. feedback would be great in this area...

2. for a first run, i've also decided:

  • to limit the group management to a single group
  • that availability will be scheduled by entire days, and not for specific times during the day
  • to pass on taxonomy stuff (i must confess that i don't know much about the applications or benefits of taxonomy yet--it's an unexplored drupal area for me. if somebody would chime in with some clarity or suggestions, then i would try to work it in if it's a benefit)

for the group management and availability times, although i've passed on the more complex functionality for now, i have included fields in the database schema to make the possible feature upgrade as seamless as possible

table structure:

CREATE TABLE `availability` (
`aid` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`uid` INT( 10 ) UNSIGNED NOT NULL ,
`avail_start_time` INT( 10 ) UNSIGNED DEFAULT '0000000000' NOT NULL ,
`avail_end_time` INT( 10 ) UNSIGNED,
`avail_group` CHAR( 25 ) DEFAULT 'group1' NOT NULL ,
`avail_note` CHAR( 40 ) ,
PRIMARY KEY ( `aid` ) ,
INDEX ( `uid` , `avail_start_time` , `avail_end_time` , `avail_group` )
) TYPE = MYISAM COMMENT = 'table for drupal Availability Module';

if anything looks off there, feel free to let me know... :)

for editing functionality, i'm now picturing this:

users w/ edit own permissions will see two form fields--a select box with 'add' 'edit' and 'delete', and a textfield for entering a short note, such as 'Avail.' or 'On Vacation'. each date in the displayed calendar will have a checkbox in it. users will simply mark the dates for which they wish to perform an operation, set the operation in the select box, type in a note if needed, and click submit. admin users will see one additional select box listing all group members, so they may select which member to perform the editing operation on. this is the easiest, most intuitive approach i've come up with so far.

not sure if it's possible (or even preferrable) to have the above editing functionality integrated directly into the events calendar. i may just provide a link from the events calendar to an editing page.

chad

Thox’s picture

I think a more general purpose module would go the other way around. Your proposed module details when someone is available, whereas most calendars would detail when people aren't available.

Both of these systems are achieving the same goal, but I'd personally go for the second.

I'd suggest looking at how other systems implement the same kind of thing. e.g. take a look how egroupware handles events: http://test.opensourcecms.com/index.php?option=content&task=view&id=354

hunmonk’s picture

i was actually thinking that the way i had it outlined it could go either way--meaning that people could mark both when they're available and also when they're not available. after thinking about it more, though, it seems best to mark when they aren't available, and combine that with some kind of meeting request functionality--probably less confusing that way.

thanks for the link to eGroupWare--i'm going to spend some time looking it over, and any other applications of it's kind that i can find. the research should greatly assist the development path of this module.

if you run across any more apps like egroupware you think might be helpful for my research, send them my way!

chad

matthew’s picture

It sounds like what you REALLY want to build is a calendaring application.

Perhaps it might be easier if you assume that "unmarked" space is "free space", space available for other's to put in something. This way, the members of your band would have to mark down when they were in work or school or whatever, and the free spaces would be times they were not busy. This is how nearly every calendar application works, and I'd really like to see this module follow a similar path (it's tried and true).

Also, I think that everyone should be able to post events into each other's calendars. When someone (non-admin) does so, the event is tentatively placed into the recipient's calendar and an email (maybe a private message via the Private Message module?) would be sent asking the recipient person to either accept or deny the request.

Alternatively you could use an invite system, where people would invite other users to an event. These people would get an email, or pm, asking them to either accept or deny the invite. If they accept, the event is automatically added to their calendar.

Best case, your calendar should allow repeating events. I should be able to say that I have class from 11-12:10 Monday, Wednesday, Friday, from March 6th to June 15th.

I wonder if we could figure out a way to connect to enterprise calendaring software... Oracle Calendar, Outlook.. hmm...

I look forward to future development with this module, it sounds like something I might be able to use.

Best,

Matthew

hunmonk’s picture

my simple need for tracking group availability looks like it's going to transform itself into a calendaring application. my biggest concern with that is that a full calendaring module would be a big project--too big for me to tackle alone. it does seem like the way to go, though--so i would see it happening one of two ways:

1. i get some help from other developers, and our combined efforts result in a full-blown calendaring module, or
2. i do the development work myself, and take the module through increasing stages of functionality, until i get to the full-blown module. if the module went this route, i'd try to look ahead as far as possible down the development path--so as to make the gradual transition as painless as possible for me, and for any users.

excellent suggestion on the repeating events functionality--that's a must!

one question i've been asking myself today is: do we need to reinvent the wheel here? or is there some current calendaring application that we can plug into drupal w/ much less effort? part of my research into existing calendaring apps is going to include exploring this option.

thanks again for the suggestions, and keep them coming!

chad

stevryn’s picture

This is a module that would be widely appreciated I am sure. I have resorted to using a seperate application for calendar functions, but people get sick of having to log in to multiple apps. A calendar to allow people each to schedule themselves, with recurring everts functionality. The views could be, individual, or by role (allowing for formation of groups) or all.

There was a module at one point that bridged webcalendar...see here http://drupal.org/node/3891

I dont have the skills to help code, but I can help test if need be!

Good luck and thanks!