Changeset 1be21ba in Klonkt


Ignore:
Timestamp:
06/16/2026 06:46:59 PM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
682d504
Parents:
e9229f2
Message:

Account: owner can edit site name + tagline in account settings

New "Site" section on /account (owner / god only): edit site_title +
tagline via POST /account/site (ownership check). A quick place to change
the site name without navigating to Appearance.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@…>

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/routes/account.js

    re9229f2 r1be21ba  
    6868    account,
    6969    hasPassword,
     70    editableSite: ownedSite(req.session.user),
    7071    success: req.query.success || null,
    7172    error: req.query.error || null,
    7273  });
     74});
     75
     76// De site die deze gebruiker mag bewerken vanuit z'n account: z'n eigen site
     77// (owner_id), of voor een god de primaire site. Null als er niets is.
     78function ownedSite(user) {
     79  if (!user) return null;
     80  let site = db.prepare('SELECT id, title, tagline, slug, owner_id FROM sites WHERE owner_id = ? ORDER BY created_at LIMIT 1').get(user.id);
     81  if (!site && user.role === 'god') {
     82    site = db.prepare('SELECT id, title, tagline, slug, owner_id FROM sites ORDER BY created_at LIMIT 1').get();
     83  }
     84  return site || null;
     85}
     86
     87// ==================== UPDATE SITE-NAAM (eigenaar) ====================
     88router.post('/site', requireAuth, (req, res) => {
     89  const site = ownedSite(req.session.user);
     90  if (!site) return res.redirect('/account?error=' + encodeURIComponent('Geen site om te bewerken.'));
     91  if (site.owner_id !== req.session.user.id && req.session.user.role !== 'god') {
     92    return res.redirect('/account?error=' + encodeURIComponent('Geen rechten om deze site te bewerken.'));
     93  }
     94  const title = (req.body.site_title || '').toString().slice(0, 200).trim();
     95  if (!title) return res.redirect('/account?error=' + encodeURIComponent('Site-naam mag niet leeg zijn.'));
     96  const tagline = (req.body.site_tagline || '').toString().slice(0, 200).trim();
     97  db.prepare('UPDATE sites SET title = ?, tagline = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?')
     98    .run(title, tagline || null, site.id);
     99  res.redirect('/account?success=' + encodeURIComponent('Site-naam bijgewerkt'));
    73100});
    74101
  • src/views/pages/account.ejs

    re9229f2 r1be21ba  
    8686  </section>
    8787
     88  <%# ── SITE (eigenaar mag de naam van z'n site aanpassen) ── %>
     89  <% if (typeof editableSite !== 'undefined' && editableSite && canMutate) { %>
     90  <section class="ax-card">
     91    <div class="ax-card-title">Site</div>
     92    <form action="/account/site" method="post" class="ax-form">
     93      <label class="ax-field">
     94        <span>Site-naam <small>— getoond in de kop van je site</small></span>
     95        <input type="text" name="site_title" value="<%= editableSite.title || '' %>" maxlength="200" required>
     96      </label>
     97      <label class="ax-field">
     98        <span>Tagline <small>— korte oneliner (optioneel)</small></span>
     99        <input type="text" name="site_tagline" value="<%= editableSite.tagline || '' %>" maxlength="200">
     100      </label>
     101      <div class="ax-form-actions">
     102        <button type="submit" class="ax-btn ax-btn-primary">Site opslaan</button>
     103      </div>
     104    </form>
     105  </section>
     106  <% } %>
     107
    88108  <%# ── WACHTWOORD ────────────────────────────────────────── %>
    89109  <%# In kijker-modus geen wachtwoord-sectie (niets te wijzigen). %>
Note: See TracChangeset for help on using the changeset viewer.