Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
6e79eec
[FIX] Init MySQL (d'ont allow default value in LONGTEXT)
Zomblard Aug 11, 2025
0058618
[ADD] - (terms,auth): RGPD compliance - versioned terms + activation …
Zomblard Aug 13, 2025
fcb048f
[FIX] init.sql
Zomblard Aug 13, 2025
8b10a04
[FIX] enforce white theme in live editor
Zomblard Aug 14, 2025
613f8b6
[ADD] improve formatDate
Zomblard Aug 14, 2025
fcb05d2
[ADD] Accept Terms checkbox
Zomblard Aug 14, 2025
9ccc23f
[DELETE] Installation initCondition
Teyir Aug 14, 2025
a83a620
[FIX] Live editor menu (when package missing)
Zomblard Aug 25, 2025
9d69bab
[FIX] getBody entity
Zomblard Aug 25, 2025
c1864f5
[ADD] Public slug redirection in terms admin view
Zomblard Aug 25, 2025
6a7e752
[DEP] filterInput
Zomblard Aug 25, 2025
6a083c8
[ADD] improve getBody entity check
Zomblard Aug 25, 2025
c1de0fc
[IMPROVES] Add Utils::hasNull() méthod
Teyir Aug 25, 2025
a3dd9f8
[IMPROVES] Improve account delete
Teyir Aug 25, 2025
04e36d6
[IMPROVES] Add Utils methods
Teyir Aug 25, 2025
4237948
[IMPROVES] UsersModel::delete return bool
Teyir Aug 25, 2025
5f87fe9
[ADD] API test
Zomblard Sep 4, 2025
be33fea
[ADD] Test update status
Zomblard Sep 5, 2025
aa03941
[ADD] Warning Manager
Zomblard Sep 9, 2025
7c42598
[ADD] IPackageConfigV2 and LegacyPackageAdapter for transition
Zomblard Sep 9, 2025
88dd164
[ADD] IPackageConfigV2
Zomblard Sep 9, 2025
3266c1c
[ADD] Recette mode checker
Zomblard Sep 11, 2025
ae93d8c
[ADD] admin can't delete self-account and admin account
Zomblard Oct 2, 2025
6e3467c
[IMPROVES] Better admin themes
HowBaka Oct 7, 2025
3f4a2d5
[ADD] Add timestampToTime method to format timestamps
Teyir Oct 10, 2025
9d3f288
[DEPRECATE] Mark formatDateTime method as deprecated in favor of time…
Teyir Oct 10, 2025
33ae9da
[IMPROVE] Update TailWind classes
Teyir Oct 11, 2025
9d9f577
[ADD] Add timestampToTime method to format timestamps
Teyir Oct 10, 2025
c9e4560
[DEPRECATE] Mark formatDateTime method as deprecated in favor of time…
Teyir Oct 10, 2025
3f75dc6
[IMPROVE] Update TailWind classes
Teyir Oct 11, 2025
e83a256
[FIX] ACE light / dark theme for SMTP Mail
Teyir Oct 11, 2025
5178fcb
[IMPROVES] Add new methods for Utils/Number
Teyir Oct 13, 2025
3a4c76d
[IMPROVES] Add Copilot context generator in CLI
Teyir Oct 13, 2025
eea5188
[IMPROVES] SitemapManager
Teyir Oct 13, 2025
2505e02
[IMPROVES] Update admin style
Teyir Oct 13, 2025
4180ab0
[REMOVE] author in ThemeConfig
Zomblard Oct 13, 2025
97d5849
[REMOVE] author in PackageConfigV2
Zomblard Oct 13, 2025
d62d565
[ADD] Way to test waiting packages
Zomblard Oct 14, 2025
4ca43e2
[FIX] instance
Zomblard Oct 14, 2025
7fef3f7
[ADD] way to add or remove specific roles
Zomblard Oct 15, 2025
2a9860a
[IMPROVES] Repair Cache system for options in CoreModel
Teyir Oct 16, 2025
a29534f
[IMPROVES] Add Date methods
Teyir Oct 16, 2025
1a38620
[IMPROVES] Enhance validation and utility methods in AbstractEntity a…
Teyir Oct 17, 2025
0d43f21
[REFACTOR] Remove 'news_' prefix from SQL prefix
Teyir Oct 18, 2025
18c53af
Revert "[REFACTOR] Remove 'news_' prefix from SQL prefix"
Teyir Oct 18, 2025
29f12b0
[IMPROVES] Add .ignored_packages file for ignoring package.
Teyir Oct 18, 2025
cc7c757
[FIX] Include view php for admin dash
Teyir Oct 19, 2025
fa5ad99
[FIX] Remove useless log
Teyir Oct 20, 2025
2a4a6e3
[FEATURE] Implement secure remember-me functionality with token manag…
Teyir Oct 20, 2025
1c28039
[FEATURE] Implement caching for user settings retrieval and updates
Teyir Oct 20, 2025
a973986
[ADD] Api can know ORIGIN
Zomblard Oct 21, 2025
c4adf5c
[ADD] Paid check before install
Zomblard Oct 21, 2025
05983b2
[FEATURE] Track session creation time for improved remember-me functi…
Teyir Oct 23, 2025
4d31d03
Merge pull request #431
Teyir Oct 23, 2025
ed9e963
[IMPROVE] Check disabled package
Zomblard Oct 23, 2025
a865f14
[ADD] Check disabled themes
Zomblard Oct 23, 2025
0d23f06
[ADD] Check disabled api package
Zomblard Oct 23, 2025
fd98770
[IMPROVE] HealthReport
Zomblard Oct 24, 2025
bcdc5bf
[IMPROVES] Persistant dashboard sidebar state
Teyir Oct 25, 2025
1eb0a4c
[IMPROVE] check line return before write new value
Zomblard Oct 27, 2025
153cbbe
[IMPROVE] check Package & Themes
Zomblard Oct 27, 2025
814291e
[ADD] Try / Catch RegisterEvent
Zomblard Nov 1, 2025
b29c297
[FIX] Login every time allowed
Zomblard Nov 5, 2025
fbf6652
[IMPROVE] Update SitemapItemEntity.php
Teyir Oct 30, 2025
7693682
[IMPROVES] Update README.md
Teyir Nov 10, 2025
636d8ef
Merge branch 'dev' into rework-dashboard
Zomblard Nov 10, 2025
c788b0e
Better admin themes (#430)
Zomblard Nov 10, 2025
19b9745
[IMPROVE] Dark theme tinyMCE
Zomblard Nov 18, 2025
3ddaa1a
[ADD] Custom TinyMCE classes
Zomblard Nov 28, 2025
45cb7d2
[IMPROVE] Update security
Zomblard Dec 5, 2025
ced233d
[IMPROVE] Download res return error
Zomblard Dec 8, 2025
f7919f9
[IMPROVE] Install & Update Resources
Zomblard Dec 8, 2025
ab7154e
[FIX] Terms login approve Redirect
Zomblard Dec 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,10 @@ __MACOSX/

# Ignore node_modules files and folder
**/node_modules/
package-lock.json
package-lock.json

# Ignore .copilot context files
.copilot/

.ignored_packages
.ignored_themes
2 changes: 1 addition & 1 deletion Admin/Resources/Assets/Css/style.css

Large diffs are not rendered by default.

38 changes: 37 additions & 1 deletion Admin/Resources/Vendors/Tinymce/Config/full.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,23 @@ document.addEventListener("DOMContentLoaded", function () {
xhr.send(formData);
});

function applyTinyCustomClasses(node) {
if (!node || !node.nodeName || !node.classList) return;

const tag = node.nodeName.toLowerCase();
const className = `${tag}-tmce`;

Array.from(node.classList).forEach(cls => {
if (cls.endsWith('-tmce') && cls !== className) {
node.classList.remove(cls);
}
});

if (!node.classList.contains(className)) {
node.classList.add(className);
}
}

function initTinyMCE(skin) {
tinymce.init({
selector: `.tinymce`,
Expand Down Expand Up @@ -73,6 +90,25 @@ document.addEventListener("DOMContentLoaded", function () {
const minHeight = textarea.getAttribute('data-tiny-height') || 350;
editor.editorContainer.style.minHeight = `${minHeight}px`;
});

editor.on('NodeChange', function(e) {
if (e.element) {
applyTinyCustomClasses(e.element);
}
});

editor.on('BeforeSetContent', function(e) {
if (e.content) {
const div = document.createElement('div');
div.innerHTML = e.content;

div.querySelectorAll('*').forEach(function(el) {
applyTinyCustomClasses(el);
});

e.content = div.innerHTML;
}
});
}
});
}
Expand All @@ -90,4 +126,4 @@ document.addEventListener("DOMContentLoaded", function () {
tinymce.remove('.tinymce');
initTinyMCE(newTheme);
});
});
});
36 changes: 36 additions & 0 deletions Admin/Resources/Vendors/Tinymce/Config/full_absolute_links.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,23 @@ document.addEventListener("DOMContentLoaded", function () {
xhr.send(formData);
});

function applyTinyCustomClasses(node) {
if (!node || !node.nodeName || !node.classList) return;

const tag = node.nodeName.toLowerCase();
const className = `${tag}-tmce`;

Array.from(node.classList).forEach(cls => {
if (cls.endsWith('-tmce') && cls !== className) {
node.classList.remove(cls);
}
});

if (!node.classList.contains(className)) {
node.classList.add(className);
}
}

function initTinyMCE(skin) {
document.querySelectorAll('.tinymce').forEach(function(textarea) {
const minHeight = textarea.getAttribute('data-tiny-height') || 350;
Expand Down Expand Up @@ -77,6 +94,25 @@ document.addEventListener("DOMContentLoaded", function () {
const minHeight = currentTextarea.getAttribute('data-tiny-height') || 350;
editor.editorContainer.style.minHeight = `${minHeight}px`;
});

editor.on('NodeChange', function(e) {
if (e.element) {
applyTinyCustomClasses(e.element);
}
});

editor.on('BeforeSetContent', function(e) {
if (e.content) {
const div = document.createElement('div');
div.innerHTML = e.content;

div.querySelectorAll('*').forEach(function(el) {
applyTinyCustomClasses(el);
});

e.content = div.innerHTML;
}
});
}
});
});
Expand Down
36 changes: 36 additions & 0 deletions Admin/Resources/Vendors/Tinymce/Config/light.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,23 @@ document.addEventListener("DOMContentLoaded", function () {
xhr.send(formData);
});

function applyTinyCustomClasses(node) {
if (!node || !node.nodeName || !node.classList) return;

const tag = node.nodeName.toLowerCase();
const className = `${tag}-tmce`;

Array.from(node.classList).forEach(cls => {
if (cls.endsWith('-tmce') && cls !== className) {
node.classList.remove(cls);
}
});

if (!node.classList.contains(className)) {
node.classList.add(className);
}
}

function initTinyMCE(skin) {
document.querySelectorAll('.tinymce').forEach(function(textarea) {
const minHeight = textarea.getAttribute('data-tiny-height') || 350;
Expand Down Expand Up @@ -69,6 +86,25 @@ document.addEventListener("DOMContentLoaded", function () {
const minHeight = currentTextarea.getAttribute('data-tiny-height') || 350;
editor.editorContainer.style.minHeight = `${minHeight}px`;
});

editor.on('NodeChange', function(e) {
if (e.element) {
applyTinyCustomClasses(e.element);
}
});

editor.on('BeforeSetContent', function(e) {
if (e.content) {
const div = document.createElement('div');
div.innerHTML = e.content;

div.querySelectorAll('*').forEach(function(el) {
applyTinyCustomClasses(el);
});

e.content = div.innerHTML;
}
});
}
});
});
Expand Down
36 changes: 36 additions & 0 deletions Admin/Resources/Vendors/Tinymce/Config/medium.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,23 @@ document.addEventListener("DOMContentLoaded", function () {
xhr.send(formData);
});

function applyTinyCustomClasses(node) {
if (!node || !node.nodeName || !node.classList) return;

const tag = node.nodeName.toLowerCase();
const className = `${tag}-tmce`;

Array.from(node.classList).forEach(cls => {
if (cls.endsWith('-tmce') && cls !== className) {
node.classList.remove(cls);
}
});

if (!node.classList.contains(className)) {
node.classList.add(className);
}
}

function initTinyMCE(skin) {
document.querySelectorAll('.tinymce').forEach(function(textarea) {
const minHeight = textarea.getAttribute('data-tiny-height') || 350;
Expand Down Expand Up @@ -73,6 +90,25 @@ document.addEventListener("DOMContentLoaded", function () {
const minHeight = currentTextarea.getAttribute('data-tiny-height') || 350;
editor.editorContainer.style.minHeight = `${minHeight}px`;
});

editor.on('NodeChange', function(e) {
if (e.element) {
applyTinyCustomClasses(e.element);
}
});

editor.on('BeforeSetContent', function(e) {
if (e.content) {
const div = document.createElement('div');
div.innerHTML = e.content;

div.querySelectorAll('*').forEach(function(el) {
applyTinyCustomClasses(el);
});

e.content = div.innerHTML;
}
});
}
});
});
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Large diffs are not rendered by default.

65 changes: 34 additions & 31 deletions Admin/Resources/Views/Includes/head.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,42 +54,45 @@

<style>
:root {
/* Light mode colors */
--light-primary: #ffffff;
--light-secondary: #f5f5f6;
--light-third: #cbd5e1;
--light-fourth: #e2e8f0;
--light-text-primary: #334155;
--light-text-secondary: #9ca3af;
--light-input-bg: #f9fafb;
--light-scrollbar : #94a3b8;
--light-scrollbar-hover : #64748b;
--light-scrollbar-bg : #e2e8f0;
--light-secondary: #f8f9fa;
--light-third: #e9ecef;
--light-fourth: #dee2e6;
--light-text-primary: #212529;
--light-text-secondary: #6c757d;
--light-input-bg: #ffffff;
--light-scrollbar: #adb5bd;
--light-scrollbar-hover: #6c757d;
--light-scrollbar-bg: #f1f3f5;

--dark-primary: #0d1220; /* (previous) #030712 */
--dark-secondary: #111828; /* (previous) #111827 */
--dark-third: #334155;
--dark-fourth: #1e293b;
--dark-text-primary: #e5e7eb;
--dark-text-secondary: #4b5563;
--dark-input-bg: #374151;
--dark-scrollbar : #334155;
--dark-scrollbar-hover : #1e293b;
--dark-scrollbar-bg : #94a3b8;
/* Dark mode colors */
--dark-primary: #0d1117;
--dark-secondary: #161b22;
--dark-third: #21262d;
--dark-fourth: #30363d;
--dark-text-primary: #e3e4e8;
--dark-text-secondary: #8b949e;
--dark-input-bg: #21262d;
--dark-scrollbar: #484f58;
--dark-scrollbar-hover: #656c76;
--dark-scrollbar-bg: #161b22;

--nav-sky : #435EBE;
--nav-sky-light : #f2f2f3;
--nav-sky-dark : #1e293b;
--nav-sky-text-dark : #435EBE;
/* Accent colors */
--nav-sky: #0969da;
--nav-sky-light: #dbeafe;
--nav-sky-dark: #21262d;
--nav-sky-text-dark: #58a6ff;
}

.text-success {color: #0ab312}
.text-info {color: #1C64F2}
.text-danger {color: #f3182b}
.text-warning {color: #f3b518}
.bg-success {background-color: #0ab312}
.bg-info {background-color: #1C64F2}
.bg-danger {background-color: #f3182b}
.bg-warning {background-color: #f3b518}
.text-success {color: #1a7f37}
.text-info {color: #0969da}
.text-danger {color: #cf222e}
.text-warning {color: #bf8700}
.bg-success {background-color: #1a7f37}
.bg-info {background-color: #0969da}
.bg-danger {background-color: #cf222e}
.bg-warning {background-color: #bf8700}
</style>

<body>
38 changes: 24 additions & 14 deletions Admin/Resources/Views/Includes/header.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -433,28 +433,38 @@ class="a-side-nav <?= MenusController::getInstance()->isActiveNavbarItem($menu->
</aside>

<script>
//handle sidebar state
const STORAGE_KEY_SIDEBAR_COLLAPSED = 'cmw_dash_collapse_sidebar';

function applySidebarState(collapsed) {
document.body.classList.toggle('sidebar-collapsed', collapsed);
const icon = document.getElementById('toggleIcon');
icon.classList.remove('fa-expand', 'fa-bars', 'fa-lg');
icon.classList.add(collapsed ? 'fa-bars' : 'fa-expand', 'fa-lg');
}

// initial state from localStorage
const isSidebarCollapsed = localStorage.getItem(STORAGE_KEY_SIDEBAR_COLLAPSED) === 'true';
applySidebarState(isSidebarCollapsed);

document.getElementById('toggleSidebar').addEventListener('click', function () {
// toggle immediately for responsiveness
document.body.classList.toggle('sidebar-collapsed');

// Récupérer l'élément de l'icône
let icon = document.getElementById('toggleIcon');

// Ajouter la classe flip pour l'effet de rotation
// animation class
const icon = document.getElementById('toggleIcon');
icon.classList.add('flip');

// Vérifier si la sidebar est masquée et basculer l'icône
setTimeout(function () {
if (document.body.classList.contains('sidebar-collapsed')) {
icon.classList.remove('fa-expand', 'fa-lg');
icon.classList.add('fa-bars', 'fa-lg');
} else {
icon.classList.remove('fa-bars', 'fa-lg');
icon.classList.add('fa-expand', 'fa-lg');
}
const collapsed = document.body.classList.contains('sidebar-collapsed');
applySidebarState(collapsed);

// store state
localStorage.setItem(STORAGE_KEY_SIDEBAR_COLLAPSED, collapsed ? 'true' : 'false');

// Retirer l'effet de flip après le changement
// remove animation class
icon.classList.remove('flip');
}, 300); // Attendez un peu pour l'effet avant de changer l'icône
}, 300); // wait for flip effect
});

function toggleSubMenu(button) {
Expand Down
Loading