'Anonymous Member', 'pi_version' => '1.0.1', 'pi_author' => 'Brian Litzinger', 'pi_author_url' => 'http://www.brianlitzinger.com/ee/', 'pi_description' => 'Create an anonymous member.', 'pi_usage' => Anonymous_member::usage() ); class Anonymous_member { var $group_id; function create() { global $FNS, $IN, $LOC, $TMPL, $DB, $SESS, $PREFS; // required $this->group_id = $TMPL->fetch_param('group_id'); // optional $salt = $TMPL->fetch_param('salt') ? $TMPL->fetch_param('salt') : ''; $screen_name = $TMPL->fetch_param('screen_name') ? ($TMPL->fetch_param('screen_name') == 'ip') ? $IN->IP : $TMPL->fetch_param('screen_name') : 'Anonymous Member'; if( ! $this->group_id) { $this->return_data = 'Please define a group to assign the anonymous member to.'; return $this->return_data; } $member_id = $SESS->userdata['member_id']; if( ! $member_id) { $data['username'] = 'anonymous_'.$FNS->random('encrypt'); $data['password'] = $FNS->hash($salt.$IN->IP); $data['ip_address'] = $IN->IP; $data['unique_id'] = $FNS->random('encrypt'); $data['join_date'] = $LOC->now; $data['email'] = ''; $data['screen_name'] = $screen_name; $data['group_id'] = $this->group_id; $data['accept_messages'] = 'n'; $data['accept_admin_email'] = 'n'; $data['accept_user_email'] = 'n'; $data['notify_by_default'] = 'n'; $data['notify_of_pm'] = 'n'; $data['display_avatars'] = 'n'; $data['display_signatures'] = 'n'; $data['smart_notifications'] = 'n'; $DB->query($DB->insert_string('exp_members', $data)); $member_id = $DB->insert_id; /** ---------------------------------------- /** Following taken directly from EE Member's module. /** Why re-write this when it already exists? /** ----------------------------------------*/ /** ---------------------------------------- /** Log user in /** ----------------------------------------*/ $expire = 60*60*24*365; $FNS->set_cookie($SESS->c_expire , time()+$expire, $expire); $FNS->set_cookie($SESS->c_uniqueid , $data['unique_id'], $expire); $FNS->set_cookie($SESS->c_password , $data['password'], $expire); $FNS->set_cookie($SESS->c_anon , 1, $expire); /** ---------------------------------------- /** Create a new session /** ----------------------------------------*/ if ($PREFS->ini('user_session_type') == 'cs' || $PREFS->ini('user_session_type') == 's') { $SESS->sdata['session_id'] = $FNS->random(); $SESS->sdata['member_id'] = $member_id; $SESS->sdata['last_activity'] = $LOC->now; $SESS->sdata['site_id'] = $PREFS->ini('site_id'); $FNS->set_cookie($SESS->c_session , $SESS->sdata['session_id'], $SESS->session_length); $DB->query($DB->insert_string('exp_sessions', $SESS->sdata)); } /** ---------------------------------------- /** Update existing session variables /** ----------------------------------------*/ $SESS->userdata['username'] = $data['username']; $SESS->userdata['member_id'] = $member_id; } else { $this->login(); } } function login() { global $DB, $TMPL, $FNS, $SESS, $PREFS, $IN, $LOC; $member_id = $SESS->userdata['member_id']; if( ! $member_id && isset($SESS->userdata['session_id']) && $SESS->userdata['session_id'] != 0 ) { $expire = $expire = 60*60*24*365; $result = $DB->query("SELECT exp_members.screen_name, exp_members.group_id, exp_members.username, exp_members.member_id, exp_members.password, exp_members.unique_id FROM exp_sessions, exp_members WHERE exp_sessions.session_id = '". $DB->escape_str($SESS->userdata['session_id']) ."' AND exp_sessions.member_id = exp_members.member_id AND exp_sessions.last_activity > $expire"); /** ---------------------------------------- /** Set cookies /** ----------------------------------------*/ $FNS->set_cookie($SESS->c_expire , time() + $expire, $expire); $FNS->set_cookie($SESS->c_uniqueid , $result->row['unique_id'], $expire); $FNS->set_cookie($SESS->c_password , $result->row['password'], $expire); $FNS->set_cookie($SESS->c_anon , 1, $expire); /** ---------------------------------------- /** Create a new session /** ----------------------------------------*/ $SESS->create_new_session($result->row['member_id']); $SESS->userdata['username'] = $result->row['username']; $SESS->userdata['member_id'] = $result->row['member_id']; $SESS->userdata['screen_name'] = $result->row['screen_name']; } } /* END */ function show() { // Do I need to create a method to retrieve anonymous data that would allow people to update it then register as a real member? // foreach($result->result as $row) // { // $tagdata = $TMPL->tagdata; // // foreach ($TMPL->var_single as $key => $val) // { // switch($key) // { // if(isset($row[$val])) { // $tagdata = $TMPL->swap_var_single($val, $row[$val], $tagdata); // } // } // } // // $this->return_data .= $tagdata; // } } function usage() { ob_start(); ?> This plugin lets you create an anonymous member, and immediately signs them in as that member so they can take advantage of certain functionality without registering with the site, which can be a barrier for user interaction. This was originally written to be used with Solspace's Favorites module. Require Parameters: • group_id - Which member group do you want to assign the member to? Would be best to create a new group with no privileges. Optional Parameters: • salt - If you want to salt the passwords. • screen_name - Screen Name you want to give anonymous users. If screen_name="ip", their IP address will be used instead. Default value is "Anonymous User". Example: {exp:anonymous_member:create group_id="6" salt="mysecret" screen_name="Freeloader"} To use with the Favorites module, simply include this tag on the page before the "save" method: {exp:anonymous_member:create group_id="6"} {exp:favorites:save}