]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
trac750 Facebook App - generate HTML similar to uiredisign for everything
authorZach Copley <zach@controlyourself.ca>
Sun, 18 Jan 2009 01:31:39 +0000 (01:31 +0000)
committerZach Copley <zach@controlyourself.ca>
Sun, 18 Jan 2009 01:31:39 +0000 (01:31 +0000)
actions/facebookhome.php
actions/facebookinvite.php
actions/facebooksettings.php
lib/facebookaction.php
lib/facebookutil.php

index b780b8cc323957a4365e2d4e5cd4df0c5b6d1aa0..46f886451c825188695b7d9492a913c529363a54 100644 (file)
@@ -19,7 +19,7 @@
 
 if (!defined('LACONICA')) { exit(1); }
 
-require_once(INSTALLDIR.'/lib/facebookaction.php');
+require_once INSTALLDIR.'/lib/facebookaction.php';
 
 class FacebookhomeAction extends FacebookAction
 {
@@ -35,6 +35,8 @@ class FacebookhomeAction extends FacebookAction
         $flink = Foreign_link::getByForeignID($fbuid, FACEBOOK_SERVICE);
 
         if ($flink) {
+            $user = $flink->getUser();
+            common_set_user($user);
             $this->showHome($flink, null);
         } else {
             $this->login($fbuid);
@@ -103,7 +105,7 @@ class FacebookhomeAction extends FacebookAction
         update_profile_box($facebook, $fbuid, $user, $notice);
 
 
-        $this->show_header('Home');
+        $this->showHeader('Home');
 
         if ($msg) {
             common_element('fb:success', array('message' => $msg));
@@ -111,7 +113,7 @@ class FacebookhomeAction extends FacebookAction
 
         echo $this->show_notices($user);
 
-        $this->show_footer();
+        $this->showFooter();
     }
 
     function show_notices($user)
@@ -132,7 +134,7 @@ class FacebookhomeAction extends FacebookAction
 
     function show_notice_list($notice)
     {
-        $nl = new NoticeList($notice);
+        $nl = new FacebookNoticeList($notice);
         return $nl->show();
     }
 
index fe0c5e49343a0129d162d639f52d4e49148e29d0..d7e82dae7b7cbb21acc33958b75718a2ae8ba943 100644 (file)
@@ -41,7 +41,7 @@ class FacebookinviteAction extends FacebookAction
         $facebook = get_facebook();
         $fbuid = $facebook->require_login();
 
-        $this->show_header('Invite');
+        $this->showHeader('Invite');
 
         common_element('h2', null, _('Thanks for inviting your friends to use Identi.ca!'));
         common_element('p', null, _('Invitations have been sent to the following users:'));
@@ -60,7 +60,7 @@ class FacebookinviteAction extends FacebookAction
 
         common_element_end("ul");
 
-        $this->show_footer();
+        $this->showFooter();
     }
 
     function showInviteForm()
@@ -69,7 +69,7 @@ class FacebookinviteAction extends FacebookAction
         $facebook = get_facebook();
         $fbuid = $facebook->require_login();
 
-        $this->show_header('Invite');
+        $this->showHeader('Invite');
 
         // Get a list of users who are already using the app for exclusion
         $exclude_ids = $facebook->api_client->friends_getAppUsers();
@@ -104,7 +104,7 @@ class FacebookinviteAction extends FacebookAction
 
         common_element_end("ul");
 
-        $this->show_footer();
+        $this->showFooter();
 
     }
 
index ab04ad82b56cd2a1dafee52989714a4868683732..eafd911236ede7c88a08047292f4db600828f14b 100644 (file)
@@ -19,7 +19,7 @@
 
 if (!defined('LACONICA')) { exit(1); }
 
-require_once(INSTALLDIR.'/lib/facebookaction.php');
+require_once INSTALLDIR.'/lib/facebookaction.php';
 
 class FacebooksettingsAction extends FacebookAction
 {
@@ -29,13 +29,13 @@ class FacebooksettingsAction extends FacebookAction
         parent::handle($args);
 
         if ($this->arg('save')) {
-            $this->save_settings();
+            $this->saveSettings();
         } else {
-            $this->show_form();
+            $this->showForm();
         }
     }
 
-    function save_settings() {
+    function saveSettings() {
 
         $noticesync = $this->arg('noticesync');
         $replysync = $this->arg('replysync');
@@ -59,14 +59,14 @@ class FacebooksettingsAction extends FacebookAction
         }
     }
 
-    function show_form($msg = null, $success = false) {
+    function showForm($msg = null, $success = false) {
 
         $facebook = get_facebook();
         $fbuid = $facebook->require_login();
 
         $flink = Foreign_link::getByForeignID($fbuid, FACEBOOK_SERVICE);
 
-        $this->show_header('Settings', $msg, $success);
+        $this->showHeader('Settings', $msg, $success);
 
         common_element_start('fb:if-section-not-added', array('section' => 'profile'));
         common_element('h2', null, _('Add an Identi.ca box to my profile'));
@@ -108,7 +108,7 @@ class FacebooksettingsAction extends FacebookAction
 
         }
 
-        $this->show_footer();
+        $this->showFooter();
     }
 
 }
index 3a00c71dd0108e72faf569edb23c98978d111786..1bf026281e79af5697d1f5311a62cb28f0d5b1b3 100644 (file)
  * along with this program.     If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('LACONICA')) { exit(1); }
+if (!defined('LACONICA')) { 
+    exit(1);
+}
 
-require_once(INSTALLDIR.'/lib/facebookutil.php');
+require_once INSTALLDIR.'/lib/facebookutil.php';
 
 class FacebookAction extends Action
 {
@@ -29,32 +31,67 @@ class FacebookAction extends Action
         parent::handle($args);
     }
 
-    function show_header($selected = 'Home', $msg = null, $success = false)
+    function showLogo(){
+        
+        global $xw;
+        
+        common_element('link', array('rel' => 'stylesheet',
+                                     'type' => 'text/css',
+                                     'href' => get_facebook_css()));
+
+        common_element_start('a', array('class' => 'url home bookmark',
+                                            'href' => common_local_url('public')));
+        if (common_config('site', 'logo') || file_exists(theme_file('logo.png'))) {
+            common_element('img', array('class' => 'logo photo',
+                'src' => (common_config('site', 'logo')) ? 
+                    common_config('site', 'logo') : theme_path('logo.png'),
+                'alt' => common_config('site', 'name')));
+        }
+         
+        common_element('span', array('class' => 'fn org'), common_config('site', 'name'));
+        common_element_end('a');
+    
+    }
+
+    function showHeader($selected = 'Home', $msg = null, $success = false)
     {
 
         start_fbml();
 
-        # Add a timestamp to the CSS file so Facebook cache wont ignore our changes
-        $ts = filemtime(theme_file('facebookapp.css'));
-        $cssurl = theme_path('facebookapp.css') . "?ts=$ts";
+        $this->showLogo();
 
-        common_element('link', array('rel' => 'stylesheet',
-                                     'type' => 'text/css',
-                                     'href' => $cssurl));
+        common_element_start('dl', array("id" => 'site_nav_local_views'));
+        common_element('dt', null, _('Local Views'));
+        common_element_start('dd');
+
+        common_element_start('ul', array('class' => 'nav'));
+
+        common_element_start('li', array('class' => 
+            ($selected == 'Home') ? 'current' : 'facebook_home'));
+        common_element('a', 
+            array('href' => 'index.php', 'title' => _('Home')), _('Home'));
+        common_element_end('li');
 
-        common_element('fb:dashboard');
+        
+        common_element_start('li', 
+            array('class' =>
+                ($selected == 'Invite') ? 'current' : 'facebook_invite'));
+        common_element('a', 
+            array('href' => 'invite.php', 'title' => _('Invite')), _('Invite'));
+        common_element_end('li');
 
-        common_element_start('fb:tabs');
-        common_element('fb:tab-item', array('title' => 'Home',
-                                            'href' => 'index.php',
-                                            'selected' => ($selected == 'Home')));
-        common_element('fb:tab-item', array('title' => 'Invite',
-                                            'href' => 'invite.php',
-                                            'selected' => ($selected == 'Invite')));
-        common_element('fb:tab-item', array('title' => 'Settings',
-                                            'href' => 'settings.php',
-                                            'selected' => ($selected == 'Settings')));
-        common_element_end('fb:tabs');
+        common_element_start('li', 
+            array('class' =>
+                ($selected == 'Settings') ? 'current' : 'facebook_settings'));
+        common_element('a', 
+            array('href' => 'settings.php', 
+                'title' => _('Settings')), _('Settings'));
+        common_element_end('li');
+
+        common_element_end('ul');
+
+        common_element_end('dd');
+        common_element_end('dl');
 
 
         if ($msg) {
@@ -69,44 +106,73 @@ class FacebookAction extends Action
 
     }
 
-    function show_footer()
+    function showFooter()
     {
         common_element_end('div');
         common_end_xml();
     }
 
+
+    function showInstructions()
+    {
+        global $xw; 
+        
+        common_element_start('dl', array('class' => 'system_notice'));
+        common_element('dt', null, 'Page Notice');
+    
+        $loginmsg_part1 = _('To use the %s Facebook Application you need to login ' .
+            'with your username and password. Don\'t have a username yet? '); 
+        
+        $loginmsg_part2 = _(' a new account.');
+        
+        common_element_start('dd');
+        common_element_start('p');
+        common_text(sprintf($loginmsg_part1, common_config('site', 'name')));
+        common_element('a', 
+            array('href' => common_local_url('register')), _('Register'));
+        common_text($loginmsg_part2);
+        common_element_end('dd');
+        common_element_end('dl');        
+    }
+
     function showLoginForm($msg = null)
     {
         start_fbml();
 
-        common_element_start('a', array('href' => 'http://identi.ca'));
-        common_element('img', array('src' => 'http://theme.identi.ca/identica/logo.png',
-                                    'alt' => 'Identi.ca',
-                                    'id' => 'logo'));
-        common_element_end('a');
+        common_element('link', array('rel' => 'stylesheet',
+                                     'type' => 'text/css',
+                                     'href' => get_facebook_css()));
 
+
+        $this->showLogo();
+                                 
+        common_element_start('div', array('class' => 'content'));
+        common_element('h1', null, _('Login'));
+   
         if ($msg) {
              common_element('fb:error', array('message' => $msg));
         }
+        
+        $this->showInstructions();
 
-        common_element("h2", null,
-            _('To add the Identi.ca application, you need to log into your Identi.ca account.'));
-
+        common_element_start('div', array('id' => 'content_inner'));
 
-        common_element_start('div', array('class' => 'instructions'));
-        common_element_start('p');
-        common_raw('Login with your username and password. Don\'t have a username yet?'
-        .' <a href="http://identi.ca/main/register">Register</a> a new account.');
-        common_element_end('p');
-        common_element_end('div');
-
-        common_element_start('div', array('id' => 'content'));
         common_element_start('form', array('method' => 'post',
                                                'id' => 'login',
                                                'action' => 'index.php'));
+    
+        common_element_start('fieldset');
+        common_element('legend', null, _('Login to site'));
+        
+        common_element_start('ul', array('class' => 'form_datas'));
+        common_element_start('li');                                             
         common_input('nickname', _('Nickname'));
+        common_element_end('li');
+        common_element_start('li');
         common_password('password', _('Password'));
-
+        common_element_end('li');
+        common_element_end('ul');
+        
         common_submit('submit', _('Login'));
         common_element_end('form');
 
@@ -114,6 +180,7 @@ class FacebookAction extends Action
         common_element('a', array('href' => common_local_url('recoverpassword')),
                        _('Lost or forgotten password?'));
         common_element_end('p');
+        
         common_element_end('div');
 
         common_end_xml();
index 2529b8a4b8c6a9369be94dfb1ad9fee578a510de..532e9c9d74b1183486005dc50890682425b759ab 100644 (file)
@@ -17,8 +17,8 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-require_once(INSTALLDIR.'/extlib/facebook/facebook.php');
-require_once(INSTALLDIR.'/lib/noticelist.php');
+require_once INSTALLDIR.'/extlib/facebook/facebook.php';
+require_once INSTALLDIR.'/lib/noticelist.php';
 
 define("FACEBOOK_SERVICE", 2); // Facebook is foreign_service ID 2
 
@@ -94,7 +94,7 @@ function update_profile_box($facebook, $fbuid, $user, $notice)
     $xw = new XMLWriter();
     $xw->openMemory();
 
-    $item = new NoticeListItem($notice);
+    $item = new FacebookNoticeListItem($notice);
     $item->show();
 
     $fbml = "<fb:wide>$style " . $xw->outputMemory(false) . "</fb:wide>";
@@ -104,3 +104,130 @@ function update_profile_box($facebook, $fbuid, $user, $notice)
 
     $facebook->api_client->profile_setFBML(null, $fbuid, $fbml, null, null, $fbml_main);
 }
+
+function get_facebook_css()
+{    
+    # Add a timestamp to the CSS file so Facebook cache wont ignore our changes
+    $ts = filemtime(theme_file('facebookapp.css'));
+    $cssurl = theme_path('facebookapp.css') . "?ts=$ts";   
+    return $cssurl;
+}
+
+
+class FacebookNoticeList extends NoticeList
+{
+    /**
+     * show the list of notices
+     *
+     * "Uses up" the stream by looping through it. So, probably can't
+     * be called twice on the same list.
+     *
+     * @return int count of notices listed.
+     */
+
+    function show()
+    {
+        common_element_start('div', array('id' =>'notices_primary'));
+        common_element('h2', null, _('Notices'));
+        common_element_start('ul', array('class' => 'notices'));
+
+        $cnt = 0;
+
+        while ($this->notice->fetch() && $cnt <= NOTICES_PER_PAGE) {
+            $cnt++;
+
+            if ($cnt > NOTICES_PER_PAGE) {
+                break;
+            }
+
+            $item = $this->newListItem($this->notice);
+            $item->show();
+        }
+
+        common_element_end('ul');
+        common_element_end('div');
+
+        return $cnt;
+    }
+    
+    /**
+     * returns a new list item for the current notice
+     *
+     * Overridden to return a Facebook specific list item.
+     *
+     * @param Notice $notice the current notice
+     *
+     * @return FacebookNoticeListItem a list item for displaying the notice
+     * formatted for display in the Facebook App.
+     */
+
+    function newListItem($notice)
+    {
+        return new FacebookNoticeListItem($notice);
+    }
+    
+}
+
+class FacebookNoticeListItem extends NoticeListItem
+{
+    /**
+     * recipe function for displaying a single notice in the Facebook App.
+     *
+     * Overridden to strip out some of the controls that we don't
+     * want to be available.
+     *
+     * @return void
+     */
+
+    function show()
+    {
+        $this->showStart();
+        
+        common_element_start('div', 'entry-title');
+        $this->showAuthor();
+        $this->showContent();
+        common_element_end('div');
+
+        common_element_start('div', 'entry-content');
+        $this->showNoticeLink();
+        $this->showNoticeSource();
+        $this->showReplyTo();
+        common_element_end('div');
+        
+        $this->showEnd();
+    }
+    
+    function showStart()
+    {
+        // XXX: RDFa
+        // TODO: add notice_type class e.g., notice_video, notice_image
+        common_element_start('li', array('class' => 'hentry notice',
+                                         'id' => 'notice-' . $this->notice->id));
+    }
+
+    function showNoticeLink()
+    {
+        $noticeurl = common_local_url('shownotice',
+                                      array('notice' => $this->notice->id));
+        // XXX: we need to figure this out better. Is this right?
+        if (strcmp($this->notice->uri, $noticeurl) != 0 &&
+            preg_match('/^http/', $this->notice->uri)) {
+            $noticeurl = $this->notice->uri;
+        }
+        
+        common_element_start('dl', 'timestamp');
+        common_element('dt', null, _('Published')); 
+        common_element_start('dd', null);
+        common_element_start('a', array('rel' => 'bookmark',
+                                        'href' => $noticeurl));
+        $dt = common_date_iso8601($this->notice->created);
+        common_element('abbr', array('class' => 'published',
+                                     'title' => $dt),
+        common_date_string($this->notice->created));
+        common_element_end('a');
+        common_element_end('dd');
+        common_element_end('dl');
+    }
+
+} 
+