Skip to content

Commit 71345c7

Browse files
committed
Merge branch 'archiver411Update' into 'main'
RCINT-46811 Added SFTP Security Upgrade documentation and enhanced Archiver UI See merge request integration/ringcentral-integration-docs!34
2 parents 5063c05 + 9f06fa9 commit 71345c7

23 files changed

Lines changed: 1377 additions & 114 deletions

README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,54 @@ See [LOCAL-SETUP.md](LOCAL-SETUP.md) for detailed instructions if needed.
2929

3030
See [CONTRIBUTION.md](CONTRIBUTION.md) for more details.
3131

32+
## Publishing
33+
34+
1. Make sure all the required MRs are merged.
35+
36+
2. On your local repo, switch back to the main branch:
37+
38+
```bash
39+
git checkout main
40+
```
41+
42+
1. Now we want to make sure that the local main is up to date:
43+
44+
```bash
45+
git pull --rebase
46+
```
47+
48+
1. You can check the commit logs to make sure:
49+
50+
```bash
51+
git log
52+
```
53+
54+
1. Hit `Q` to quit the commit log view.
55+
56+
2. Now we're ready to publish.
57+
58+
3. First check the existing tags:
59+
60+
```bash
61+
git tag
62+
```
63+
64+
1. The tags should be in the format `publish-yyyy-MON-dd`. But the CI only checks for `publish-*`.
65+
66+
2. Add a new tag by using the following, just use the current date. Add additional dashes and numbers if publishing multiple times a day:
67+
68+
```bash
69+
git tag publish-year-MON-dd
70+
```
71+
72+
1. Lastly, push the new tag:
73+
74+
```bash
75+
git push --tags
76+
```
77+
78+
That will trigger the CI in GitLab to sync the tagged version to GitHub, and then GitHub CI will publish to GitHub Pages.
79+
3280
## Plans
3381

3482
1. Start with a basic site structure

docs/archiver-nav.js

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
// Archiver Section Navigation - Right Side Panel
2+
(function() {
3+
// Only run on archiver pages, but NOT on the introduction/index page
4+
if (!window.location.pathname.includes('/archiver/')) return;
5+
6+
// Skip the introduction page
7+
const path = window.location.pathname;
8+
if (path.endsWith('/archiver/') || path.endsWith('/archiver')) return;
9+
10+
const navItems = [
11+
{ title: 'Getting Started', items: [
12+
{ name: 'Introduction', href: 'index.md' },
13+
{ name: 'User Notice', href: 'user-notice.md' },
14+
{ name: 'Enable Archiver', href: 'enable-archiver.md' },
15+
]},
16+
{ title: 'Administration', items: [
17+
{ name: 'Admin Roles & Permissions', href: 'admin-roles-permissions.md' },
18+
{ name: 'User Roles & Permissions', href: 'user-roles-permissions.md' },
19+
{ name: 'System Requirements', href: 'system-requirements.md' },
20+
]},
21+
{ title: 'Storage Connections', items: [
22+
{ name: 'Linking Storages', href: 'connect-storage.md' },
23+
{ name: 'Google Drive', href: 'connect-gdrive.md' },
24+
{ name: 'Box', href: 'connect-box.md' },
25+
{ name: 'Dropbox', href: 'connect-dropbox.md' },
26+
{ name: 'SFTP', href: 'connect-sftp.md' },
27+
{ name: 'SFTP Security Upgrade', href: 'sftp-security-upgrade.md' },
28+
{ name: 'Smarsh', href: 'connect-smarsh.md' },
29+
]},
30+
{ title: 'Settings & Monitoring', items: [
31+
{ name: 'Sync Options', href: 'sync-options.md' },
32+
{ name: 'Archive Logs', href: 'archive-logs.md' },
33+
{ name: 'Retry Mechanism', href: 'retry-mechanism.md' },
34+
{ name: 'Archive Status', href: 'archive-status.md' },
35+
{ name: 'Notifications', href: 'notifications.md' },
36+
]},
37+
{ title: 'Help', items: [
38+
{ name: 'General Questions', href: 'questions.md' },
39+
]},
40+
];
41+
42+
function getCurrentPage() {
43+
const path = window.location.pathname;
44+
const parts = path.split('/');
45+
let page = parts[parts.length - 1] || parts[parts.length - 2];
46+
if (page === '' || page === 'archiver') page = 'index.md';
47+
if (!page.endsWith('.md')) page += '.md';
48+
// Handle trailing slash
49+
if (page === '.md') page = 'index.md';
50+
return page.replace(/\/$/, '');
51+
}
52+
53+
function buildNav() {
54+
const currentPage = getCurrentPage();
55+
56+
// Get the base path for archiver section
57+
const pathParts = window.location.pathname.split('/');
58+
const archiverIndex = pathParts.indexOf('archiver');
59+
const basePath = pathParts.slice(0, archiverIndex + 1).join('/') + '/';
60+
61+
let html = '<div class="archiver-section-nav">';
62+
html += '<h4>In This Section</h4>';
63+
64+
navItems.forEach(group => {
65+
html += `<div class="nav-group-title">${group.title}</div>`;
66+
html += '<ul class="nav-group">';
67+
group.items.forEach(item => {
68+
const itemPage = item.href.replace('.md', '');
69+
const isActive = currentPage === item.href ||
70+
currentPage === itemPage ||
71+
currentPage.replace('.md', '') === itemPage ||
72+
(itemPage === 'index' && (currentPage === '' || currentPage === 'index'));
73+
const activeClass = isActive ? ' class="active"' : '';
74+
// Use absolute path from archiver base
75+
const href = itemPage === 'index' ? basePath : basePath + itemPage + '/';
76+
html += `<li><a href="${href}"${activeClass}>${item.name}</a></li>`;
77+
});
78+
html += '</ul>';
79+
});
80+
81+
html += '</div>';
82+
return html;
83+
}
84+
85+
function injectNav() {
86+
if (!document.querySelector('.archiver-section-nav')) {
87+
// Insert at body level for fixed positioning
88+
document.body.insertAdjacentHTML('beforeend', buildNav());
89+
// Add class to body for content margin adjustment
90+
document.body.classList.add('has-archiver-nav');
91+
}
92+
}
93+
94+
function removeNav() {
95+
const nav = document.querySelector('.archiver-section-nav');
96+
if (nav) {
97+
nav.remove();
98+
document.body.classList.remove('has-archiver-nav');
99+
}
100+
}
101+
102+
// Run on DOM ready
103+
if (document.readyState === 'loading') {
104+
document.addEventListener('DOMContentLoaded', injectNav);
105+
} else {
106+
injectNav();
107+
}
108+
109+
// Handle navigation for instant loading (MkDocs Material)
110+
function shouldShowNav() {
111+
const path = window.location.pathname;
112+
if (!path.includes('/archiver/')) return false;
113+
if (path.endsWith('/archiver/') || path.endsWith('/archiver')) return false;
114+
return true;
115+
}
116+
117+
function updateNav() {
118+
const existingNav = document.querySelector('.archiver-section-nav');
119+
if (shouldShowNav()) {
120+
if (!existingNav) {
121+
injectNav();
122+
} else {
123+
// Update active state
124+
const currentPage = getCurrentPage();
125+
existingNav.querySelectorAll('a').forEach(link => {
126+
const href = link.getAttribute('href');
127+
const linkPage = href.split('/').filter(Boolean).pop();
128+
const isActive = currentPage.replace('.md', '') === linkPage ||
129+
(linkPage === 'archiver' && currentPage === 'index');
130+
link.classList.toggle('active', isActive);
131+
});
132+
}
133+
} else if (existingNav) {
134+
removeNav();
135+
}
136+
}
137+
138+
document.addEventListener('DOMContentLoaded', function() {
139+
// Watch for URL changes (instant navigation)
140+
let lastPath = window.location.pathname;
141+
const observer = new MutationObserver(function() {
142+
if (window.location.pathname !== lastPath) {
143+
lastPath = window.location.pathname;
144+
setTimeout(updateNav, 100);
145+
}
146+
});
147+
observer.observe(document.body, { childList: true, subtree: true });
148+
});
149+
})();
150+

docs/archiver/admin-roles-permissions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
hide:
3-
- toc
3+
- navigation
44
---
55

66
# Admin Roles and Permissions

docs/archiver/archive-logs.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
hide:
3-
- toc
3+
- navigation
44
---
55

66
# Archive Logs

docs/archiver/archive-status.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
hide:
3-
- toc
3+
- navigation
44
---
55

66
# Archive Status and Data Types

docs/archiver/connect-box.md

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,58 @@
11
---
22
hide:
3-
- toc
3+
- navigation
44
---
55

6-
# Connecting to a Box account
6+
<div class="storage-hero storage-hero--box" markdown>
77

8-
To connect Archiver to Box:
8+
# :simple-box: Connect Box
99

10-
1. Click **Connect** next to Box.
11-
2. Authorize your Box account.
12-
<br />
13-
![Connect Box](./img/connect-box.png)
10+
Enterprise-grade cloud content management for your RingCentral archives.
1411

15-
3. Click [Go to Sync Options](sync-options.md).
12+
</div>
13+
14+
## Overview
15+
16+
Box provides enterprise-grade security and compliance features, making it ideal for organizations with strict data governance requirements. Archive your RingCentral communications with confidence.
17+
18+
---
19+
20+
## Connection Steps
21+
22+
<div class="steps-container" markdown>
23+
24+
**Step 1:** Click **Connect** next to Box.
25+
26+
**Step 2:** Sign in to your Box account when prompted.
27+
28+
**Step 3:** Authorize RingCentral Archiver to access your Box account.
29+
30+
![Connect Box](./img/connect-box.png)
31+
32+
**Step 4:** Complete the authorization process.
33+
34+
</div>
35+
36+
---
37+
38+
## Next Steps
39+
40+
<div class="grid cards" markdown>
41+
42+
- :material-sync:{ .lg .middle } **Configure Sync Options**
43+
44+
---
45+
46+
Set up what data gets archived and scheduling preferences.
47+
48+
[:octicons-arrow-right-24: Go to Sync Options](sync-options.md)
49+
50+
- :material-file-document:{ .lg .middle } **Archive Logs**
51+
52+
---
53+
54+
Monitor your archive activity and status.
55+
56+
[:octicons-arrow-right-24: View Logs](archive-logs.md)
57+
58+
</div>

docs/archiver/connect-dropbox.md

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,63 @@
11
---
22
hide:
3-
- toc
3+
- navigation
44
---
55

6-
# Connecting to a Dropbox account
6+
<div class="storage-hero storage-hero--dropbox" markdown>
77

8-
To connect Archiver to Dropbox:
8+
# :simple-dropbox: Connect Dropbox
99

10-
1. Click Connect next to Dropbox.
11-
2. Sign in to your Dropbox account.
12-
<br />
13-
![Connect to Dropbox](./img/connect-dropbox.png)
10+
Simple and reliable cloud storage for your RingCentral archives.
1411

15-
3. Complete the authentication steps.
16-
4. Allow access to a RingCentral app folder in Dropbox.
17-
5. Click [Go to Sync Options](sync-options.md).
12+
</div>
13+
14+
## Overview
15+
16+
Dropbox offers a straightforward and reliable cloud storage solution. With its intuitive interface and robust syncing capabilities, your archived RingCentral data is always accessible when you need it.
17+
18+
---
19+
20+
## Connection Steps
21+
22+
<div class="steps-container" markdown>
23+
24+
**Step 1:** Click **Connect** next to Dropbox.
25+
26+
**Step 2:** Sign in to your Dropbox account when prompted.
27+
28+
![Connect to Dropbox](./img/connect-dropbox.png)
29+
30+
**Step 3:** Complete the authentication steps.
31+
32+
**Step 4:** Allow access to a RingCentral app folder in Dropbox.
33+
34+
!!! tip "App Folder Access"
35+
RingCentral Archiver will create a dedicated folder in your Dropbox to store all archived data, keeping it organized and separate from your other files.
36+
37+
**Step 5:** Finalize the connection.
38+
39+
</div>
40+
41+
---
42+
43+
## Next Steps
44+
45+
<div class="grid cards" markdown>
46+
47+
- :material-sync:{ .lg .middle } **Configure Sync Options**
48+
49+
---
50+
51+
Set up what data gets archived and scheduling preferences.
52+
53+
[:octicons-arrow-right-24: Go to Sync Options](sync-options.md)
54+
55+
- :material-file-document:{ .lg .middle } **Archive Logs**
56+
57+
---
58+
59+
Monitor your archive activity and status.
60+
61+
[:octicons-arrow-right-24: View Logs](archive-logs.md)
62+
63+
</div>

0 commit comments

Comments
 (0)