. */ if (!defined('LACONICA')) { exit(1); } require_once INSTALLDIR.'/lib/facebookaction.php'; class FacebookhomeAction extends FacebookAction { function handle($args) { parent::handle($args); $facebook = get_facebook(); $fbuid = $facebook->require_login(); // Check to see whether there's already a Facebook link for this user $flink = Foreign_link::getByForeignID($fbuid, FACEBOOK_SERVICE); if ($flink) { $user = $flink->getUser(); common_set_user($user); $this->showHome($flink, null); } else { $this->login($fbuid); } } function login($fbuid) { $nickname = common_canonical_nickname($this->trimmed('nickname')); $password = $this->arg('password'); $msg = null; if ($nickname) { if (common_check_user($nickname, $password)) { $user = User::staticGet('nickname', $nickname); if (!$user) { $this->showLoginForm(_("Server error - couldn't get user!")); } $flink = DB_DataObject::factory('foreign_link'); $flink->user_id = $user->id; $flink->foreign_id = $fbuid; $flink->service = FACEBOOK_SERVICE; $flink->created = common_sql_now(); $flink->set_flags(true, false, false); $flink_id = $flink->insert(); // XXX: Do some error handling here $this->setDefaults(); $this->showHome($flink, _('You can now use Identi.ca from Facebook!')); return; } else { $msg = _('Incorrect username or password.'); } } $this->showLoginForm($msg); } function setDefaults() { $facebook = get_facebook(); // A default prefix string for notices $facebook->api_client->data_setUserPreference(1, 'dented: '); } function showHome($flink, $msg) { $facebook = get_facebook(); $fbuid = $facebook->require_login(); $user = $flink->getUser(); $notice = $user->getCurrentNotice(); update_profile_box($facebook, $fbuid, $user, $notice); $this->showHeader('Home'); if ($msg) { common_element('fb:success', array('message' => $msg)); } echo $this->show_notices($user); $this->showFooter(); } function show_notices($user) { $page = $this->trimmed('page'); if (!$page) { $page = 1; } $notice = $user->noticesWithFriends(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1); $cnt = $this->show_notice_list($notice); common_pagination($page > 1, $cnt > NOTICES_PER_PAGE, $page, 'all', array('nickname' => $user->nickname)); } function show_notice_list($notice) { $nl = new FacebookNoticeList($notice); return $nl->show(); } }