From 698f5c7a20d5792b629404ce513d2fa2c2bab907 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 24 Sep 2010 17:22:44 -0700 Subject: [PATCH] Work in progress on getting the frontend Yammer import form going.... --- plugins/YammerImport/YammerImportPlugin.php | 8 +- .../YammerImport/actions/yammeradminpanel.php | 177 +++++------------- plugins/YammerImport/actions/yammerauth.php | 80 +++++++- .../YammerImport/lib/yammerauthinitform.php | 71 +++++++ .../YammerImport/lib/yammerauthverifyform.php | 82 ++++++++ .../YammerImport/lib/yammerprogressform.php | 128 +++++++++++++ 6 files changed, 402 insertions(+), 144 deletions(-) create mode 100644 plugins/YammerImport/lib/yammerauthinitform.php create mode 100644 plugins/YammerImport/lib/yammerauthverifyform.php create mode 100644 plugins/YammerImport/lib/yammerprogressform.php diff --git a/plugins/YammerImport/YammerImportPlugin.php b/plugins/YammerImport/YammerImportPlugin.php index 85eab74c04..bb1e976186 100644 --- a/plugins/YammerImport/YammerImportPlugin.php +++ b/plugins/YammerImport/YammerImportPlugin.php @@ -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': diff --git a/plugins/YammerImport/actions/yammeradminpanel.php b/plugins/YammerImport/actions/yammeradminpanel.php index 13c95e37f7..56e721d03c 100644 --- a/plugins/YammerImport/actions/yammeradminpanel.php +++ b/plugins/YammerImport/actions/yammeradminpanel.php @@ -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'); } } diff --git a/plugins/YammerImport/actions/yammerauth.php b/plugins/YammerImport/actions/yammerauth.php index 7e6e7204ae..d0d4b40c71 100644 --- a/plugins/YammerImport/actions/yammerauth.php +++ b/plugins/YammerImport/actions/yammerauth.php @@ -1,17 +1,79 @@ . + * + * @category Settings + * @package StatusNet + * @author Zach Copley + * @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 index 0000000000..559ec4e7cc --- /dev/null +++ b/plugins/YammerImport/lib/yammerauthinitform.php @@ -0,0 +1,71 @@ +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 index 0000000000..488b5b8d1f --- /dev/null +++ b/plugins/YammerImport/lib/yammerauthverifyform.php @@ -0,0 +1,82 @@ +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 index 0000000000..776efa100f --- /dev/null +++ b/plugins/YammerImport/lib/yammerprogressform.php @@ -0,0 +1,128 @@ +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'); + } + +} -- 2.39.2