From eae21d312ee93e5c41c55a1fc0d6d1e14d5a0e70 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Tue, 30 May 2017 18:14:18 +0200 Subject: [PATCH] Allow setting a default account --- commentform.phtml | 2 +- init.php | 51 ++++++++++++++++++++++++++++++++++++++++++++++- settings.js | 26 ++++++++++++++++++++++++ settings.phtml | 7 ++++++- 4 files changed, 83 insertions(+), 3 deletions(-) diff --git a/commentform.phtml b/commentform.phtml index d09e49f..636fa51 100644 --- a/commentform.phtml +++ b/commentform.phtml @@ -38,7 +38,7 @@ -
diff --git a/init.php b/init.php index 4c0f598..7fced8e 100644 --- a/init.php +++ b/init.php @@ -83,10 +83,19 @@ class Micropub extends Plugin implements IHandler . '?reply=' . urlencode($article['link']); // did I tell you I hate dojo/dijit? - $accounts = array_keys(PluginHost::getInstance()->get($this, 'accounts', [])); + $accounts = PluginHost::getInstance()->get($this, 'accounts', []); if (!count($accounts)) { return $article; } + + $accountUrls = array_keys($accounts); + $defaultAccount = null; + foreach ($accounts as $url => $account) { + if ($account['default']) { + $defaultAccount = $url; + } + } + ob_start(); include __DIR__ . '/commentform.phtml'; $html = ob_get_clean(); @@ -118,6 +127,13 @@ class Micropub extends Plugin implements IHandler $accordionActive = ''; } + foreach ($accounts as $url => $account) { + $accounts[$url]['checked'] = ''; + if ($account['default']) { + $accounts[$url]['checked'] = 'checked="checked"'; + } + } + //FIXME: default identity include __DIR__ . '/settings.phtml'; } @@ -162,6 +178,8 @@ class Micropub extends Plugin implements IHandler return $this->postAction(); } else if ($mode == 'deleteIdentity') { return $this->deleteIdentityAction(); + } else if ($mode == 'setDefaultIdentity') { + return $this->setDefaultIdentityAction(); } else { return $this->errorOut('Unsupported mode'); } @@ -395,6 +413,37 @@ class Micropub extends Plugin implements IHandler exit(); } + /** + * Backend preferences action: Make a given account the default + */ + protected function setDefaultIdentityAction() + { + if (!isset($_POST['me'])) { + return $this->errorOut('"me" parameter missing'); + } + $me = trim($_POST['me']); + + $host = PluginHost::getInstance(); + $accounts = $host->get($this, 'accounts', []); + if (!isset($accounts[$me])) { + return $this->errorOut('Unknown identity'); + } + + foreach ($accounts as $url => $data) { + $accounts[$url]['default'] = ($url == $me); + } + $host->set($this, 'accounts', $accounts); + header('Content-type: application/json'); + + echo json_encode( + [ + 'code' => '200', + 'message' => 'Default account set', + ] + ); + exit(); + } + /** * Send an error message. * Automatically in the correct format (plain text or json) diff --git a/settings.js b/settings.js index 40657a2..1f53d77 100644 --- a/settings.js +++ b/settings.js @@ -23,3 +23,29 @@ function micropubDeleteIdentity(accountUrl) } }); } + +/** + * Mark account as the default account + */ +function micropubMakeDefault(accountUrl, checkbox) +{ + if (!checkbox.checked) { + return; + } + + new Ajax.Request('backend.php', { + parameters: { + 'op': 'pluginhandler', + 'plugin': 'micropub', + 'method': 'action', + 'mode': 'setDefaultIdentity', + 'me': accountUrl, + }, + onSuccess: function(transport) { + notify_info('Default account changed'); + }, + onFailure: function(transport) { + notify_error(transport.responseText); + } + }); +} diff --git a/settings.phtml b/settings.phtml index a22a00b..97e3b8f 100644 --- a/settings.phtml +++ b/settings.phtml @@ -13,7 +13,12 @@ $account) { ?> - + + onchange='micropubMakeDefault(, this)' + /> -- 2.30.2