File "style-switcher-form.php"

Full Path: /home/humancap/cl.humancap.com.my/admin/inc/style-switcher-form.php
File size: 5.49 KB
MIME-type: text/x-php
Charset: utf-8

<?php
use phpformbuilder\Form;
use phpformbuilder\FormExtended;

include_once '../../conf/conf.php';

session_start();

if (isset($_COOKIE['bootstrap_theme']) && ctype_lower($_COOKIE['bootstrap_theme'])) {
    $_SESSION['style-switcher-form']['bootstrap_theme'] = $_COOKIE['bootstrap_theme'];
} else {
    $_SESSION['style-switcher-form']['bootstrap_theme'] = BOOTSTRAP_THEME;
}

$available_styles = array('primary', 'secondary', 'success', 'info', 'warning', 'danger', 'light', 'dark');

if (isset($_COOKIE['navbar_style']) && in_array($_COOKIE['navbar_style'], $available_styles)) {
    $_SESSION['style-switcher-form']['navbar_style'] = $_COOKIE['navbar_style'];
} else {
    $_SESSION['style-switcher-form']['navbar_style'] = NAVBAR_STYLE;
}

if (isset($_COOKIE['sidebar_style']) && in_array($_COOKIE['sidebar_style'], $available_styles)) {
    $_SESSION['style-switcher-form']['sidebar_style'] = $_COOKIE['sidebar_style'];
} else {
    $_SESSION['style-switcher-form']['sidebar_style'] = SIDEBAR_STYLE;
}

$form = new FormExtended('style-switcher-form', 'vertical');
$form->setMode('development');
$form->useLoadJs('core');

$form->setOptions(array('elementsWrapper' => '<div class="bs5-form-stacked-element mb-5"></div>'));

// Bootstrap theme
$form->addBootstrapThemeSelect();

// navbar_style
$form->addNavStyleSelect('navbar_style', NAVBAR_STYLE_TXT);

// sidebar_style
$form->addNavStyleSelect('sidebar_style', SIDEBAR_STYLE_TXT);

$form->centerContent();
$form->addBtn('button', 'revert-styles', 1, STYLES_REVERT, 'class=btn btn-warning');

$form->render();
$form->printJsCode();
?>
<script>
    let bootstrapThemeClassName = 'palette-' + $('select[name="bootstrap_theme"]').val(),
        initialBootstrapThemeClassName = 'palette-' + $('select[name="bootstrap_theme"]').val(),
        navbarStyle = $('select[name="navbar_style"]').val(),
        sidebarStyle = $('select[name="sidebar_style"]').val();

    const loadNewBootstrapThemeCss = function(oldBootstrapTheme, newBootstrapTheme) {
        oldBootstrapTheme = oldBootstrapTheme.replace('palette-', '');
        newBootstrapTheme = newBootstrapTheme.replace('palette-', '');
        loadjs([
            'assets/stylesheets/themes/' + newBootstrapTheme + '/bootstrap.min.css',
            'assets/stylesheets/themes/' + newBootstrapTheme + '/admin.min.css'
        ]
        );
        $('link[rel=stylesheet][href*="admin/assets/stylesheets/themes/' + oldBootstrapTheme + '/bootstrap.min.css"]').remove();
        $('link[rel=stylesheet][href*="admin/assets/stylesheets/themes/' + oldBootstrapTheme + '/admin.min.css"]').remove();
    }

    const updateStyleSelect = function(selectId, bootstrapThemeClassName, newClassName) {
        $('#' + selectId + ' option').each(function(_index, el) {
            $(el).attr('data-html', $(el).attr('data-html').replace(bootstrapThemeClassName, newClassName));
        });
        window.slimSelects[selectId].data.data.forEach(d => {
            d.innerHTML = d.data.html;
        });
        window.slimSelects[selectId].setData(window.slimSelects[selectId].data.data);
    }

    $('select[name="bootstrap_theme"]').on('change', function() {
        const newClassName = 'palette-' + $(this).val();
        loadNewBootstrapThemeCss(bootstrapThemeClassName, newClassName);
        updateStyleSelect('navbar_style', bootstrapThemeClassName, newClassName);
        updateStyleSelect('sidebar_style', bootstrapThemeClassName, newClassName);
        // console.log('replace ' + bootstrapThemeClassName + ' with ' + newClassName);

        bootstrapThemeClassName = newClassName;
    });

    $('select[name="navbar_style"]').on('change', function() {
        const newNavbarStyle = $(this).val();
        $('#navbar-main').removeClass('bg-' + navbarStyle).addClass('bg-' + newNavbarStyle);
        navbarStyle = newNavbarStyle;
    });

    $('select[name="sidebar_style"]').on('change', function() {
        const newSidebarStyle = $(this).val();
        $('#sidebar-main').removeClass('bg-' + sidebarStyle).addClass('bg-' + newSidebarStyle);
        sidebarStyle = newSidebarStyle;
    });

    $('button[name="revert-styles"').on('click', function() {
        window.slimSelects['navbar_style'].set('<?php echo ORIGINAL_NAVBAR_STYLE; ?>');
        window.slimSelects['sidebar_style'].set('<?php echo ORIGINAL_SIDEBAR_STYLE; ?>');
        window.slimSelects['bootstrap_theme'].set('<?php echo ORIGINAL_BOOTSTRAP_THEME; ?>');
        // when slimselect changes the value it reverts the html to the initial template,
        // so we have to replace the initial Bootstrap classname (from the php userConf or cookie) with the original (defined in the php userConf).
        $('.' + initialBootstrapThemeClassName).removeClass(initialBootstrapThemeClassName).addClass('palette-<?php echo ORIGINAL_BOOTSTRAP_THEME; ?>');
    });

    document.getElementById('style-switcher-wrapper').addEventListener('hide.bs.offcanvas', () => {
        const $form = document.getElementById('style-switcher-form');
        let data = new FormData($form);
        fetch('<?php echo ADMIN_URL; ?>/inc/style-register.php', {
            method: 'post',
            body: new URLSearchParams(data).toString(),
            headers: {
                'Content-type': 'application/x-www-form-urlencoded; charset=utf-8'
            },
            cache: 'no-store',
            credentials: 'include'
        }).then(function (response) {
            return response.text()
        }).then(function (data) {
            $('#msg').html(data);
        }).catch(function (error) {
            console.log(error);
        });
    });
</script>