From 69cb47ccf445008bfb37d9a52f31da18dd5cdcaa Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 24 Sep 2010 14:52:51 -0700 Subject: [PATCH] Initial progress display of Yammer import state in admin panel --- .../YammerImport/actions/yammeradminpanel.php | 123 +++++++++++++----- plugins/YammerImport/css/admin.css | 11 ++ plugins/YammerImport/lib/yammerrunner.php | 47 +++++++ 3 files changed, 151 insertions(+), 30 deletions(-) create mode 100644 plugins/YammerImport/css/admin.css diff --git a/plugins/YammerImport/actions/yammeradminpanel.php b/plugins/YammerImport/actions/yammeradminpanel.php index 9f935bbefb..2c9f412a24 100644 --- a/plugins/YammerImport/actions/yammeradminpanel.php +++ b/plugins/YammerImport/actions/yammeradminpanel.php @@ -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 index 0000000000..c1462237a5 --- /dev/null +++ b/plugins/YammerImport/css/admin.css @@ -0,0 +1,11 @@ +.waiting { + color: #888; +} + +.progress { + color: blue; +} + +.done { + color: black; +} diff --git a/plugins/YammerImport/lib/yammerrunner.php b/plugins/YammerImport/lib/yammerrunner.php index c4db48399c..e0aadff2c3 100644 --- a/plugins/YammerImport/lib/yammerrunner.php +++ b/plugins/YammerImport/lib/yammerrunner.php @@ -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(); + } + } -- 2.39.5