67 lines
3.9 KiB
PHP
67 lines
3.9 KiB
PHP
<?= $this->extend('layouts/main') ?>
|
|
|
|
<?= $this->section('content') ?>
|
|
<header class="cb-page-header">
|
|
<div>
|
|
<h1 class="cb-page-title">Workspaces</h1>
|
|
<p class="cb-page-subtitle">Organize your data assets, dashboards, and team access across isolated workspace environments.</p>
|
|
</div>
|
|
<a href="<?= base_url('workspace/create') ?>" class="btn cb-page-primary-btn">+ New Workspace</a>
|
|
</header>
|
|
|
|
<div class="cb-page-body">
|
|
<?php if (session()->getFlashdata('success')): ?>
|
|
<div class="alert alert-success"><?= esc(session()->getFlashdata('success')) ?></div>
|
|
<?php endif; ?>
|
|
<?php if (session()->getFlashdata('error')): ?>
|
|
<div class="alert alert-danger"><?= esc(session()->getFlashdata('error')) ?></div>
|
|
<?php endif; ?>
|
|
|
|
<div class="cb-stat-grid mb-4">
|
|
<div class="cb-stat-card"><div class="cb-stat-title">Total Workspaces</div><div class="cb-stat-value"><?= esc((string) ($stats['totalWorkspaces'] ?? 0)) ?></div></div>
|
|
<div class="cb-stat-card"><div class="cb-stat-title">Total Members</div><div class="cb-stat-value"><?= esc((string) ($stats['totalMembers'] ?? 0)) ?></div></div>
|
|
<div class="cb-stat-card"><div class="cb-stat-title">Data Sources</div><div class="cb-stat-value"><?= esc((string) ($stats['totalSources'] ?? 0)) ?></div></div>
|
|
<div class="cb-stat-card"><div class="cb-stat-title">Dashboards</div><div class="cb-stat-value"><?= esc((string) ($stats['totalDashboards'] ?? 0)) ?></div></div>
|
|
</div>
|
|
|
|
<div class="cb-toolbar-row">
|
|
<div class="cb-search-wrap">
|
|
<span class="material-symbols-outlined position-absolute top-50 translate-middle-y text-muted" style="left:12px;font-size:18px;pointer-events:none;">search</span>
|
|
<input class="cb-search-input" type="search" placeholder="Search workspaces..." autocomplete="off">
|
|
</div>
|
|
<button type="button" class="cb-view-toggle active">Grid</button>
|
|
<button type="button" class="cb-view-toggle">List</button>
|
|
<button type="button" class="cb-view-toggle"><span class="material-symbols-outlined align-middle" style="font-size:14px;">sort</span> Sort</button>
|
|
</div>
|
|
|
|
<div class="cb-workspace-grid">
|
|
<?php foreach ($workspaces as $workspace): ?>
|
|
<div class="cb-workspace-card h-100">
|
|
<div class="top-strip"></div>
|
|
<div class="cb-workspace-card-body">
|
|
<div class="d-flex justify-content-between align-items-start">
|
|
<div class="cb-ws-card-icon">
|
|
<span class="material-symbols-outlined">account_tree</span>
|
|
</div>
|
|
<span class="<?= (int) $workspace['is_active'] === 1 ? 'cb-badge-active' : 'cb-badge-archived' ?>">
|
|
<?= (int) $workspace['is_active'] === 1 ? 'Active' : 'Archived' ?>
|
|
</span>
|
|
</div>
|
|
<h2 class="cb-ws-card-title"><?= esc($workspace['name']) ?></h2>
|
|
<div class="cb-ws-slug">chartboard.io/<?= esc($workspace['slug']) ?></div>
|
|
<p class="cb-ws-desc"><?= esc($workspace['description'] ?? 'No description') ?></p>
|
|
<div class="cb-ws-card-footer d-flex align-items-center justify-content-between flex-wrap gap-2">
|
|
<span class="cb-ws-role-badge"><?= esc(strtoupper((string) ($workspace['member_role'] ?? 'viewer'))) ?></span>
|
|
<div class="cb-ws-actions">
|
|
<a class="cb-ws-action-btn" href="<?= base_url('workspace/switch/' . $workspace['id']) ?>">Switch</a>
|
|
<a class="cb-ws-action-btn" href="<?= base_url('workspace/settings/' . $workspace['id']) ?>">Settings</a>
|
|
<a class="cb-ws-action-btn cb-ws-action-btn--primary" href="<?= base_url('workspace/members/' . $workspace['id']) ?>">Members</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</div>
|
|
<?= $this->endSection() ?>
|