Allow setting a default account
authorChristian Weiske <cweiske@cweiske.de>
Tue, 30 May 2017 16:14:18 +0000 (18:14 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Tue, 30 May 2017 16:14:18 +0000 (18:14 +0200)
commentform.phtml
init.php
settings.js
settings.phtml

index d09e49f..636fa51 100644 (file)
@@ -38,7 +38,7 @@
    <?php print_hidden('me', htmlspecialchars(reset($accounts))); ?>
   <?php } else { ?>
    <label for="micropub-me">Identity:</label>
-   <?php print_select('micropub-me', null, $accounts,
+   <?php print_select('micropub-me', $defaultAccount, $accountUrls,
      'dojoType="dijit.form.Select" size="1"', 'me'); ?>
    <br/>
   <?php } ?>
index 4c0f598..7fced8e 100644 (file)
--- 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');
         }
@@ -396,6 +414,37 @@ class Micropub extends Plugin implements IHandler
     }
 
     /**
+     * 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)
      *
index 40657a2..1f53d77 100644 (file)
@@ -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);
+        }
+    });
+}
index a22a00b..97e3b8f 100644 (file)
     <?php foreach ($accounts as $accurl => $account) { ?>
      <tr data-url="<?= htmlspecialchars($accurl) ?>">
       <td align='center'>
-       <input disabled='1' dojoType="dijit.form.CheckBox" type="checkbox"/>
+       <input type="radio" href="#" dojoType="dijit.form.RadioButton"
+              name="micropubDefaultIdentity"
+              value="<?= htmlspecialchars($accurl) ?>"
+              <?= $account['checked'] ?>
+              onchange='micropubMakeDefault(<?= json_encode($accurl) ?>, this)'
+          />
       </td>
       <td>
        <a href="<?= htmlspecialchars($accurl) ?>"><?= htmlspecialchars($accurl) ?></a>