I need to find a solution for event management.

There seemed to have been some great modules for D5 that did this out of the box, and now seems to be a move towards using a CCK-Views approach instead.

What I would like and am part the way to experimenting with is:

  1. A listing for the event (I believe I can do this with CCK)
  2. Ability for anyone to sign up to it by providing specific information
  3. An email confirmation to the registrant and the organiser (in the very least I think I could automate this somehow with Rules)
  4. A method by which the organiser can document that payment has been made
  5. A receipt sent (and documented)
  6. A reminder sent 24 hours prior (comment as in 3)

Has someone got this already that they can package up as a feature perhaps please?

Or can someone advise step-by-step how they would do this?

I have a feeling that I may be able to create 2 content types (event and signup) and link them together somehow but not sure how to do this or get the views that would be useful to the event organiser.

I looked at the Signup module but this unfortunately only has the registrant entering name and phone (without learning how to hack the theme.inc to add further fields that then apply site-wide). I read some discussion on plans to integrate Signup with Webform to get this functionality which would be 'perfect' but it doesn't look as if it has happened yet.

Over to you....what would you do?

Comments

vm’s picture

with regards to cck. (you will also want date.module and calendar.module)

create a content type for the events.
add your datefield to this content type as well as any other fields you want to employ.

with regards to views you build out your lists the way you see fit, be it in a page or a block or a panel.
calendar.module will show the evenets in a printable calendar by day, month, year. as well as give you some default views you can clone an tweak til your heart is content.

I've no advice on the signup.module but I'd think you can use a node reference field maybe to attach a signup content type to a specific event.

Anonymous’s picture

Thanks.

Found date.module

Nodereference.module. Jeff Eaton talked about this on a video for a CCK-Views gallery he was making. Not 100% sure about how it works but will try to find out.

vm’s picture

Anonymous’s picture

The link certainly helped towards getting the calendar up and running and also to set up the right field in the CCK Event so that it shows on the calendar.

Just now (yes, after the event) I found this too which I think is better http://drupal.org/node/326061#comment-1077193

So now I have a CCK Event, a CCK Calendar and have to get back to the 'signing up' part.

WorldFallz’s picture

Signup is probably the "right" way (ie easiest, lol) to do this. Modifying the theme function to get the required info is not "hacking"-- it's the proper way to do this (it's even mentioned in the module's documentation). The thread about integrating webform was more aimed at being able to have different fields for different signups on the same site-- the theme function is site wide.

Anonymous’s picture

I know that the install.txt for Signup recommends altering the theme inc file, and does state that this then becomes site-wide.

It just that I have no idea how to do that. I opened the file, took a look ,and thought 'oh boy' thats just too much for me to wrap my head around for now.

I mean the CCK -Views UI still bamboozles me.

I do want the functionality of being able to alter the signups per event but immediately it is just one event that I am doing this for, and the deadline was yesterday!

I will have another think after I've renewed my glycaemic index.

I like that 'Signup' doesn't create endless nodes of information, but yeah, the modifying of the file gets me. So if you have any step by step instructions, that would be appreciated.

WorldFallz’s picture

If you provide the details of what info you want to collect upon signup I could provide more targeted info.

Anonymous’s picture

Thanks WorldFallz.

I really needed to get this done in a timely manner, and didn't think that I'd get any response in the forum for days, so I implored/bribed/begged another new Drupal user (in my first life), who is starting to teach themselves php, and nutted it out - well they got it working - I was just grateful.

I will document it here in case another newbie comes along and it may help them.

There were 4 things that were issues for us, and that was 1) caching needed to be off and 2) the signup needed to be customised specific to the node and 3) update.php needed to be run to effect changes in the template.php and 4) the function had to have the '$node' variable (I am told this is interesting as the documentation couldn't be found anywhere to explain this) as in:

function phptemplate_signup_user_form($node) {

In this instance of Signup the extra fields were kept to a bare minimum just to get it up and running and due to it being the wee small hours of the morning when it was being done.

This first part is unaltered:

 function phptemplate_signup_user_form($node) {
  global $user;
  $form = array();

  // If this function is providing any extra fields at all, the following
  // line is required for form form to work -- DO NOT EDIT OR REMOVE.
  $form['signup_form_data']['#tree'] = TRUE;

  $form['signup_form_data']['Name'] = array(
    '#type' => 'textfield',
    '#title' => t('Name'),
    '#size' => 40, '#maxlength' => 64,
    '#required' => TRUE,
  );
  $form['signup_form_data']['Phone'] = array(
    '#type' => 'textfield',
    '#title' => t('Phone'),
    '#size' => 40, '#maxlength' => 64,
  );

This second part was for the specific node

****    if ($node->nid == '280'){
        
        $form['signup_form_data']['Number_adults'] = array(
    '#type' => 'textfield',
    '#title' => t('Number of Adults Attending'),
    '#size' => 6, '#maxlength' => 6,
  );
        $form['signup_form_data']['Number_children'] = array(
    '#type' => 'textfield',
    '#title' => t('Number of Children Attending'),
    '#size' => 6, '#maxlength' => 6,
  );
        
}
  // If the user is logged in, fill in their name by default.
  if ($user->uid) {
    $form['signup_form_data']['Name']['#default_value'] = $user->name;
  }

  return $form;
****   }

The **** bits may be interesting to others as it shows how you can apply it a specific node instead of site-wide (leave out the asterisks).

Another couple of things that I will mention are that 'permissions' /admin/user/permissions for "Registration" needed to be checked (to allow for anonymous sign-ups), and a big mind-game for me was that these extra fields that were added to the specific node could be called anything. They didn't need to pre-exist in the sql database or as a CCK field - they were arbitrary.

WorldFallz’s picture

EXCELLENT!

Nice work... and thanks for posting it back. I'm sure someone else will find it helpful.

combatwombat_nz’s picture

I have done something similar.
*** DO NOT copy and paste the code below without understanding where it goes, and how to modify it to suit YOUR site. ***

It requires modifying sites/all/modules/signup/theme/node.admin.inc with following:

function theme_signup_custom_data($data) {
  $output = '';
  // All of the possible array key values should already be translated as
  // string literals in theme_signup_user_form() via the #title attributes, so
  // passing a variable to t() is actually safe here.  However, to avoid
  // warnings when extracting strings, "hide" the call to t() by using a
  // variable to hold the function name.
  $tr = 't';
  // Loop through each first level element.
  foreach ($data as $key => $value) {
    $output .= '<div id="'. signup_id_safe($key) .'">';
    if (is_array($value)) {
      // Element is nested, render it recursively.
      // Instead of the overhead of theme(), just call ourself directly.
      $output .= call_user_func(__FUNCTION__, $value);
    }
    else {
		if($key=="Number_adults" || $key=="Number_children"){ // or whatever your number fields are
			$output .= $tr($key) .': <input type="text" disabled size="3" value="'. check_plain($value).'" name="'.$key.'" />';}else{// use a disabled text box, because it is dead easy to get a value from using javascript
      $output .= $tr($key) .': '. check_plain($value);}
    }
    $output .= "</div>\n";
  }
  return $output;
}

Now modify your page.tpl.php in your theme folder, with code like this:

<?php print $scripts; ?>

	<script type="text/javascript">

	function checkpage(){

		if (document.location.href !="http://www.example.com/node/564/signups/admin") return;

// if the page is not the Signup admin list then carry on, otherwise:
		getElements();

	}

	function getElements()

{

var x=document.getElementsByName("Number_adults");

var y=document.getElementsByName("Number_children");

var adults=0, children=0,modifier=0; alerts="";

for(var i = 0; i < x.length; i++)

        {

            var obj = document.getElementsByName("Number_adults").item(i);

			if (isNaN(obj.value)|| (obj.value)=="" ){modifier=0;} else {modifier=parseInt(obj.value)}

            adults += modifier;

        }

		alerts+=(" Adults:"+adults);

		for(var i = 0; i < x.length; i++)

        {

            var obj = document.getElementsByName("Number_children").item(i);

			if (isNaN(obj.value)|| (obj.value)=="" ){modifier=0;} else {modifier=parseInt(obj.value)}

            children += modifier;

        }

		alerts+=("+ Children:"+children);

		var total=adults+children;

		alerts +=("= Total:"+total);

		document.getElementById('totals').innerHTML =alerts;

		

}

	</script>

  </head>
<body class="<?php print $body_classes; ?>" onload="checkpage();">

blah
blah
blah

<div id="totals" style="display:inline-block;position:relative;color:#000;font-weight:bold"></div>

          <?php if ($footer_top || $footer || $footer_message): ?>

Explanation:
The PHP of the Signup admin.inc outputs textboxes with the values we are interested in totalling. The javascript in the page.tpl.php gets the Elements by name that match the textboxes, and adds them all up. If the values are empty, then zero results. Then it fills the totals div at the bottom.

There is probably a way to modify the signup module further to get all the tallying done there, but it was my opinion that this would require more maintenance, as the module could be updated often, whereas the template file just stays there.