]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - actions/facebookhome.php
46f886451c825188695b7d9492a913c529363a54
[quix0rs-gnu-social.git] / actions / facebookhome.php
1 <?php
2 /*
3  * Laconica - a distributed open-source microblogging tool
4  * Copyright (C) 2008, Controlez-Vous, Inc.
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.     If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 if (!defined('LACONICA')) { exit(1); }
21
22 require_once INSTALLDIR.'/lib/facebookaction.php';
23
24 class FacebookhomeAction extends FacebookAction
25 {
26
27     function handle($args)
28     {
29         parent::handle($args);
30
31         $facebook = get_facebook();
32         $fbuid = $facebook->require_login();
33
34         // Check to see whether there's already a Facebook link for this user
35         $flink = Foreign_link::getByForeignID($fbuid, FACEBOOK_SERVICE);
36
37         if ($flink) {
38             $user = $flink->getUser();
39             common_set_user($user);
40             $this->showHome($flink, null);
41         } else {
42             $this->login($fbuid);
43         }
44
45     }
46
47     function login($fbuid)
48     {
49         $nickname = common_canonical_nickname($this->trimmed('nickname'));
50         $password = $this->arg('password');
51
52         $msg = null;
53
54         if ($nickname) {
55
56             if (common_check_user($nickname, $password)) {
57
58                 $user = User::staticGet('nickname', $nickname);
59
60                 if (!$user) {
61                     $this->showLoginForm(_("Server error - couldn't get user!"));
62                 }
63
64                 $flink = DB_DataObject::factory('foreign_link');
65                 $flink->user_id = $user->id;
66                 $flink->foreign_id = $fbuid;
67                 $flink->service = FACEBOOK_SERVICE;
68                 $flink->created = common_sql_now();
69                 $flink->set_flags(true, false, false);
70
71                 $flink_id = $flink->insert();
72
73                 // XXX: Do some error handling here
74
75                 $this->setDefaults();
76                 $this->showHome($flink, _('You can now use Identi.ca from Facebook!'));
77                 return;
78                 
79             } else {
80                 $msg = _('Incorrect username or password.');
81             }
82         }
83
84         $this->showLoginForm($msg);
85         
86     }
87
88     function setDefaults()
89     {
90         $facebook = get_facebook();
91
92         // A default prefix string for notices
93         $facebook->api_client->data_setUserPreference(1, 'dented: ');
94     }
95
96     function showHome($flink, $msg)
97     {
98
99         $facebook = get_facebook();
100         $fbuid = $facebook->require_login();
101
102         $user = $flink->getUser();
103
104         $notice = $user->getCurrentNotice();
105         update_profile_box($facebook, $fbuid, $user, $notice);
106
107
108         $this->showHeader('Home');
109
110         if ($msg) {
111             common_element('fb:success', array('message' => $msg));
112         }
113
114         echo $this->show_notices($user);
115
116         $this->showFooter();
117     }
118
119     function show_notices($user)
120     {
121
122         $page = $this->trimmed('page');
123         if (!$page) {
124             $page = 1;
125         }
126
127         $notice = $user->noticesWithFriends(($page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
128
129         $cnt = $this->show_notice_list($notice);
130
131         common_pagination($page > 1, $cnt > NOTICES_PER_PAGE,
132                           $page, 'all', array('nickname' => $user->nickname));
133     }
134
135     function show_notice_list($notice)
136     {
137         $nl = new FacebookNoticeList($notice);
138         return $nl->show();
139     }
140
141 }