Twitter prefs fixes
authorMichael J. Rubinsky <mrubinsk@horde.org>
Sun, 18 Jul 2010 16:20:02 +0000 (12:20 -0400)
committerMichael J. Rubinsky <mrubinsk@horde.org>
Sun, 18 Jul 2010 16:20:53 +0000 (12:20 -0400)
horde/lib/Prefs/Ui.php
horde/services/twitter.php
horde/templates/prefs/twitter.html [new file with mode: 0644]

index 6a0b9fd..fa267ac 100644 (file)
@@ -147,6 +147,9 @@ class Horde_Prefs_Ui
         case 'facebookmanagement':
             return $this->_facebookManagement($ui);
 
+        case 'twittermanagement':
+            return $this->_twitterManagement($ui);
+
         return '';
         }
     }
@@ -180,6 +183,9 @@ class Horde_Prefs_Ui
         case 'facebookmanagement':
             $this->_updateFacebookManagement($ui);
             break;
+
+        case 'twittermanagement':
+            $this->_updateTwitterManagement($ui);
         }
 
         return false;
@@ -555,6 +561,55 @@ class Horde_Prefs_Ui
         return $t->fetch(HORDE_TEMPLATES . '/prefs/facebook.html');
     }
 
+    protected function _twitterManagement($ui)
+    {
+        global $prefs, $registry;
+
+        $twitter = $GLOBALS['injector']->getInstance('Horde_Service_Twitter');
+        $token = unserialize($prefs->getValue('twitter'));
+
+        /* Check for an existing token */
+        if (!empty($token['key']) && !empty($token['secret'])) {
+            $auth_token = new Horde_Oauth_Token($token['key'], $token['secret']);
+            $twitter->auth->setToken($auth_token);
+        }
+        try {
+            $profile = Horde_Serialize::unserialize($twitter->account->verifyCredentials(), Horde_Serialize::JSON);
+        } catch (Horde_Service_Twitter_Exception $e) {}
+
+        $t = $GLOBALS['injector']->createInstance('Horde_Template');
+        $t->setOption('gettext', true);
+        $t->set('css_link', $GLOBALS['registry']->get('themesuri', 'horde') . '/facebook.css');
+
+        /* Could not find a valid auth token, and we are not in the process of getting one */
+        if (empty($profile)) {
+            try {
+                $results = $twitter->auth->getRequestToken();
+            } catch (Horde_Service_Twitter_Exception $e) {
+                $t->set('error', sprintf(_("Error connecting to Twitter: %s Details have been logged for the administrator."), $e->getMessage()), true);
+                //echo '<div class="fberrorbox">' . sprintf(_("Error connecting to Twitter: %s Details have been logged for the administrator."), $e->getMessage()) . '</div>';
+                //echo '</form>';
+                //require HORDE_TEMPLATES . '/common-footer.inc';
+                exit;
+            }
+            $_SESSION['twitter_request_secret'] = $results->secret;
+
+            $t->set('appname', $registry->get('name'));
+            $t->set('link', Horde::link(Horde::externalUrl($twitter->auth->getUserAuthorizationUrl($results), false), '', 'fbbutton', '', 'openTwitterWindow(); return false;') . 'Twitter</a>');
+            $t->set('popupjs', Horde::popupJs(Horde::externalUrl($twitter->auth->getUserAuthorizationUrl($results), false), array('urlencode' => true)));
+        } else {
+            /* We know we have a good Twitter token here, so check for any actions... */
+            $t->set('haveSession', true, true);
+            $t->set('profile_image_url', $profile->profile_image_url);
+            $t->set('profile_screenname', htmlspecialchars($profile->screen_name));
+            $t->set('profile_name', htmlspecialchars($profile->name));
+            $t->set('profile_location', htmlspecialchars($profile->location));
+            $t->set('appname', $registry->get('name'));
+        }
+
+        return $t->fetch(HORDE_TEMPLATES . '/prefs/twitter.html');
+    }
+
     /**
      * Update category related preferences.
      *
@@ -765,4 +820,25 @@ class Horde_Prefs_Ui
         }
     }
 
+    protected function _updateTwitterManagement($ui)
+    {
+        global $prefs, $registry;
+
+        $twitter = $GLOBALS['injector']->getInstance('Horde_Service_Twitter');
+        $token = unserialize($prefs->getValue('twitter'));
+
+        /* Check for an existing token */
+        if (!empty($token['key']) && !empty($token['secret'])) {
+            $auth_token = new Horde_Oauth_Token($token['key'], $token['secret']);
+            $twitter->auth->setToken($auth_token);
+        }
+
+        switch ($ui->vars->twitteractionID) {
+        case 'revokeInfinite':
+            $twitter->account->endSession();
+            $prefs->setValue('twitter', 'a:0:{}');
+            echo '<script type="text/javascript">location.href="' .  $url = Horde::url('services/prefs.php', true)->add(array('group' => 'twitter', 'app'  => 'horde')) . '";</script>';
+            exit;
+        }
+    }
 }
index 004b876..e81fece 100644 (file)
@@ -32,11 +32,6 @@ if (!empty($token['key']) && !empty($token['secret'])) {
 /* See if we are here for any actions */
 $action = Horde_Util::getPost('actionID');
 switch ($action) {
-case 'revokeInfinite':
-    $twitter->account->endSession();
-    $prefs->setValue('twitter', 'a:0:{}');
-    echo '<script type="text/javascript">location.href="' . Horde::selfUrl(false) . '?app=horde&nomenu=0&group=twitter";</script>';
-    exit;
 
 case 'updateStatus':
     $result = $twitter->statuses->update(Horde_Util::getPost('statusText'), Horde_Util::getPost('inReplyTo', ''));
@@ -148,28 +143,3 @@ if (!empty($auth_token)) {
         }
     }
 }
-
-/* Could not find a valid auth token, and we are not in the process of getting one */
-if (empty($profile)) {
-    try {
-        $results = $twitter->auth->getRequestToken();
-    } catch (Horde_Service_Twitter_Exception $e) {
-        echo '<div class="fberrorbox">' . sprintf(_("Error connecting to Twitter: %s Details have been logged for the administrator."), $e->getMessage()) . '</div>';
-        echo '</form>';
-        require HORDE_TEMPLATES . '/common-footer.inc';
-        exit;
-    }
-    $_SESSION['twitter_request_secret'] = $results->secret;
-    echo '<div class="fberrorbox">' . sprintf(_("Could not find authorization for %s to interact with your Twitter account."), $registry->get('name')) . '</div>';
-    $link = Horde::link(Horde::externalUrl($twitter->auth->getUserAuthorizationUrl($results), false), '', 'fbbutton', '', 'openTwitterWindow(); return false;');
-    echo '<script type="text/javascript">function openTwitterWindow() {' . Horde::popupJs(Horde::externalUrl($twitter->auth->getUserAuthorizationUrl($results), false), array('urlencode' => true)) . '}</script>';
-    echo sprintf(_("Login to Twitter and authorize the %s application:"), $registry->get('name')) . $link . 'Twitter</a>';
-} else {
-    /* We know we have a good Twitter token here, so check for any actions... */
-    echo '<div class="fbbluebox fbboxfont" style="float:left">';
-    echo '<span><img src="' . $profile->profile_image_url. '" alt="' . htmlspecialchars($profile->screen_name) . '" /></span>';
-    echo '<span><div>' . htmlspecialchars($profile->name) . '</div><div>' . htmlspecialchars($profile->location) . '</div></span>';
-    echo '</div><div class="clear">&nbsp;</div>';
-    echo '<div class="fbbluebox fbboxfont">' . sprintf(_("%s can interact with your Twitter account."), $registry->get('name'));
-    echo ' <div class="fbaction"><input type="submit" class="fbbutton" value="' . _("Disable") . '" onclick="document.prefs.actionID.value=\'revokeInfinite\'; return true" /></div></div>';
-}
diff --git a/horde/templates/prefs/twitter.html b/horde/templates/prefs/twitter.html
new file mode 100644 (file)
index 0000000..c03b967
--- /dev/null
@@ -0,0 +1,24 @@
+<link href="<tag:css_link />" rel="stylesheet" type="text/css" />
+<input type="hidden" name="twitteractionID" id="twitteractionID" />
+<if:haveSession>
+    <div class="fbbluebox fbboxfont" style="float:left">
+      <img src="<tag:profile_image_url />" alt="<tag:profile_screenname />" />
+      <div><tag:profile_name /></div><div><tag:profile_location /></div>
+    </div>
+    <div class="clear">&nbsp;</div>
+    <div class="fbbluebox fbboxfont">
+      <tag:appname /> <gettext>can interact with your Twitter account</gettext>.
+      <div class="fbaction"><input type="submit" class="fbbutton" value="<gettext>Disable</gettext>" onclick="document.prefs.twitteractionID.value='revokeInfinite'; return true" /></div>
+    </div>
+<else:haveSession>
+    <div class="fberrorbox">
+      <gettext>Could not find authorization for</gettext> <tag:appname /> <gettext>to interact with your Twitter account</gettext>
+    </div>
+    <script type="text/javascript">
+      function openTwitterWindow() {
+          <tag:popupjs />
+      }
+    </script>
+    <gettext>Login to Twitter and authorize the</gettext> <tag:appname /> <gettext>application</gettext>: <tag:link />
+</else:haveSession>
+</if:haveSession>
\ No newline at end of file