getOption('appId',$scriptProperties,''); $secret= $modx->getOption('secret',$scriptProperties,''); if(empty($appId) || empty($secret)){ $output='No AppID or Secret Provided, please obtain from developer.facebook.com'; return $output; } // Create our Application instance. $facebook = new Facebook(array( 'appId' => $appId, 'secret' => $secret, 'cookie' => true, )); $user = $facebook->getUser(); /* * Make the appID and current session available to the front end * (in case you want to add more social features using Javascript, specify those in the init() call) */ $modx->toPlaceholder('facebook_session',json_encode($user)); $modx->toPlaceholder('facebook_app_id',$facebook->getAppId()); $output=""; $me = null; // Session based API call. if ($user) { try { $uid = $facebook->getUser(); $me = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); } } // login or logout url will be needed depending on current user state. if ($me) { //die(print_r($me)); $contexts = empty($contexts) ? array($modx->context->get('key')) : explode(',', $contexts); foreach (array_keys($contexts) as $ctxKey) { $contexts[$ctxKey] = trim($contexts[$ctxKey]); } $user = $modx->getObject('modUser', array('remote_key:=' => $me['id'], 'remote_key:!=' => null)); if(empty($user)){ //they're new! //facebook may pass multiple hometowns back if(!empty($me['hometown'])){ if(is_array($me['hometown'])){ $homet=$me['hometown'][0]; }else{ $homet=$me['hometown']; } } // Create an empty modx user and populate with facebook data $user = $modx->newObject('modUser'); $user->fromArray( array('username' => $me['name'],'active' => true ,'remote_key' => $me['id'] ,'remote_data' => $me //store the remote data as json object in db (in case you need more info bout the FB user later) ) ); //We'll also toss a profile on to save their email and photo and such $profile = $modx->newObject('modUserProfile'); $profile->fromArray(array( //old email line - isset($me['email']) ? $me['email'] : 'facebook-user@facebook.com' 'email' => isset($me['email']) ,'fullname' => $me['name'] ,'city' => $homet ,'photo'=> 'http://graph.facebook.com/'. $me['id'] .'/picture' )); $user->addOne($profile, 'Profile'); /** Login, (C) 2010, Jason Coward, Shaun McCormick**/ /* if usergroups set */ $usergroups = $modx->getOption('usergroups',$scriptProperties,''); if (!empty($usergroups)) { $usergroups = explode(',',$usergroups); foreach ($usergroups as $usergroupMeta) { $usergroupMeta = explode(':',$usergroupMeta); if (empty($usergroupMeta[0])) continue; /* get usergroup */ $pk = array(); $pk[intval($usergroupMeta[0]) > 0 ? 'id' : 'name'] = $usergroupMeta[0]; $usergroup = $modx->getObject('modUserGroup',$pk); if (!$usergroup) continue; /* get role */ $rolePk = !empty($usergroupMeta[1]) ? $usergroupMeta[1] : 'Member'; $role = $modx->getObject('modUserGroupRole',array('name' => $rolePk)); /* create membership */ $member = $modx->newObject('modUserGroupMember'); $member->set('member',0); $member->set('user_group',$usergroup->get('id')); if (!empty($role)) { $member->set('role',$role->get('id')); } else { $member->set('role',1); } $user->addMany($member,'UserGroupMembers'); }//end foreach }//end user grops /** End Login Code Block froom Login, (C) 2010 Jason Coward, Shaun McCormick **/ $saved = $user->save(); }//end if new user //new or not, they're logged in if(!$user->hasSessionContext('web')){ foreach ($contexts as $context) { $user->addSessionContext($context); } $modx->sendRedirect('/'); } } else { //else give them the chance to login /* This should parse the generated URL with a chunk, for now you can edit the image or text here */ $output.= ''; } return $output;