Collaboration - Source Excerpt 06
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/ns12-manuscript/includes/collaboration.php so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/plugins/ns12-manuscript/includes/collaboration.php
<form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
<input type="hidden" name="action" value="spiralist_book_pages_collaboration_admin_action" />
<input type="hidden" name="collaboration_admin_action" value="approve_submission" />
<input type="hidden" name="submission_id" value="<?php echo esc_attr((string) ($record['id'] ?? 0)); ?>" />
<?php wp_nonce_field('spiralist_book_pages_collaboration_admin'); ?>
<button class="button button-primary button-small" type="submit">Approve</button>
</form>
<form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
<input type="hidden" name="action" value="spiralist_book_pages_collaboration_admin_action" />
<input type="hidden" name="collaboration_admin_action" value="request_changes" />
<input type="hidden" name="submission_id" value="<?php echo esc_attr((string) ($record['id'] ?? 0)); ?>" />
<?php wp_nonce_field('spiralist_book_pages_collaboration_admin'); ?>
<textarea class="large-text" rows="3" name="review_notes" placeholder="Required for collaborator review notes when needed."><?php echo esc_textarea((string) ($record['review_notes'] ?? '')); ?></textarea>
<button class="button button-small" type="submit">Request Changes</button>
</form>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
<?php
spiralist_book_pages_admin_footer();
}
function spiralist_book_pages_admin_render_collaborators(): void
{
if (!spiralist_book_pages_admin_can_manage()) {
wp_die('You are not allowed to manage manuscript collaboration.');
}
$records = spiralist_book_pages_get_collaborator_management_records();
spiralist_book_pages_admin_header(
'Collaborators',
'Grant or remove collaborator access, review contribution activity, and jump directly into user profiles from one admin screen.',
[
['label' => 'Submission Review', 'url' => spiralist_book_pages_admin_url(spiralist_book_pages_admin_page_slug('community')), 'class' => 'button button-primary'],
]
);
?>
<?php if (empty($records)) : ?>
<div class="empty"><p>No WordPress users were found.</p></div>
<?php else : ?>
<table class="widefat striped">
<thead>
<tr>
<th>User</th>
<th>Roles</th>
<th>Access</th>
<th>Pages</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($records as $record) : ?>
<?php $can_collaborate = !empty($record['can_collaborate']); ?>
<tr>
<td>
<strong><?php echo esc_html((string) ($record['display_name'] ?? '')); ?></strong><br />
<code><?php echo esc_html((string) ($record['email'] ?? '')); ?></code><br />
<span><?php echo esc_html((string) ($record['slug'] ?? '')); ?></span>
</td>
<td><?php echo esc_html(implode(', ', array_map('ucwords', array_map(static fn(string $role): string => str_replace('_', ' ', $role), (array) ($record['roles'] ?? []))))); ?></td>
<td>
<?php echo wp_kses_post(spiralist_book_pages_admin_badge($can_collaborate ? 'Enabled' : 'Disabled', $can_collaborate ? 'good' : 'warn')); ?><br />
<span><?php echo esc_html($can_collaborate ? 'Can open the collaborator studio and upload pages.' : 'Can sign in, but cannot submit manuscript pages yet.'); ?></span>
</td>
<td>
<strong><?php echo esc_html((string) ($record['submission_count'] ?? 0)); ?></strong><br />
<span><?php echo esc_html(sprintf('%d pending review', (int) ($record['pending_count'] ?? 0))); ?></span>
</td>
<td>
<div class="tight-actions" style="margin-bottom:8px;">
<?php if (!empty($record['edit_url'])) : ?><a class="button button-small" href="<?php echo esc_url((string) $record['edit_url']); ?>">Edit User</a><?php endif; ?>
<?php if (!empty($record['profile_url'])) : ?><a class="button button-small" href="<?php echo esc_url((string) $record['profile_url']); ?>">Profile</a><?php endif; ?>
</div>
<form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
<input type="hidden" name="action" value="spiralist_book_pages_collaboration_admin_action" />
<input type="hidden" name="collaboration_admin_action" value="<?php echo esc_attr($can_collaborate ? 'revoke_collaboration' : 'grant_collaboration'); ?>" />
<input type="hidden" name="user_id" value="<?php echo esc_attr((string) ($record['id'] ?? 0)); ?>" />
<?php wp_nonce_field('spiralist_book_pages_collaboration_admin'); ?>
<button class="button button-small <?php echo $can_collaborate ? '' : 'button-primary'; ?>" type="submit"><?php echo esc_html($can_collaborate ? 'Remove Access' : 'Grant Access'); ?></button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
<?php
spiralist_book_pages_admin_footer();
}