public function external_hook($hook) { switch ($hook) { case 'subscribe_form': // handle subscriptions to the member database and also the newsletter system. // todo - tie in with "subscription" module to allow users to select which subscription they want as well. // handle subscriptions to the member database and also the newsletter system. // todo - tie in with "subscription" module to allow users to select which subscription they want as well. case 'subscribe': $member = isset($_REQUEST['member']) && is_array($_REQUEST['member']) ? $_REQUEST['member'] : false; $provided_member_id = isset($_REQUEST['i']) ? (int) $_REQUEST['i'] : false; $hash = isset($_REQUEST['hash']) ? trim($_REQUEST['hash']) : false; $member_id = false; if ($member) { if (isset($member['email']) && $member['email']) { // proceed with signup $email = filter_var(strtolower(trim($member['email'])), FILTER_VALIDATE_EMAIL); if (strlen($email) > 3) { $adding_new_member = true; // are we adding a new member to the system or updating an old one if ($provided_member_id && $hash) { $real_hash = $this->link_public_details($provided_member_id, true); if ($real_hash == $hash) { $existing_member = get_single('member', 'email', $email); if ($existing_member && $existing_member['member_id'] != $provided_member_id) { // this user is trying to update their email address to a user who exists in the system already $template = module_template::get_template_by_key('member_subscription_error'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('message' => _l('The email address %s is already linked to another member.', htmlspecialchars($email)))); echo $template->render('pretty_html'); exit; } $adding_new_member = false; // updating details in the system. update_insert("member_id", $provided_member_id, "member", $member); $member_id = $provided_member_id; // update extra fields... } } if (!$member_id) { // add member to system. $existing_member = get_single('member', 'email', $email); if ($existing_member && $existing_member['member_id'] > 0) { // todo: give them link to change details. $template = module_template::get_template_by_key('member_subscription_error'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('message' => _l('The email address %s is already a member. Please click the link in our newsletter to modify your details.', htmlspecialchars($email)))); echo $template->render('pretty_html'); exit; } // todo - sanatise input here, this will allow anyone to insert member details: $member_id = update_insert("member_id", 'new', "member", $member); } if ($member_id) { // save extra fields against member. $extra_fields = module_extra::get_defaults('member'); $extra_values = array(); foreach ($extra_fields as $extra_field) { // check if this field was submitted. if (isset($member[$extra_field['key']])) { $extra_values[$extra_field['key']] = array('val' => $member[$extra_field['key']], 'key' => $extra_field['key']); } } if (count($extra_values)) { $_REQUEST['extra_member_field'] = $extra_values; module_extra::save_extras('member', 'member_id', $member_id, false); } if (class_exists('module_newsletter', false)) { $newsletter_member_id = module_newsletter::member_from_email(array('email' => $email, 'member_id' => $member_id, 'data_callback' => 'module_member::get_newsletter_recipient', 'data_args' => $member_id), true, true); module_newsletter::subscribe_member($email, $newsletter_member_id); // now add thsi member to the grups they have selected. if (isset($member['group']) && is_array($member['group'])) { $group_items = module_group::get_groups('newsletter_subscription'); $public_group_ids = array(); foreach ($group_items as $group_item) { $public_group_ids[$group_item['group_id']] = true; // remove user group all these groups. module_group::delete_member($member_id, 'newsletter_subscription'); } //print_r($member['group']);print_r($public_group_ids);exit; foreach ($member['group'] as $group_id => $tf) { if ($tf && isset($public_group_ids[$group_id])) { // add member to group - but only public group ids! module_group::add_to_group($group_id, $member_id); } } } } // is the newsletter module giving us a subscription redirection? if ($adding_new_member) { if (module_config::c('newsletter_subscribe_redirect', '')) { redirect_browser(module_config::c('newsletter_subscribe_redirect', '')); } $template = module_template::get_template_by_key('member_subscription_success'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('email' => $email)); echo $template->render('pretty_html'); exit; } else { if (module_config::c('newsletter_update_details_redirect', '')) { redirect_browser(module_config::c('newsletter_update_details_redirect', '')); } $template = module_template::get_template_by_key('member_update_details_success'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('email' => $email)); echo $template->render('pretty_html'); exit; } } else { echo 'database failure.. please try again.'; } } else { $template = module_template::get_template_by_key('member_subscription_error'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('message' => _l('Sorry please go back and complete all required fields (especially email address)'))); echo $template->render('pretty_html'); exit; } } else { $template = module_template::get_template_by_key('member_subscription_error'); $template->page_title = htmlspecialchars(_l('Subscription')); $template->assign_values(array('message' => _l('Sorry please go back and complete all required fields'))); echo $template->render('pretty_html'); exit; } } else { $template = module_template::get_template_by_key('member_subscription_form'); $template->page_title = htmlspecialchars(_l('Subscription')); // we also treat this as a subscription modification form. $newsletter_subscriptions = array(); $member = array('email' => '', 'first_name' => '', 'last_name' => '', 'business' => '', 'phone' => '', 'mobile' => ''); // extra fields: $extra_fields = module_extra::get_defaults('member'); foreach ($extra_fields as $extra_field) { $member[$extra_field['key']] = ''; } if ($provided_member_id && $hash) { $real_hash = $this->link_public_details($provided_member_id, true); if ($real_hash == $hash) { // we can load these details into the forum successfully. $member = array_merge($member, $this->get_member($provided_member_id)); // get their fields: $extra_fields = module_extra::get_extras(array('owner_table' => 'member', 'owner_id' => $provided_member_id)); foreach ($extra_fields as $extra_field) { $member[$extra_field['extra_key']] = $extra_field['extra']; } // find out what newsletter subscriptions this member has. if (class_exists('module_newsletter', false)) { $newsletter_member_id = module_newsletter::member_from_email($member, true, true); $newsletter_subscriptions = module_group::get_member_groups('newsletter_subscription', $provided_member_id); } } } $template->assign_values($member); if (class_exists('module_newsletter', false)) { $group_items = module_group::get_groups('newsletter_subscription'); ob_start(); foreach ($group_items as $group_item) { ?> <div class="group_select"> <input type="checkbox" name="member[group][<?php echo $group_item['group_id']; ?> ]" value="1"<?php foreach ($newsletter_subscriptions as $newsletter_subscription) { if ($newsletter_subscription['group_id'] == $group_item['group_id']) { echo ' checked'; } } ?> > <?php echo htmlspecialchars($group_item['name']); ?> </div> <?php } $template->assign_values(array('newsletter_options' => ob_get_clean())); } else { $template->assign_values(array('newsletter_options' => '')); } echo $template->render('pretty_html'); exit; } break; } }