Files
overleaf-cep/services/web/app/views/admin/index.pug
Maria Florencia Besteiro Gonzalez a591f2eb7a Merge pull request #30418 from overleaf/mfb-improve-handling-of-debug-copies-of-user-projects
Add isDebugCopyOf property to project, add Debug tag to debug project.

GitOrigin-RevId: e3d17de05c6f31db16b861d1adae333211dff018
2026-02-03 09:05:40 +00:00

154 lines
6.2 KiB
Plaintext

extends ../layout-marketing
include ../_mixins/bookmarkable_tabset
block content
#main-content.content.content-alt
.container
.row
.col-sm-12
.card
.card-body
.page-header
h1 Admin Panel
.ol-tabs(data-ol-bookmarkable-tabset)
.nav-tabs-container
ul.nav.nav-tabs.align-left(role='tablist')
+bookmarkable-tabset-header('system-messages', 'System Messages', true)
+bookmarkable-tabset-header('open-sockets', 'Open Sockets')
+bookmarkable-tabset-header('open-close-editor', 'Open/Close Editor')
+bookmarkable-tabset-header('privileges-matrix', 'Privileges Matrix')
if hasFeature('saas')
+bookmarkable-tabset-header('tpds', 'TPDS/Dropbox Management')
+bookmarkable-tabset-header('debug-projects', 'Debug Projects')
.tab-content
.tab-pane.active(role='tabpanel' id='system-messages')
each message in systemMessages
ul.system-messages
li.system-message.row-spaced #{message.content}
hr
form(method='post' action='/admin/messages')
input(name='_csrf' type='hidden' value=csrfToken)
.form-group
label.form-label(for='system-message') Message
input#system-message.form-control(
name='content'
type='text'
required
)
button.btn.btn-primary(type='submit') Post Message
hr
form(method='post' action='/admin/messages/clear')
input(name='_csrf' type='hidden' value=csrfToken)
button.btn.btn-danger(type='submit') Clear all messages
.tab-pane(role='tabpanel' id='open-sockets')
.row-spaced
ul
each agents, url in openSockets
li #{url} - total : #{agents.length}
ul
each agent in agents
li #{agent}
.tab-pane(role='tabpanel' id='open-close-editor')
if hasFeature('saas')
| The "Open/Close Editor" feature is not available in SAAS.
else
.row-spaced
form(method='post' action='/admin/closeEditor')
input(name='_csrf' type='hidden' value=csrfToken)
button.btn.btn-danger(type='submit') Close Editor
p.small Will stop anyone opening the editor. Will NOT disconnect already connected users.
.row-spaced
form(method='post' action='/admin/disconnectAllUsers')
input(name='_csrf' type='hidden' value=csrfToken)
button.btn.btn-danger(type='submit') Disconnect all users
p.small Will force disconnect all users with the editor open. Make sure to close the editor first to avoid them reconnecting.
.row-spaced
form(method='post' action='/admin/openEditor')
input(name='_csrf' type='hidden' value=csrfToken)
button.btn.btn-danger(type='submit') Reopen Editor
p.small Will reopen the editor after closing.
.tab-pane(role='tabpanel' id='privileges-matrix')
p This matrix shows the access levels for different admin roles across various user management privileges. The matrix is automatically generated from the code-defined roles and capabilities.
if hasFeature('saas') && privilegesMatrix
.privileges-matrix-container
table.table.table-bordered.table-striped.privileges-matrix-table
thead
tr
th Webpage and privilege
th(colspan=privilegesMatrix.roles.length) Access Level Needed For Team
tr
th
each role in privilegesMatrix.roles
th= role.displayName
tbody
- let currentSection = null
each row in privilegesMatrix.privileges
- const privilege = row.privilege
if currentSection !== privilege.section
- currentSection = privilege.section
tr.section-header
td(colspan=privilegesMatrix.roles.length + 1)
strong= privilege.section
tr
td.privilege-label= privilege.label
each role in privilegesMatrix.roles
- const accessLevel = row.access[role.id]
td.access-cell(class=`access-${accessLevel}`)
span.access-badge(class=`badge-${accessLevel}`)
if accessLevel === 'yes'
| Yes
else
| No
else
p The privileges matrix is not available in this environment.
if hasFeature('saas')
.tab-pane(role='tabpanel' id='tpds')
h3 Flush project to TPDS
.row
form.col-xs-6(method='post' action='/admin/flushProjectToTpds')
input(name='_csrf' type='hidden' value=csrfToken)
.form-group
label.form-label(for='project-id') project_id
input.form-control(
name='project_id'
id='project-id'
type='text'
required
)
.form-group
button.btn-primary.btn(type='submit') Flush
hr
h3 Poll Dropbox for user
.row
form.col-xs-6(method='post' action='/admin/pollDropboxForUser')
input(name='_csrf' type='hidden' value=csrfToken)
.form-group
label.form-label(for='user-id') user_id
input.form-control(name='user_id' id='user-id' type='text' required)
.form-group
button.btn-primary.btn(type='submit') Poll
.tab-pane(role='tabpanel' id='debug-projects')
if debugProjects.length
table.table.table-striped
thead
tr
th Owner
th Project Name
th Last updated
tbody
each project in debugProjects
tr
td= project.owner_ref.email
td= project.name
td= moment(project.lastUpdated.toUTCString()).format('Do MMM YYYY, h:mm a') + ' UTC'
else
p.text-muted No debug projects found