]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Initial progress display of Yammer import state in admin panel
authorBrion Vibber <brion@pobox.com>
Fri, 24 Sep 2010 21:52:51 +0000 (14:52 -0700)
committerBrion Vibber <brion@pobox.com>
Tue, 28 Sep 2010 14:44:24 +0000 (07:44 -0700)
plugins/YammerImport/actions/yammeradminpanel.php
plugins/YammerImport/css/admin.css [new file with mode: 0644]
plugins/YammerImport/lib/yammerrunner.php

index 9f935bbefba0ff985591239b0fa563cbf2b5e54d..2c9f412a24f7d68259cef71188e9a3004ccc85db 100644 (file)
@@ -64,6 +64,12 @@ class YammeradminpanelAction extends AdminPanelAction
         $form->show();
         return;
     }
+
+    function showStylesheets()
+    {
+        parent::showStylesheets();
+        $this->cssLink('plugins/YammerImport/css/admin.css', null, 'screen, projection, tv');
+    }
 }
 
 class YammerAdminPanelForm extends AdminForm
@@ -105,40 +111,97 @@ class YammerAdminPanelForm extends AdminForm
      */
     function formData()
     {
-        $this->out->element('p', array(), 'yammer import IN DA HOUSE');
-        
-        /*
-        Possible states of the yammer import process:
-        - null (not doing any sort of import)
-        - requesting-auth
-        - authenticated
-        - import-users
-        - import-groups
-        - fetch-messages
-        - import-messages
-        - done
-        */
-        $yammerState = Yammer_state::staticGet('id', 1);
-        $state = $yammerState ? $yammerState->state || null;
-        
-        switch($state)
+        $runner = YammerRunner::init();
+
+        switch($runner->state())
         {
-            case null:
-                $this->out->element('p', array(), 'Time to start auth:');
-                $this->showAuthForm();
-                break;
+            case 'init':
             case 'requesting-auth':
-                $this->out->element('p', array(), 'Need to finish auth!');
                 $this->showAuthForm();
-                break;
-            case 'import-users':
-            case 'import-groups':
-            case 'fetch-messages':
-            case 'save-messages':
-                $this->showImportState();
-                break;
-            
+            default:
         }
+        $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);
+
+        foreach ($steps as $step => $state) {
+            if ($step < $currentStep) {
+                // This step is done
+                $this->progressBar($labels[$state]['label'],
+                                   $labels[$state]['complete'],
+                                   'complete');
+            } else if ($step == $currentStep) {
+                // This step is in progress
+                $this->progressBar($labels[$state]['label'],
+                                   $labels[$state]['progress'],
+                                   'progress');
+            } else {
+                // This step has not yet been done.
+                $this->progressBar($labels[$state]['label'],
+                                   _m("Waiting..."),
+                                   'waiting');
+            }
+        }
+    }
+
+    private function progressBar($label, $status, $class)
+    {
+        // @fixme prettify ;)
+        $this->out->elementStart('div', array('class' => $class));
+        $this->out->element('p', array(), $label);
+        $this->out->element('p', array(), $status);
+        $this->out->elementEnd('div');
     }
 
     /**
diff --git a/plugins/YammerImport/css/admin.css b/plugins/YammerImport/css/admin.css
new file mode 100644 (file)
index 0000000..c146223
--- /dev/null
@@ -0,0 +1,11 @@
+.waiting {
+    color: #888;
+}
+
+.progress {
+    color: blue;
+}
+
+.done {
+    color: black;
+}
index c4db48399c1252dd3910772015802babe9d80df2..e0aadff2c3e49dc033355119a7ae5f2813586b55 100644 (file)
@@ -324,4 +324,51 @@ class YammerRunner
         return true;
     }
 
+    /**
+     * Count the number of Yammer users we've mapped into our system!
+     *
+     * @return int
+     */
+    public function countUsers()
+    {
+        $map = new Yammer_user();
+        return $map->count();
+    }
+
+
+    /**
+     * Count the number of Yammer groups we've mapped into our system!
+     *
+     * @return int
+     */
+    public function countGroups()
+    {
+        $map = new Yammer_group();
+        return $map->count();
+    }
+
+
+    /**
+     * Count the number of Yammer notices we've pulled down for pending import...
+     *
+     * @return int
+     */
+    public function countFetchedNotices()
+    {
+        $map = new Yammer_notice_stub();
+        return $map->count();
+    }
+
+
+    /**
+     * Count the number of Yammer notices we've mapped into our system!
+     *
+     * @return int
+     */
+    public function countSavedNotices()
+    {
+        $map = new Yammer_notice();
+        return $map->count();
+    }
+
 }