]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/TwitterBridge/twittersettings.php
Merge branch 'atompub' into 0.9.x
[quix0rs-gnu-social.git] / plugins / TwitterBridge / twittersettings.php
index a3e02e125673a6a8a4b3a4bfd77dd38aeb095761..c169172b0000f980c80137fabf130ad0975473c5 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Laconica, the distributed open-source microblogging tool
+ * StatusNet, the distributed open-source microblogging tool
  *
  * Settings for Twitter integration
  *
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  * @category  Settings
- * @package   Laconica
- * @author    Evan Prodromou <evan@controlyourself.ca>
- * @copyright 2008-2009 Control Yourself, Inc.
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2008-2009 StatusNet, Inc.
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link      http://laconi.ca/
+ * @link      http://status.net/
  */
 
-if (!defined('LACONICA')) {
+if (!defined('STATUSNET') && !defined('LACONICA')) {
     exit(1);
 }
 
-require_once INSTALLDIR.'/lib/connectsettingsaction.php';
-require_once INSTALLDIR.'/lib/twitter.php';
+require_once INSTALLDIR . '/lib/connectsettingsaction.php';
+require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
 
 /**
  * Settings for Twitter integration
  *
  * @category Settings
- * @package  Laconica
- * @author   Evan Prodromou <evan@controlyourself.ca>
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://laconi.ca/
+ * @link     http://status.net/
  *
  * @see      SettingsAction
  */
-
 class TwittersettingsAction extends ConnectSettingsAction
 {
     /**
@@ -56,7 +55,7 @@ class TwittersettingsAction extends ConnectSettingsAction
 
     function title()
     {
-        return _('Twitter settings');
+        return _m('Twitter settings');
     }
 
     /**
@@ -67,19 +66,18 @@ class TwittersettingsAction extends ConnectSettingsAction
 
     function getInstructions()
     {
-        return _('Connect your Twitter account to share your updates ' .
-                 'with your Twitter friends and vice-versa.');
+        return _m('Connect your Twitter account to share your updates ' .
+                  'with your Twitter friends and vice-versa.');
     }
 
     /**
      * Content area of the page
      *
      * Shows a form for associating a Twitter account with this
-     * Laconica account. Also lets the user set preferences.
+     * StatusNet account. Also lets the user set preferences.
      *
      * @return void
      */
-
     function showContent()
     {
 
@@ -115,52 +113,80 @@ class TwittersettingsAction extends ConnectSettingsAction
 
             $this->elementEnd('fieldset');
         } else {
-            $this->element('legend', null, _('Twitter account'));
+            $this->element('legend', null, _m('Twitter account'));
             $this->elementStart('p', array('id' => 'form_confirmed'));
             $this->element('a', array('href' => $fuser->uri), $fuser->nickname);
             $this->elementEnd('p');
             $this->element('p', 'form_note',
-                           _('Connected Twitter account'));
+                           _m('Connected Twitter account'));
+            $this->elementEnd('fieldset');
+
+            $this->elementStart('fieldset');
+
+            $this->element('legend', null, _m('Disconnect my account from Twitter'));
+
+            if (!$user->password) {
+
+                $this->elementStart('p', array('class' => 'form_guide'));
+                // @todo FIXME: Bad i18n (patchwork in three parts).
+                $this->text(_m('Disconnecting your Twitter ' .
+                               'could make it impossible to log in! Please '));
+                $this->element('a',
+                    array('href' => common_local_url('passwordsettings')),
+                        _m('set a password'));
 
-            $this->submit('remove', _('Remove'));
+                $this->text(_m(' first.'));
+                $this->elementEnd('p');
+            } else {
+                // TRANS: %1$s is the current website name.
+                $note = _m('Keep your %1$s account but disconnect from Twitter. ' .
+                    'You can use your %1$s password to log in.');
+
+                $site = common_config('site', 'name');
+
+                $this->element('p', 'instructions',
+                    sprintf($note, $site));
+
+                $this->submit('disconnect', _m('Disconnect'));
+            }
 
             $this->elementEnd('fieldset');
 
             $this->elementStart('fieldset', array('id' => 'settings_twitter_preferences'));
 
-            $this->element('legend', null, _('Preferences'));
+            $this->element('legend', null, _m('Preferences'));
             $this->elementStart('ul', 'form_data');
             $this->elementStart('li');
             $this->checkbox('noticesend',
-                            _('Automatically send my notices to Twitter.'),
+                            _m('Automatically send my notices to Twitter.'),
                             ($flink) ?
                             ($flink->noticesync & FOREIGN_NOTICE_SEND) :
                             true);
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->checkbox('replysync',
-                            _('Send local "@" replies to Twitter.'),
+                            _m('Send local "@" replies to Twitter.'),
                             ($flink) ?
                             ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) :
                             true);
             $this->elementEnd('li');
             $this->elementStart('li');
             $this->checkbox('friendsync',
-                            _('Subscribe to my Twitter friends here.'),
+                            _m('Subscribe to my Twitter friends here.'),
                             ($flink) ?
                             ($flink->friendsync & FOREIGN_FRIEND_RECV) :
                             false);
             $this->elementEnd('li');
 
-            if (common_config('twitterbridge','enabled')) {
+            if (common_config('twitterimport','enabled')) {
                 $this->elementStart('li');
                 $this->checkbox('noticerecv',
-                                _('Import my Friends Timeline.'),
+                                _m('Import my friends timeline.'),
                                 ($flink) ?
                                 ($flink->noticesync & FOREIGN_NOTICE_RECV) :
                                 false);
                 $this->elementEnd('li');
-
+            } else {
                 // preserve setting even if bidrection bridge toggled off
 
                 if ($flink && ($flink->noticesync & FOREIGN_NOTICE_RECV)) {
@@ -171,9 +197,9 @@ class TwittersettingsAction extends ConnectSettingsAction
             $this->elementEnd('ul');
 
             if ($flink) {
-                $this->submit('save', _('Save'));
+                $this->submit('save', _m('Save'));
             } else {
-                $this->submit('add', _('Add'));
+                $this->submit('add', _m('Add'));
             }
 
             $this->elementEnd('fieldset');
@@ -192,23 +218,22 @@ class TwittersettingsAction extends ConnectSettingsAction
      *
      * @return void
      */
-
     function handlePost()
     {
         // CSRF protection
         $token = $this->trimmed('token');
         if (!$token || $token != common_session_token()) {
-            $this->showForm(_('There was a problem with your session token. '.
-                              'Try again, please.'));
+            $this->showForm(_m('There was a problem with your session token. '.
+                               'Try again, please.'));
             return;
         }
 
         if ($this->arg('save')) {
             $this->savePreferences();
-        } else if ($this->arg('remove')) {
+        } else if ($this->arg('disconnect')) {
             $this->removeTwitterAccount();
         } else {
-            $this->showForm(_('Unexpected form submission.'));
+            $this->showForm(_m('Unexpected form submission.'));
         }
     }
 
@@ -217,21 +242,25 @@ class TwittersettingsAction extends ConnectSettingsAction
      *
      * @return void
      */
-
     function removeTwitterAccount()
     {
         $user = common_current_user();
         $flink = Foreign_link::getByUserID($user->id, TWITTER_SERVICE);
 
-        $result = $flink->delete();
+        if (empty($flink)) {
+            $this->clientError(_m('No Twitter connection to remove.'));
+            return;
+        }
+
+        $result = $flink->safeDelete();
 
         if (empty($result)) {
             common_log_db_error($flink, 'DELETE', __FILE__);
-            $this->serverError(_('Couldn\'t remove Twitter user.'));
+            $this->serverError(_m('Couldn\'t remove Twitter user.'));
             return;
         }
 
-        $this->showForm(_('Twitter account removed.'), true);
+        $this->showForm(_m('Twitter account disconnected.'), true);
     }
 
     /**
@@ -239,7 +268,6 @@ class TwittersettingsAction extends ConnectSettingsAction
      *
      * @return void
      */
-
     function savePreferences()
     {
         $noticesend = $this->boolean('noticesend');
@@ -252,21 +280,34 @@ class TwittersettingsAction extends ConnectSettingsAction
 
         if (empty($flink)) {
             common_log_db_error($flink, 'SELECT', __FILE__);
-            $this->showForm(_('Couldn\'t save Twitter preferences.'));
+            $this->showForm(_m('Couldn\'t save Twitter preferences.'));
             return;
         }
 
         $original = clone($flink);
+        $wasReceiving = (bool)($original->noticesync & FOREIGN_NOTICE_RECV);
         $flink->set_flags($noticesend, $noticerecv, $replysync, $friendsync);
         $result = $flink->update($original);
 
         if ($result === false) {
             common_log_db_error($flink, 'UPDATE', __FILE__);
-            $this->showForm(_('Couldn\'t save Twitter preferences.'));
+            $this->showForm(_m('Couldn\'t save Twitter preferences.'));
             return;
         }
 
-        $this->showForm(_('Twitter preferences saved.'), true);
+        if ($wasReceiving xor $noticerecv) {
+            $this->notifyDaemon($flink->foreign_id, $noticerecv);
+        }
+
+        $this->showForm(_m('Twitter preferences saved.'), true);
+    }
+
+    /**
+     * Tell the import daemon that we've updated a user's receive status.
+     */
+    function notifyDaemon($twitterUserId, $receiving)
+    {
+        // todo... should use control signals rather than queues
     }
 
 }