2018-11-05 09:26:24 +01:00
< ? php
namespace Zotlabs\Theme ;
2025-04-06 05:14:08 -04:00
use ScssPhp\ScssPhp\Compiler ;
use ScssPhp\ScssPhp\OutputStyle ;
2026-04-11 10:52:14 +03:00
use ScssPhp\ScssPhp\ValueConverter ;
2025-04-06 05:14:08 -04:00
2018-11-05 14:31:34 +01:00
class UssrbasicConfig {
2018-11-05 09:26:24 +01:00
function get_schemas () {
$files = glob ( 'view/theme/ussrbasic/schema/*.php' );
$scheme_choices = [];
if ( $files ) {
if ( in_array ( 'view/theme/ussrbasic/schema/default.php' , $files )) {
$scheme_choices [ '---' ] = t ( 'Default' );
$scheme_choices [ 'focus' ] = t ( 'Focus (Hubzilla default)' );
}
else {
$scheme_choices [ '---' ] = t ( 'Focus (Hubzilla default)' );
}
foreach ( $files as $file ) {
$f = basename ( $file , " .php " );
if ( $f != 'default' ) {
$scheme_name = $f ;
$scheme_choices [ $f ] = $scheme_name ;
}
}
}
return $scheme_choices ;
}
function get () {
2021-12-14 21:48:12 +03:00
if ( ! local_channel ()) {
2018-11-05 09:26:24 +01:00
return ;
}
2025-04-06 05:14:08 -04:00
$arr [ 'primary_color' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'primary_color' );
$arr [ 'success_color' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'success_color' );
$arr [ 'info_color' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'info_color' );
$arr [ 'warning_color' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'warning_color' );
$arr [ 'danger_color' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'danger_color' );
2024-02-17 17:00:05 +01:00
$arr [ 'dark_mode' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'dark_mode' );
$arr [ 'navbar_dark_mode' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'navbar_dark_mode' );
2018-11-05 14:31:34 +01:00
$arr [ 'narrow_navbar' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'narrow_navbar' );
$arr [ 'nav_bg' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'nav_bg' );
2024-02-17 17:00:05 +01:00
$arr [ 'nav_bg_dark' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'nav_bg_dark' );
$arr [ 'bgcolor' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'background_color' );
$arr [ 'bgcolor_dark' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'background_color_dark' );
2018-11-05 14:31:34 +01:00
$arr [ 'background_image' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'background_image' );
2024-02-17 17:00:05 +01:00
$arr [ 'background_image_dark' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'background_image_dark' );
2018-11-05 14:31:34 +01:00
$arr [ 'font_size' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'font_size' );
$arr [ 'radius' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'radius' );
$arr [ 'converse_width' ] = get_pconfig ( local_channel (), " ussrbasic " , " converse_width " );
$arr [ 'top_photo' ] = get_pconfig ( local_channel (), " ussrbasic " , " top_photo " );
$arr [ 'reply_photo' ] = get_pconfig ( local_channel (), " ussrbasic " , " reply_photo " );
$arr [ 'advanced_theming' ] = get_pconfig ( local_channel (), 'ussrbasic' , 'advanced_theming' );
2018-11-05 09:26:24 +01:00
return $this -> form ( $arr );
}
function post () {
2021-12-14 21:48:12 +03:00
if ( ! local_channel ()) {
2018-11-05 09:26:24 +01:00
return ;
}
2018-11-05 14:31:34 +01:00
if ( isset ( $_POST [ 'ussrbasic-settings-submit' ])) {
2026-04-11 10:52:14 +03:00
$primary_color = '' ;
$color_changed = false ;
$success_color = '' ;
$info_color = '' ;
$warning_color = '' ;
$danger_color = '' ;
$radius = floatval ( $_POST [ 'ussrbasic_radius' ]);
$radius_changed = $_POST [ 'ussrbasic_radius' ] !== get_pconfig ( local_channel (), 'ussrbasic' , 'radius' );
if ( preg_match ( '/^#([A-Fa-f0-9]{3}){1,2}$/' , $_POST [ 'ussrbasic_primary_color' ])) {
if ( ! $color_changed ) {
$color_changed = $_POST [ 'ussrbasic_primary_color' ] !== get_pconfig ( local_channel (), 'ussrbasic' , 'primary_color' );
2025-04-06 05:14:08 -04:00
}
2026-04-11 10:52:14 +03:00
$primary_color = $_POST [ 'ussrbasic_primary_color' ];
}
if ( preg_match ( '/^#([A-Fa-f0-9]{3}){1,2}$/' , $_POST [ 'ussrbasic_success_color' ])) {
if ( ! $color_changed ) {
$color_changed = $_POST [ 'ussrbasic_success_color' ] !== get_pconfig ( local_channel (), 'ussrbasic' , 'success_color' );
2025-04-06 05:14:08 -04:00
}
2026-04-11 10:52:14 +03:00
$success_color = $_POST [ 'ussrbasic_success_color' ];
}
if ( preg_match ( '/^#([A-Fa-f0-9]{3}){1,2}$/' , $_POST [ 'ussrbasic_info_color' ])) {
if ( ! $color_changed ) {
$color_changed = $_POST [ 'ussrbasic_info_color' ] !== get_pconfig ( local_channel (), 'ussrbasic' , 'info_color' );
2025-04-06 05:14:08 -04:00
}
2026-04-11 10:52:14 +03:00
$info_color = $_POST [ 'ussrbasic_info_color' ];
}
if ( preg_match ( '/^#([A-Fa-f0-9]{3}){1,2}$/' , $_POST [ 'ussrbasic_warning_color' ])) {
if ( ! $color_changed ) {
$color_changed = $_POST [ 'ussrbasic_warning_color' ] !== get_pconfig ( local_channel (), 'ussrbasic' , 'warning_color' );
2025-04-06 05:14:08 -04:00
}
2026-04-11 10:52:14 +03:00
$warning_color = $_POST [ 'ussrbasic_warning_color' ];
}
if ( preg_match ( '/^#([A-Fa-f0-9]{3}){1,2}$/' , $_POST [ 'ussrbasic_danger_color' ])) {
if ( ! $color_changed ) {
$color_changed = $_POST [ 'ussrbasic_danger_color' ] !== get_pconfig ( local_channel (), 'ussrbasic' , 'danger_color' );
2025-04-06 05:14:08 -04:00
}
2026-04-11 10:52:14 +03:00
$danger_color = $_POST [ 'ussrbasic_danger_color' ];
}
if ( ! $primary_color && ! $success_color && ! $info_color && ! $warning_color && ! $danger_color && ! $radius ) {
set_pconfig ( local_channel (), 'ussrbasic' , 'bootstrap' , '' );
}
else if ( $color_changed || $radius_changed ) {
try {
$compiler = new Compiler ();
$compiler -> setImportPaths ( 'vendor/twbs/bootstrap/scss' );
$compiler -> setOutputStyle ( OutputStyle :: COMPRESSED );
// Set Variables
if ( $primary_color ) {
$variables [ '$primary' ] = ValueConverter :: parseValue ( $primary_color );
}
if ( $success_color ) {
$variables [ '$success' ] = ValueConverter :: parseValue ( $success_color );
}
if ( $info_color ) {
$variables [ '$info' ] = ValueConverter :: parseValue ( $info_color );
}
if ( $warning_color ) {
$variables [ '$warning' ] = ValueConverter :: parseValue ( $warning_color );
}
if ( $danger_color ) {
$variables [ '$danger' ] = ValueConverter :: parseValue ( $danger_color );
}
if ( $radius ) {
$variables [ '$border-radius' ] = ValueConverter :: parseValue ( $radius . 'rem' );
$variables [ '$border-radius-sm' ] = ValueConverter :: parseValue ( $radius / 1.5 . 'rem' );
$variables [ '$border-radius-lg' ] = ValueConverter :: parseValue ( $radius * 1.333 . 'rem' );
$variables [ '$border-radius-xl' ] = ValueConverter :: parseValue ( $radius * 2.666 . 'rem' );
$variables [ '$border-radius-xxl' ] = ValueConverter :: parseValue ( $radius * 5.333 . 'rem' );
}
2025-04-06 05:14:08 -04:00
2026-04-11 10:52:14 +03:00
// Replace Bootstrap Variables with Customizer Variables
if ( $variables ) {
2025-04-06 05:14:08 -04:00
$compiler -> replaceVariables ( $variables );
2026-04-11 10:52:14 +03:00
}
2025-04-06 05:14:08 -04:00
2026-04-11 10:52:14 +03:00
$bs = $compiler -> compileString ( '@import "bootstrap.scss";' );
2025-04-06 05:14:08 -04:00
2026-04-11 10:52:14 +03:00
set_pconfig ( local_channel (), 'ussrbasic' , 'bootstrap' , $bs -> getCss ());
} catch ( \Exception $e ) {
logger ( 'scssphp: Unable to compile content' );
2025-04-06 05:14:08 -04:00
}
}
set_pconfig ( local_channel (), 'ussrbasic' , 'primary_color' , $_POST [ 'ussrbasic_primary_color' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'success_color' , $_POST [ 'ussrbasic_success_color' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'info_color' , $_POST [ 'ussrbasic_info_color' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'warning_color' , $_POST [ 'ussrbasic_warning_color' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'danger_color' , $_POST [ 'ussrbasic_danger_color' ]);
2018-11-05 14:31:34 +01:00
set_pconfig ( local_channel (), 'ussrbasic' , 'narrow_navbar' , $_POST [ 'ussrbasic_narrow_navbar' ]);
2024-02-17 17:00:05 +01:00
set_pconfig ( local_channel (), 'ussrbasic' , 'navbar_dark_mode' , $_POST [ 'ussrbasic_navbar_dark_mode' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'dark_mode' , $_POST [ 'ussrbasic_dark_mode' ]);
2018-11-05 14:31:34 +01:00
set_pconfig ( local_channel (), 'ussrbasic' , 'nav_bg' , $_POST [ 'ussrbasic_nav_bg' ]);
2024-02-17 17:00:05 +01:00
set_pconfig ( local_channel (), 'ussrbasic' , 'nav_bg_dark' , $_POST [ 'ussrbasic_nav_bg_dark' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'background_color' , $_POST [ 'ussrbasic_background_color' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'background_color_dark' , $_POST [ 'ussrbasic_background_color_dark' ]);
2018-11-05 14:31:34 +01:00
set_pconfig ( local_channel (), 'ussrbasic' , 'background_image' , $_POST [ 'ussrbasic_background_image' ]);
2024-02-17 17:00:05 +01:00
set_pconfig ( local_channel (), 'ussrbasic' , 'background_image_dark' , $_POST [ 'ussrbasic_background_image_dark' ]);
2018-11-05 14:31:34 +01:00
set_pconfig ( local_channel (), 'ussrbasic' , 'font_size' , $_POST [ 'ussrbasic_font_size' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'radius' , $_POST [ 'ussrbasic_radius' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'converse_width' , $_POST [ 'ussrbasic_converse_width' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'top_photo' , $_POST [ 'ussrbasic_top_photo' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'reply_photo' , $_POST [ 'ussrbasic_reply_photo' ]);
set_pconfig ( local_channel (), 'ussrbasic' , 'advanced_theming' , $_POST [ 'ussrbasic_advanced_theming' ]);
2025-04-06 05:14:08 -04:00
// This is used to refresh the cache
set_pconfig ( local_channel (), 'system' , 'style_update' , time ());
2018-11-05 09:26:24 +01:00
}
}
function form ( $arr ) {
2024-02-17 17:00:05 +01:00
$expert = false ;
if ( get_pconfig ( local_channel (), 'ussrbasic' , 'advanced_theming' )) {
$expert = true ;
}
2021-12-14 21:48:12 +03:00
2024-02-17 17:00:05 +01:00
$o = replace_macros ( get_markup_template ( 'theme_settings.tpl' ), array (
2018-11-05 09:26:24 +01:00
'$submit' => t ( 'Submit' ),
'$baseurl' => z_root (),
'$theme' => \App :: $channel [ 'channel_theme' ],
'$expert' => $expert ,
'$title' => t ( " Theme settings " ),
2024-02-17 17:00:05 +01:00
'$dark' => t ( 'Dark style' ),
'$light' => t ( 'Light style' ),
'$common' => t ( 'Common settings' ),
2025-04-06 05:14:08 -04:00
'$primary_color' => array ( 'ussrbasic_primary_color' , t ( 'Primary theme color' ), $arr [ 'primary_color' ], '<i class="bi bi-circle-fill text-primary"></i> ' . t ( 'Current color, leave empty for default' )),
'$success_color' => array ( 'ussrbasic_success_color' , t ( 'Success theme color' ), $arr [ 'success_color' ], '<i class="bi bi-circle-fill text-success"></i> ' . t ( 'Current color, leave empty for default' )),
'$info_color' => array ( 'ussrbasic_info_color' , t ( 'Info theme color' ), $arr [ 'info_color' ], '<i class="bi bi-circle-fill text-info"></i> ' . t ( 'Current color, leave empty for default' )),
'$warning_color' => array ( 'ussrbasic_warning_color' , t ( 'Warning theme color' ), $arr [ 'warning_color' ], '<i class="bi bi-circle-fill text-warning"></i> ' . t ( 'Current color, leave empty for default' )),
'$danger_color' => array ( 'ussrbasic_danger_color' , t ( 'Danger theme color' ), $arr [ 'danger_color' ], '<i class="bi bi-circle-fill text-danger"></i> ' . t ( 'Current color, leave empty for default' )),
2024-02-17 17:00:05 +01:00
'$dark_mode' => array ( 'ussrbasic_dark_mode' , t ( 'Default to dark mode' ), $arr [ 'dark_mode' ], '' , array ( t ( 'No' ), t ( 'Yes' ))),
'$navbar_dark_mode' => array ( 'ussrbasic_navbar_dark_mode' , t ( 'Always use light icons for navbar' ), $arr [ 'navbar_dark_mode' ], t ( 'Enable this option if you use a dark navbar color in light mode' ), array ( t ( 'No' ), t ( 'Yes' ))),
2018-11-05 14:31:34 +01:00
'$narrow_navbar' => array ( 'ussrbasic_narrow_navbar' , t ( 'Narrow navbar' ), $arr [ 'narrow_navbar' ], '' , array ( t ( 'No' ), t ( 'Yes' ))),
'$nav_bg' => array ( 'ussrbasic_nav_bg' , t ( 'Navigation bar background color' ), $arr [ 'nav_bg' ]),
2024-02-17 17:00:05 +01:00
'$nav_bg_dark' => array ( 'ussrbasic_nav_bg_dark' , t ( 'Dark navigation bar background color' ), $arr [ 'nav_bg_dark' ]),
'$bgcolor' => array ( 'ussrbasic_background_color' , t ( 'Set the background color' ), $arr [ 'bgcolor' ]),
'$bgcolor_dark' => array ( 'ussrbasic_background_color_dark' , t ( 'Set the dark background color' ), $arr [ 'bgcolor_dark' ]),
2021-12-14 21:48:12 +03:00
'$background_image' => array ( 'ussrbasic_background_image' , t ( 'Set the background image' ), $arr [ 'background_image' ]),
2024-02-17 17:00:05 +01:00
'$background_image_dark' => array ( 'ussrbasic_background_image_dark' , t ( 'Set the dark background image' ), $arr [ 'background_image_dark' ]),
2018-11-05 14:31:34 +01:00
'$font_size' => array ( 'ussrbasic_font_size' , t ( 'Set font-size for the entire application' ), $arr [ 'font_size' ], t ( 'Examples: 1rem, 100%, 16px' )),
2025-04-06 05:14:08 -04:00
'$radius' => array ( 'ussrbasic_radius' , t ( 'Set radius of corners in rem' ), $arr [ 'radius' ], t ( 'Leave empty for default radius' )),
2021-12-14 21:48:12 +03:00
'$converse_width' => array ( 'ussrbasic_converse_width' , t ( 'Set maximum width of content region in rem' ), $arr [ 'converse_width' ], t ( 'Leave empty for default width' )),
2025-04-06 05:14:08 -04:00
'$top_photo' => array ( 'ussrbasic_top_photo' , t ( 'Set size of conversation author photo' ), $arr [ 'top_photo' ], t ( 'Leave empty for default size' )),
'$reply_photo' => array ( 'ussrbasic_reply_photo' , t ( 'Set size of followup author photos' ), $arr [ 'reply_photo' ], t ( 'Leave empty for default size' )),
2018-11-05 14:31:34 +01:00
'$advanced_theming' => [ 'ussrbasic_advanced_theming' , t ( 'Show advanced settings' ), $arr [ 'advanced_theming' ], '' , [ t ( 'No' ), t ( 'Yes' )]]
2018-11-05 09:26:24 +01:00
));
return $o ;
}
}
2024-02-17 17:00:05 +01:00
function ussrbasic_theme_admin_enable () {
// This function is called once when the theme is being enabled by the admin
// It can be used to register hooks etc.
}
2018-11-05 09:26:24 +01:00
2024-02-17 17:00:05 +01:00
function ussrbasic_theme_admin_disable () {
// This function is called once when the theme is being disabled by the admin
// It can be used to unregister hooks etc.
}
2018-11-05 09:26:24 +01:00