]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Work in progress on getting the frontend Yammer import form going....
authorBrion Vibber <brion@pobox.com>
Sat, 25 Sep 2010 00:22:44 +0000 (17:22 -0700)
committerBrion Vibber <brion@pobox.com>
Tue, 28 Sep 2010 14:44:25 +0000 (07:44 -0700)
plugins/YammerImport/YammerImportPlugin.php
plugins/YammerImport/actions/yammeradminpanel.php
plugins/YammerImport/actions/yammerauth.php
plugins/YammerImport/lib/yammerauthinitform.php [new file with mode: 0644]
plugins/YammerImport/lib/yammerauthverifyform.php [new file with mode: 0644]
plugins/YammerImport/lib/yammerprogressform.php [new file with mode: 0644]

index 85eab74c041bcda672dfa9a9a0f658e7742d4cce..bb1e976186a93a7b08cb0e86e9e438c06491618b 100644 (file)
@@ -36,6 +36,8 @@ class YammerImportPlugin extends Plugin
     {
         $m->connect('admin/yammer',
                     array('action' => 'yammeradminpanel'));
+        $m->connect('admin/yammer/auth',
+                    array('action' => 'yammerauth'));
         return true;
     }
 
@@ -117,10 +119,14 @@ class YammerImportPlugin extends Plugin
         case 'sn_yammerclient':
         case 'yammerimporter':
         case 'yammerrunner':
+        case 'yammerauthinitform':
+        case 'yammerauthverifyform':
+        case 'yammerprogressform':
             require_once "$base/lib/$lower.php";
             return false;
         case 'yammeradminpanelaction':
-            require_once "$base/actions/yammeradminpanel.php";
+            $crop = substr($lower, 0, strlen($lower) - strlen('action'));
+            require_once "$base/actions/$crop.php";
             return false;
         case 'yammer_state':
         case 'yammer_notice_stub':
index 13c95e37f70e12bbb70ba36ca6ae23632202bd6d..56e721d03c6766668c6a303583fffb468e02f6d1 100644 (file)
@@ -53,170 +53,79 @@ class YammeradminpanelAction extends AdminPanelAction
         return _m('Yammer import tool');
     }
 
-    /**
-     * Show the Yammer admin panel form
-     *
-     * @return void
-     */
-    function showForm()
+    function prepare($args)
     {
-        $form = new YammerAdminPanelForm($this);
-        $form->show();
-        return;
-    }
+        $ok = parent::prepare($args);
 
-    function showStylesheets()
-    {
-        parent::showStylesheets();
-        $this->cssLink('plugins/YammerImport/css/admin.css', null, 'screen, projection, tv');
-    }
-}
+        $this->init_auth = $this->trimmed('init_auth');
+        $this->verify_token = $this->trimmed('verify_token');
 
-class YammerAdminPanelForm extends AdminForm
-{
-    /**
-     * ID of the form
-     *
-     * @return string ID of the form
-     */
-    function id()
-    {
-        return 'yammeradminpanel';
+        return $ok;
     }
 
-    /**
-     * class of the form
-     *
-     * @return string class of the form
-     */
-    function formClass()
+    function handle($args)
     {
-        return 'form_settings';
+        if ($this->init_auth) {
+            $url = $runner->requestAuth();
+            $form = new YammerAuthVerifyForm($this, $url);
+            return $this->showAjaxForm($form);
+        } else if ($this->verify_token) {
+            $runner->saveAuthToken($this->verify_token);
+            $form = new YammerAuthProgressForm();
+            return $this->showAjaxForm($form);
+        }
+
+        return parent::handle($args);
     }
 
-    /**
-     * Action of the form
-     *
-     * @return string URL of the action
-     */
-    function action()
+    function showAjaxForm($form)
     {
-        return common_local_url('yammeradminpanel');
+        $this->startHTML('text/xml;charset=utf-8');
+        $this->elementStart('head');
+        $this->element('title', null, _m('Yammer import'));
+        $this->elementEnd('head');
+        $this->elementStart('body');
+        $form->show();
+        $this->elementEnd('body');
+        $this->elementEnd('html');
     }
 
     /**
-     * Data elements of the form
+     * Show the Yammer admin panel form
      *
      * @return void
      */
-    function formData()
+    function showForm()
     {
+        $this->elementStart('fieldset');
+
         $runner = YammerRunner::init();
 
         switch($runner->state())
         {
             case 'init':
+                $form = new YammerAuthInitForm($this);
+                break;
             case 'requesting-auth':
-                $this->showAuthForm();
+                $form = new YammerAuthVerifyForm($this, $runner);
+                break;
             default:
+                $form = new YammerProgressForm($this, $runner);
         }
-        $this->showImportState($runner);
-    }
-
-    private function showAuthForm()
-    {
-        $this->out->element('p', array(), 'show an auth form');
-    }
-
-    private function showImportState(YammerRunner $runner)
-    {
-        $userCount = $runner->countUsers();
-        $groupCount = $runner->countGroups();
-        $fetchedCount = $runner->countFetchedNotices();
-        $savedCount = $runner->countSavedNotices();
-
-        $labels = array(
-            'init' => array(
-                'label' => _m("Initialize"),
-                'progress' => _m('No import running'),
-                'complete' => _m('Initiated Yammer server connection...'),
-            ),
-            'requesting-auth' => array(
-                'label' => _m('Connect to Yammer'),
-                'progress' => _m('Awaiting authorization...'),
-                'complete' => _m('Connected.'),
-            ),
-            'import-users' => array(
-                'label' => _m('Import user accounts'),
-                'progress' => sprintf(_m("Importing %d user...", "Importing %d users...", $userCount), $userCount),
-                'complete' => sprintf(_m("Imported %d user.", "Imported %d users.", $userCount), $userCount),
-            ),
-            'import-groups' => array(
-                'label' => _m('Import user groups'),
-                'progress' => sprintf(_m("Importing %d group...", "Importing %d groups...", $groupCount), $groupCount),
-                'complete' => sprintf(_m("Imported %d group.", "Imported %d groups.", $groupCount), $groupCount),
-            ),
-            'fetch-messages' => array(
-                'label' => _m('Prepare public notices for import'),
-                'progress' => sprintf(_m("Preparing %d notice...", "Preparing %d notices...", $fetchedCount), $fetchedCount),
-                'complete' => sprintf(_m("Prepared %d notice.", "Prepared %d notices.", $fetchedCount), $fetchedCount),
-            ),
-            'save-messages' => array(
-                'label' => _m('Import public notices'),
-                'progress' => sprintf(_m("Importing %d notice...", "Importing %d notices...", $savedCount), $savedCount),
-                'complete' => sprintf(_m("Imported %d notice.", "Imported %d notices.", $savedCount), $savedCount),
-            ),
-            'done' => array(
-                'label' => _m('Done'),
-                'progress' => sprintf(_m("Import is complete!")),
-                'complete' => sprintf(_m("Import is complete!")),
-            )
-        );
-        $steps = array_keys($labels);
-        $currentStep = array_search($runner->state(), $steps);
+        $form->show();
 
-        $this->out->elementStart('fieldset', array('class' => 'yammer-import'));
-        $this->out->element('legend', array(), _m('Import status'));
-        foreach ($steps as $step => $state) {
-            if ($step < $currentStep) {
-                // This step is done
-                $this->progressBar($state,
-                                   'complete',
-                                   $labels[$state]['label'],
-                                   $labels[$state]['complete']);
-            } else if ($step == $currentStep) {
-                // This step is in progress
-                $this->progressBar($state,
-                                   'progress',
-                                   $labels[$state]['label'],
-                                   $labels[$state]['progress']);
-            } else {
-                // This step has not yet been done.
-                $this->progressBar($state,
-                                   'waiting',
-                                   $labels[$state]['label'],
-                                   _m("Waiting..."));
-            }
-        }
-        $this->out->elementEnd('fieldset');
+        $this->elementEnd('fieldset');
     }
 
-    private function progressBar($state, $class, $label, $status)
+    function showStylesheets()
     {
-        // @fixme prettify ;)
-        $this->out->elementStart('div', array('class' => "import-step import-step-$state $class"));
-        $this->out->element('div', array('class' => 'import-label'), $label);
-        $this->out->element('div', array('class' => 'import-status'), $status);
-        $this->out->elementEnd('div');
+        parent::showStylesheets();
+        $this->cssLink('plugins/YammerImport/css/admin.css', null, 'screen, projection, tv');
     }
 
-    /**
-     * Action elements
-     *
-     * @return void
-     */
-    function formActions()
+    function showScripts()
     {
-        // No submit buttons needed at bottom
+        parent::showScripts();
+        $this->script('plugins/YammerImport/js/yammer-admin.js');
     }
 }
index 7e6e7204ae25e0257c12472d253353350710d9e0..d0d4b40c71298256f3e5c8d13275f30f99f7ca18 100644 (file)
@@ -1,17 +1,79 @@
 <?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Yammer import administration panel
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Settings
+ * @package   StatusNet
+ * @author    Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
 
+if (!defined('STATUSNET')) {
+    exit(1);
+}
 
-function showYammerAuth()
+class YammerauthAction extends AdminPanelAction
 {
-    $token = $yam->requestToken();
-    $url = $yam->authorizeUrl($token);
 
-    // We're going to try doing this in an iframe; if that's not happy
-    // we can redirect but there doesn't seem to be a way to get Yammer's
-    // oauth to call us back instead of the manual copy. :(
+    /**
+     * Show the Yammer admin panel form
+     *
+     * @return void
+     */
+    function prepare($args)
+    {
+        parent::prepare($args);
+        
+        $this->verify_token = $this->trim('verify_token');
+    }
+
+    /**
+     * Handle request
+     *
+     * Does the subscription and returns results.
+     *
+     * @param Array $args unused.
+     *
+     * @return void
+     */
+
+    function handle($args)
+    {
+        if ($this->verify_token) {
+            $runner->saveAuthToken($this->verify_token);
+            $form = new YammerAuthProgressForm();
+        } else {
+            $url = $runner->requestAuth();
+            $form = new YammerAuthVerifyForm($this, $url);
+        }
 
-    //common_redirect($url, 303);
-    $this->element('iframe', array('id' => 'yammer-oauth',
-                                   'src' => $url));
+        $this->startHTML('text/xml;charset=utf-8');
+        $this->elementStart('head');
+        $this->element('title', null, _m('Connect to Yammer'));
+        $this->elementEnd('head');
+        $this->elementStart('body');
+        $form->show();
+        $this->elementEnd('body');
+        $this->elementEnd('html');
+    }
 }
 
diff --git a/plugins/YammerImport/lib/yammerauthinitform.php b/plugins/YammerImport/lib/yammerauthinitform.php
new file mode 100644 (file)
index 0000000..559ec4e
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+class YammerAuthInitForm extends Form
+{
+    /**
+     * ID of the form
+     *
+     * @return int ID of the form
+     */
+
+    function id()
+    {
+        return 'yammer-auth-init-form';
+    }
+
+
+    /**
+     * class of the form
+     *
+     * @return string of the form class
+     */
+
+    function formClass()
+    {
+        return 'form_yammer_auth_init';
+    }
+
+
+    /**
+     * Action of the form
+     *
+     * @return string URL of the action
+     */
+
+    function action()
+    {
+        return common_local_url('yammeradminpanel');
+    }
+
+
+    /**
+     * Legend of the Form
+     *
+     * @return void
+     */
+    function formLegend()
+    {
+        $this->out->element('legend', null, _m('Connect to Yammer'));
+    }
+
+    /**
+     * Data elements of the form
+     *
+     * @return void
+     */
+
+    function formData()
+    {
+    }
+
+    /**
+     * Action elements
+     *
+     * @return void
+     */
+
+    function formActions()
+    {
+        $this->out->submit('submit', _m('Connect to Yammer'), 'submit', null, _m('Request authorization to connect to Yammer account'));
+    }
+}
diff --git a/plugins/YammerImport/lib/yammerauthverifyform.php b/plugins/YammerImport/lib/yammerauthverifyform.php
new file mode 100644 (file)
index 0000000..488b5b8
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+
+class YammerAuthVerifyForm extends Form
+{
+    private $verify_url;
+
+    function __construct($out, $auth_url)
+    {
+        parent::__construct($out);
+        $this->verify_url = $auth_url;
+    }
+
+    /**
+     * ID of the form
+     *
+     * @return int ID of the form
+     */
+
+    function id()
+    {
+        return 'yammer-auth-verify-form';
+    }
+
+
+    /**
+     * class of the form
+     *
+     * @return string of the form class
+     */
+
+    function formClass()
+    {
+        return 'form_yammer_auth_verify';
+    }
+
+
+    /**
+     * Action of the form
+     *
+     * @return string URL of the action
+     */
+
+    function action()
+    {
+        return common_local_url('yammeradminpanel');
+    }
+
+
+    /**
+     * Legend of the Form
+     *
+     * @return void
+     */
+    function formLegend()
+    {
+        $this->out->element('legend', null, _m('Connect to Yammer'));
+    }
+
+    /**
+     * Data elements of the form
+     *
+     * @return void
+     */
+
+    function formData()
+    {
+    }
+
+    /**
+     * Action elements
+     *
+     * @return void
+     */
+
+    function formActions()
+    {
+        $this->out->input('verify-code', _m('Verification code:'), '', _m("Click through and paste the code it gives you below..."));
+        $this->out->submit('submit', _m('Verify code'), 'submit', null, _m('Verification code'));
+        $this->element('iframe', array('id' => 'yammer-oauth',
+                                       'src' => $this->auth_url));
+    }
+}
diff --git a/plugins/YammerImport/lib/yammerprogressform.php b/plugins/YammerImport/lib/yammerprogressform.php
new file mode 100644 (file)
index 0000000..776efa1
--- /dev/null
@@ -0,0 +1,128 @@
+<?php
+
+class YammerProgressForm extends Form
+{
+    /**
+     * ID of the form
+     *
+     * @return string ID of the form
+     */
+    function id()
+    {
+        return 'yammer-progress';
+    }
+
+    /**
+     * class of the form
+     *
+     * @return string class of the form
+     */
+    function formClass()
+    {
+        return 'form_settings';
+    }
+
+    /**
+     * Action of the form
+     *
+     * @return string URL of the action
+     */
+    function action()
+    {
+        return common_local_url('yammeradminpanel');
+    }
+
+    /**
+     * Data elements of the form
+     *
+     * @return void
+     */
+    function formData()
+    {
+        $runner = YammerRunner::init();
+
+        $userCount = $runner->countUsers();
+        $groupCount = $runner->countGroups();
+        $fetchedCount = $runner->countFetchedNotices();
+        $savedCount = $runner->countSavedNotices();
+
+        $labels = array(
+            'init' => array(
+                'label' => _m("Initialize"),
+                'progress' => _m('No import running'),
+                'complete' => _m('Initiated Yammer server connection...'),
+            ),
+            'requesting-auth' => array(
+                'label' => _m('Connect to Yammer'),
+                'progress' => _m('Awaiting authorization...'),
+                'complete' => _m('Connected.'),
+            ),
+            'import-users' => array(
+                'label' => _m('Import user accounts'),
+                'progress' => sprintf(_m("Importing %d user...", "Importing %d users...", $userCount), $userCount),
+                'complete' => sprintf(_m("Imported %d user.", "Imported %d users.", $userCount), $userCount),
+            ),
+            'import-groups' => array(
+                'label' => _m('Import user groups'),
+                'progress' => sprintf(_m("Importing %d group...", "Importing %d groups...", $groupCount), $groupCount),
+                'complete' => sprintf(_m("Imported %d group.", "Imported %d groups.", $groupCount), $groupCount),
+            ),
+            'fetch-messages' => array(
+                'label' => _m('Prepare public notices for import'),
+                'progress' => sprintf(_m("Preparing %d notice...", "Preparing %d notices...", $fetchedCount), $fetchedCount),
+                'complete' => sprintf(_m("Prepared %d notice.", "Prepared %d notices.", $fetchedCount), $fetchedCount),
+            ),
+            'save-messages' => array(
+                'label' => _m('Import public notices'),
+                'progress' => sprintf(_m("Importing %d notice...", "Importing %d notices...", $savedCount), $savedCount),
+                'complete' => sprintf(_m("Imported %d notice.", "Imported %d notices.", $savedCount), $savedCount),
+            ),
+            'done' => array(
+                'label' => _m('Done'),
+                'progress' => sprintf(_m("Import is complete!")),
+                'complete' => sprintf(_m("Import is complete!")),
+            )
+        );
+        $steps = array_keys($labels);
+        $currentStep = array_search($runner->state(), $steps);
+
+        $this->out->elementStart('fieldset', array('class' => 'yammer-import'));
+        $this->out->element('legend', array(), _m('Import status'));
+        foreach ($steps as $step => $state) {
+            if ($state == 'init') {
+                // Don't show 'init', it's boring.
+                continue;
+            }
+            if ($step < $currentStep) {
+                // This step is done
+                $this->progressBar($state,
+                                   'complete',
+                                   $labels[$state]['label'],
+                                   $labels[$state]['complete']);
+            } else if ($step == $currentStep) {
+                // This step is in progress
+                $this->progressBar($state,
+                                   'progress',
+                                   $labels[$state]['label'],
+                                   $labels[$state]['progress']);
+            } else {
+                // This step has not yet been done.
+                $this->progressBar($state,
+                                   'waiting',
+                                   $labels[$state]['label'],
+                                   _m("Waiting..."));
+            }
+        }
+        $this->out->elementEnd('fieldset');
+    }
+
+    private function progressBar($state, $class, $label, $status)
+    {
+        // @fixme prettify ;)
+        $this->out->elementStart('div', array('class' => "import-step import-step-$state $class"));
+        $this->out->element('div', array('class' => 'import-label'), $label);
+        $this->out->element('div', array('class' => 'import-status'), $status);
+        $this->out->elementEnd('div');
+    }
+
+}