diff options
Diffstat (limited to 'plugins/Customizer/Template')
18 files changed, 1159 insertions, 0 deletions
diff --git a/plugins/Customizer/Template/board/task_avatar.php b/plugins/Customizer/Template/board/task_avatar.php new file mode 100644 index 00000000..3dd34a4c --- /dev/null +++ b/plugins/Customizer/Template/board/task_avatar.php @@ -0,0 +1,26 @@ +
+<?php if (! empty($task['owner_id'])): ?>
+<div class="task-board-avatars">
+ <span
+ <?php if ($this->user->hasProjectAccess('TaskModificationController', 'edit', $task['project_id'])): ?>
+ class="task-board-assignee task-board-change-assignee"
+ data-url="<?= $this->url->href('TaskModificationController', 'edit', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>">
+ <?php else: ?>
+ class="task-board-assignee">
+ <?php endif ?>
+ <?= $this->helper->dynamicAvatar->boardDynamic(
+ $task['owner_id'],
+ $task['assignee_username'],
+ $task['assignee_name'],
+ $task['assignee_email'],
+ $task['assignee_avatar_path'],
+ 'avatar-inline',
+ $this->task->configModel->get('b_av_size', '20')
+ ) ?>
+ </span>
+</div>
+<?php endif ?>
+<style>
+.avatar-bdyn img, .avatar-bdyn div {border-radius: <?= $this->task->configModel->get('b_av_radius', '50') ?>%}
+.avatar-bdyn .avatar-letter {line-height:<?= $this->task->configModel->get('b_av_size', '20') ?>px;width:<?= $this->task->configModel->get('b_av_size', '20') ?>px;font-size:<?= $this->task->configModel->get('b_av_size', '20') / 2 ?>px;}
+</style>
\ No newline at end of file diff --git a/plugins/Customizer/Template/config/sidebar.php b/plugins/Customizer/Template/config/sidebar.php new file mode 100644 index 00000000..b9d11934 --- /dev/null +++ b/plugins/Customizer/Template/config/sidebar.php @@ -0,0 +1,3 @@ +<li <?= $this->app->checkMenuSelection('CustomizerFileController', 'show') ?>> + <?= $this->url->link(t('Customizer'), 'CustomizerFileController', 'show', ['plugin' => 'Customizer']) ?> +</li> diff --git a/plugins/Customizer/Template/config/themecreator.php b/plugins/Customizer/Template/config/themecreator.php new file mode 100644 index 00000000..218547da --- /dev/null +++ b/plugins/Customizer/Template/config/themecreator.php @@ -0,0 +1,96 @@ +<form name="themecreator" id="themecreator" class="url-links" method="post" action="<?= $this->url->href('CustomizerConfigController', 'create_theme', array('plugin' => 'customizer', 'redirect' => 'application')) ?>" autocomplete="off"> +<?= $this->form->csrf() ?> + <div class="column-100" style="min-height: 600px;"> + <?= t('Theme Name: ') ?><input type="text" name="theme_name" placeholder="<?= t('Theme Name') ?>" pattern="[a-zA-Z0-9]+" title="<?= t('it should only contain alphanumeric without spaces') ?>" required> + <br> + <br> + <table> + <tr> + <th colspan="2" class="title-creator"> + <?= t('Header') ?> + </th> + <tr> + <td> + <strong><?= t('Header Background') ?></strong> + </td> + <td> + <input class="color" name="header_background" value=""> + </td> + <td> + <strong><?= t('Header Shade') ?></strong> + </td> + <td> + <input class="color" name="header_shade" value=""> + </td> + </tr> + <tr> + <td> + <strong><?= t('Header Title') ?></strong> + </td> + <td> + <input class="color" name="header_title" value=""> + </td> + </tr> + <tr> + <td> + <strong><?= t('Notification Icon') ?></strong> + </td> + <td> + <input class="color" name="notification_icon" value=""> + </td> + </tr> + <tr> + <th colspan="2" class="title-creator"> + <?= t('Body') ?> + </th> + <tr> + <tr> + <td> + <strong><?= t('Background Color') ?></strong> + </td> + <td> + <input class="color" name="background_color" value=""> + </td> + </tr> + <tr> + <td> + <strong><?= t('Main Font and Icons') ?></strong> + </td> + <td> + <input class="color" name="font_main" value=""> + </td> + <td> + <strong><?= t('Secondary Fonts and Icons') ?></strong> + </td> + <td> + <input class="color" name="font_secondary" value=""> + </td> + </tr> + <tr> + <td> + <strong><?= t('Links') ?></strong> + </td> + <td> + <input class="color" name="font_link" value=""> + </td> + <td> + <strong><?= t('Link Hover & Focus') ?></strong> + </td> + <td> + <input class="color" name="font_link_focus" value=""> + </td> + </tr> + <tr> + <td> + <strong><?= t('Over due') ?></strong> + </td> + <td> + <input class="color" name="font_overdue" value=""> + </td> + </tr> + </table> + </div> + <div class="form-actions" style="margin-bottom: 50px"> + <button type="submit" class="btn btn-blue"><?= t('Save') ?></button> + </div> +</form> diff --git a/plugins/Customizer/Template/file/remove.php b/plugins/Customizer/Template/file/remove.php new file mode 100644 index 00000000..4031f8a8 --- /dev/null +++ b/plugins/Customizer/Template/file/remove.php @@ -0,0 +1,15 @@ +<div class="page-header"> + <h2><?= t('Remove a file') ?></h2> +</div> + +<div class="confirm"> + <p class="alert alert-info"> + <?= t('Do you really want to remove this file: "%s"?', $this->text->e($file['name'])) ?> + </p> + + <?= $this->modal->confirmButtons( + 'CustomizerFileController', + 'removeform', + array('plugin' => 'customizer', 'custom_id' => $file['custom_id'], 'file_id' => $file['id']) + ) ?> +</div> diff --git a/plugins/Customizer/Template/file/show.php b/plugins/Customizer/Template/file/show.php new file mode 100644 index 00000000..c184656c --- /dev/null +++ b/plugins/Customizer/Template/file/show.php @@ -0,0 +1,435 @@ +<?php +global $customizer; +?> + +<?= $this->hook->render('customizer:config:style') ?> + +<div class="sidebar-content"> + <form name="settings" id="settings" class="url-links" method="post" action="<?= $this->url->href('CustomizerConfigController', 'save', array('plugin' => 'customizer', 'redirect' => 'application')) ?>" autocomplete="off"> + <?= $this->form->csrf() ?> + <fieldset class="login-link-block panel"> + + <button type="button" class="login-accordion"><i class="fa fa-picture-o" aria-hidden="true"></i> <?= t('Image Assets & Settings') ?></button> + <div class="login-accordian-panel mt-10"> + <div class="panel header-logo-panel"> + <div class="panel-heading"> + <h3 class="panel-title"><?= t('Header Image') ?></h3> + </div> + <img id="hl1" src="<?= $this->url->href('CustomizerFileController', 'logo_setting', array('plugin' => 'customizer', 'file_id' => $logo['id'])) ?>" alt="<?= $this->text->e($logo['name']) ?>" height="<?= $this->task->configModel->get('headerlogo_size', '30') ?>"> + <br> + <br> + <ul class="upload-link"> + <?php + ini_set('display_errors', 1); + ini_set('display_startup_errors', 1); + error_reporting(E_ALL); + ?> + + <?= $this->modal->medium('file', t('Upload Header Logo'), 'CustomizerFileController', 'create', array('plugin' => 'customizer', 'custom_id' => 1))?> + </ul class="remove-link"> + <?php if (null !== $this->task->customizerFileModel->getByType(1)) : ?> + <ul class="remove-link"> + <?php + ini_set('display_errors', 1); + ini_set('display_startup_errors', 1); + error_reporting(E_ALL); + ?> + + <?= $this->modal->medium('remove', t('Remove Header Logo'), 'CustomizerFileController', 'confirm', array('plugin' => 'customizer', 'custom_id' => 1, 'file_id' => $logo['id']))?> + </ul> + <?php endif ?> + <br><br> + <table> + <tr> + <th width="25%"><strong><?= t('Header Logo Size') ?></strong></th> + <th><input type="range" name="headerlogo_size" min="20" max="250" value="<?= $this->task->configModel->get('headerlogo_size','30') ?>"> + <header_logo_output> <?= $this->task->configModel->get('headerlogo_size','30') ?></header_logo_output><?= t(' pixels high') ?> + </th> + </tr> + </table> + + </div> + + <div class="panel login-logo-panel"> + <div class="panel-heading"> + <h3 class="panel-title"><?= t('Login Image') ?></h3> + </div> + + <img id="ll1" src="<?= $this->url->href('CustomizerFileController', 'loginlogo_setting', array('plugin' => 'customizer', 'file_id' => $loginlogo['id'])) ?>" alt="<?= $this->text->e($loginlogo['name']) ?>" height="<?= $this->task->configModel->get('loginlogo_size', '50') ?>"> + <br> + <br> + <ul class="upload-link"> + <?php + ini_set('display_errors', 1); + ini_set('display_startup_errors', 1); + error_reporting(E_ALL); + ?> + + <?= $this->modal->medium('file', t('Upload Login Logo'), 'CustomizerFileController', 'create', array('plugin' => 'customizer', 'custom_id' => 3))?> + </ul> + <?php if (null !== $this->task->customizerFileModel->getByType(3)) : ?> + <ul class="remove-link"> + <?php + ini_set('display_errors', 1); + ini_set('display_startup_errors', 1); + error_reporting(E_ALL); + ?> + + <?= $this->modal->medium('remove', t('Remove Login Logo'), 'CustomizerFileController', 'confirm', array('plugin' => 'customizer', 'custom_id' => 3, 'file_id' => $loginlogo['id']))?> + </ul> + <?php endif ?> + <br><br> + <table> + <tr> + <th width="25%"><strong><?= t('Login Logo Size') ?></strong></th> + <th><input type="range" name="loginlogo_size" min="20" max="500" value="<?= $this->task->configModel->get('loginlogo_size','50') ?>"> + <login_logo_output><?= $this->task->configModel->get('loginlogo_size','50') ?></login_logo_output><?= t(' pixels high') ?> + </th> + </tr> + </table> + + </div> + + <div class="panel favicon-panel"> + <div class="panel-heading"> + <h3 class="panel-title"><?= t('Favicon Image') ?></h3> + </div> + + <img src="<?= $this->url->href('CustomizerFileController', 'icon_setting', array('plugin' => 'customizer', 'file_id' => $flavicon['id'])) ?>" alt="<?= $this->text->e($flavicon['name']) ?>" height="16"> + <br> + <br> + <ul class="upload-link"> + <?php + ini_set('display_errors', 1); + ini_set('display_startup_errors', 1); + error_reporting(E_ALL); + ?> + <?= $this->modal->medium('file', t('Upload Favicon'), 'CustomizerFileController', 'create', array('plugin' => 'customizer', 'custom_id' => 2))?> + </ul> + </ul> + <?php if (null !== $this->task->customizerFileModel->getByType(2)) : ?> + <ul class="remove-link"> + <?php + ini_set('display_errors', 1); + ini_set('display_startup_errors', 1); + error_reporting(E_ALL); + ?> + + <?= $this->modal->medium('remove', t('Remove Favicon'), 'CustomizerFileController', 'confirm', array('plugin' => 'customizer', 'custom_id' => 2, 'file_id' => $flavicon['id']))?> + </ul> + <?php endif ?> + </div> + + <div class="panel avatar-sizing-panel"> + <div class="panel-heading"> + <h3 class="panel-title"><?= t('Header Avatar Icon') ?></h3> + </div> + <?= $this->helper->dynamicAvatar->currentUserDynamic('avatar-preview') ?> + <br> + <br> + <table> + <tr> + <th width="25%"><strong><?= t('Header Avatar Icon Size') ?></strong></th> + <th><input type="range" name="av_size" id="av_size" min="20" max="50" value="<?= $this->task->configModel->get('av_size','20') ?>"> + <av_icon_output> <?= $this->task->configModel->get('av_size','20') ?></av_icon_output><?= t(' pixels') ?> + </th> + </tr> + <tr> + <th width="25%"><strong><?= t('Header Avatar Icon Radius') ?></strong></th> + <th><input type="range" name="av_radius" id="av_radius" min="0" max="50" value="<?= $this->task->configModel->get('av_radius','50') ?>"> + <av_radius_output> <?= $this->task->configModel->get('av_radius','50') ?></av_radius_output><?= t(' percent') ?> + </th> + </tr> + </table> + + </div> + + <div class="panel b-avatar-sizing-panel"> + <div class="panel-heading"> + <h3 class="panel-title"><?= t('Task Board Avatar Icon') ?></h3> + </div> + <?= $this->helper->dynamicAvatar->boardCurrentUserDynamic('b-avatar-preview') ?> + <br> + <br> + <table> + <tr> + <th width="25%"><strong><?= t('Avatar Icon Size') ?></strong></th> + <th><input type="range" name="b_av_size" id="b_av_size" min="20" max="50" value="<?= $this->task->configModel->get('b_av_size','20') ?>"> + <b_av_icon_output> <?= $this->task->configModel->get('b_av_size','20') ?></b_av_icon_output><?= t(' pixels') ?> + </th> + </tr> + <tr> + <th width="25%"><strong><?= t('Avatar Icon Radius') ?></strong></th> + <th><input type="range" name="b_av_radius" id="b_av_radius" min="0" max="50" value="<?= $this->task->configModel->get('b_av_radius','50') ?>"> + <b_av_radius_output> <?= $this->task->configModel->get('b_av_radius','50') ?></b_av_radius_output><?= t(' percent') ?> + </th> + </tr> + </table> + + </div> +<style> +.avatar-bdyn img, .avatar-bdyn div {border-radius: <?= $this->task->configModel->get('b_av_radius', '50') ?>%} +.avatar-bdyn .avatar-letter {line-height:<?= $this->task->configModel->get('b_av_size', '20') ?>px;width:<?= $this->task->configModel->get('b_av_size', '20') ?>px;font-size:<?= $this->task->configModel->get('b_av_size', '20') / 2 ?>px;} +</style> + + + <table> + <tr> + <th width="25%"><strong><?= t('Enable Cache') ?></strong> + <p class="form-help enable-cache-desc"><?= e('Once enabled, site assets will begin to be cached for 5 days, increasing speed of site. However, you will need to clear your cache to see any new images uploaded. The settings page, will be unaffected by this setting.') ?></p> + </th> + <th> + <label class="switch"> + <input id="toggle" name="enable_cache" type="checkbox" value="checked" <?= $this->task->configModel->get('enable_cache','') ?>> + <span class="slider round"></span> + </label> + </th> + </tr> + </table> + <table> + <tr> + <th width="25%"><strong><?= t('Logo Generator') ?></strong> + <p class="form-help enable-cache-desc"><?= e('Experimental Tool, to create simple logos for those in need.') ?></p> + </th> + <th> + <a href="https://creecros.github.io/simple_logo_gen/"> + <img border="0" alt="logo_gen" src="/plugins/Customizer/Assets/img/logo-gen.png"> + </a> + </th> + </table> + <div class="form-actions mb-20 ml-15"> + <button type="submit" name="save" value="save" class="btn btn-blue"><?= t('Save') ?></button> + </div> + </div> + + <button type="button" class="login-accordion"><i class="fa fa-sign-in" aria-hidden="true"></i> <?= t('Login Page Settings') ?></button> + <?php if ($this->task->configModel->get('use_custom_login', '') == 'checked') : ?> + <div class="login-accordian-panel mt-10"> + <?php else :?> + <div class="login-accordian-panel mt-10"> + <?php endif ?> + <table> + <tr> + <th width="25%"><strong><?= t('Use Custom Login Settings') ?></strong></th> + <th> + <label class="switch"> + <input id="toggle" name="use_custom_login" type="checkbox" value="checked" <?= $this->task->configModel->get('use_custom_login','') ?>> + <span class="slider round"></span> + </label> + </th> + </tr> + </table> + + <?php if ($this->task->configModel->get('use_custom_login', '') == 'checked') : ?> + <?= $this->form->label(t('Login Link'), 'login_link') ?> + <?= $this->form->text('login_link', $values, $errors, array('placeholder="https://example.kanboard.org/"')) ?> + <p class="form-help login-link-desc"><?= e('Example: <code>https://example.kanboard.org/</code> (used as logo link on login page)') ?></p> + <?= $this->form->label(t('Login Background Image URL'), 'background_url') ?> + <?= $this->form->text('background_url', $values, $errors, array('placeholder="https://source.unsplash.com/random"')) ?> + <p class="form-help background-img-link-desc"><?= e('Example: <code>https://source.unsplash.com/random</code> (URL for a background image on the login page, centered, autoscale, no-repeat)') ?></p> + <?= $this->form->label(t('Login page note'), 'login_note') ?> + <?= $this->form->textarea('login_note', $values, $errors, array('placeholder="Welcome to Kanboard!"')) ?> + <p class="form-help login-note-desc"><?= e('Hint: Use HTML formatting to customize your note further.') ?></p> + <div class="column-100"> + <table> + <tr> + <th> + <strong><?= t('Login Page Background Color') ?></strong> + </th> + <th> + <input id="loginbackground_color" class="color" name="loginbackground_color" value="<?= $this->task->configModel->get('loginbackground_color','#ffffff') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Panel Shadow Color') ?></strong> + </th> + <th> + <input id="login_shadow_color" class="color" name="login_shadow_color" value="<?= $this->task->configModel->get('login_shadow_color','#333') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Panel Border Color') ?></strong> + </th> + <th> + <input id="login_border_color" class="color" name="login_border_color" value="<?= $this->task->configModel->get('login_border_color','#ffffff') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Panel Border Thickness') ?></strong> + </th> + <th> + <input id="login_border" type="range" name="login_border" min="0" max="10" value="<?= $this->task->configModel->get('login_border','0') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Panel Color') ?></strong> + </th> + <th> + <input id="loginpanel_color" class="color" name="loginpanel_color" value="<?= $this->task->configModel->get('loginpanel_color','#ffffff') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Panel Shadow Intensity') ?></strong> + </th> + <th> + <input id="login_shadow" type="range" name="login_shadow" min="0" max="20" value="<?= $this->task->configModel->get('login_shadow','0') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Button Background Color') ?></strong> + </th> + <th> + <input id="login_btn_color" class="color" name="login_btn_color" value="<?= $this->task->configModel->get('login_btn_color','#3079ed') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Button Shadow Color') ?></strong> + </th> + <th> + <input id="login_btn_shadow_color" class="color" name="login_btn_shadow_color" value="<?= $this->task->configModel->get('login_btn_shadow_color','#333') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Button Border Color') ?></strong> + </th> + <th> + <input id="login_btn_border_color" class="color" name="login_btn_border_color" value="<?= $this->task->configModel->get('login_btn_border_color','transparent') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Button Shade Color') ?></strong> + </th> + <th> + <input id="login_btn_shade_color" class="color" name="login_btn_shade_color" value="<?= $this->task->configModel->get('login_btn_shade_color','transparent') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Button Font Color') ?></strong> + </th> + <th> + <input id="login_btn_font_color" class="color" name="login_btn_font_color" value="<?= $this->task->configModel->get('login_btn_font_color','#ffffff') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Button Shadow Intensity') ?></strong> + </th> + <th> + <input id="login_btn_shadow" type="range" name="login_btn_shadow" min="0" max="20" value="<?= $this->task->configModel->get('login_btn_shadow','0') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Button Border Thickness') ?></strong> + </th> + <th> + <input id="login_btn_border" type="range" name="login_btn_border" min="0" max="10" value="<?= $this->task->configModel->get('login_btn_border','0') ?>"> + </th> + </tr> + <tr> + <th> + <strong><?= t('Login Button Width') ?></strong> + </th> + <th> + <input id="login_btn_width" type="range" name="login_btn_width" min="95" max="300" value="<?= $this->task->configModel->get('login_btn_width','95') ?>"> + </th> + </tr> + </table> + <p class="alert" style="max-width: 1000px;"><?= t('Changes must be saved in order to take effect.') ?> <button type="submit" name="save" value="save" class="btn btn-blue" style="float: right;margin-top: -6px;"><?= t('Save') ?></button></p> + <div class="panel" id="preview" style="background: url('<?= $customizer['backURL'] ?>') no-repeat center center;background-size: cover;height: 700px;max-width: 1000px;background-color: <?= $customizer['backColor'] ?>;"> + <div> + <p style="color: #f5f5f5;"><?= t('Preview') ?></p> + </div> + <div id="preview-form-login" class="preview-form-login"> + <?php if ($customizer['loginCheck']): ?> + <?= $this->url->link('<img src="' . $this->url->href('CustomizerFileController', 'loginlogo_setting', array('plugin' => 'customizer')) . '" height="' . $customizer['logoSize'] . '">', 'CustomizerFileController', 'link', array('plugin' => 'customizer')) ?> + <?php else: ?> + <?= $this->url->link('K<span>B</span>', 'DashboardController', 'show', array(), false, '', t('Dashboard')) ?> + <?php endif ?> + + <label for="form-username"></label> + <input type="text" name="username" placeholder="<?= t('Enter your username') ?>" style=" + border-radius: 5px; + "> + <span class="preview-form-required"></span> + <label for="form-password"></label> + <input type="password" name="password" placeholder="<?= t('Enter your password') ?>" style=" + border-radius: 5px; + "> + <span class="preview-form-required"></span> + <label style="color:grey"><input type="checkbox" name="remember_me" value="1" checked="checked" disabled> <?= t('Remember Me') ?></label> + <div style="margin-bottom: 10px !important;"></div> + <div class="preview-form-actions"> + <button type="button" id="preview-login-btn" class="btn preview-login-btn"><?= t('Sign in') ?></button> + </div> + <?php if ($this->app->config('password_reset') == 1): ?> + <div class="reset-password"> + <?= $this->url->link(t('Forgot password?'), 'PasswordResetController', 'create') ?> + </div> + <?php endif ?> + </div> + <div id="preview-form-note" class="preview-form-note"> + <div class="login-note"> + <?= $customizer['login_note'] ?> + </div> + </div> + </div> + </div> + <?php endif ?> + </div> + <button type="button" class="login-accordion"><i class="fa fa-refresh" aria-hidden="true"></i> <?= t('Manage Themes') ?></button> + <div class="login-accordian-panel mt-10"> + <div class="panel header-logo-panel"> + <h3 class="panel-title"><?= t('Global Themes') ?></h3> + <?= $this->form->label(t('Theme'), 'themeSelection') ?> + <?= $this->helper->themeHelper->reverseSelect('themeSelection', $customizer['themes'], $values, $errors) ?> + <p class="form-help theme-select"><?= e('This will be the theme selection for all users who have not chosen their own theme.') ?></p> + <div class="form-actions" style="margin-bottom: 50px"> + <button type="submit" name="save" value="save" class="btn btn-blue"><?= t('Save') ?> </button><button type="submit" name="remove" value="remove" class="btn btn-red"><?= t('Remove') ?></button> + </div> + </div> + </form> + + <form method="post" enctype="multipart/form-data" action="<?= $this->url->href('CustomizerConfigController', 'uploadcss', array('plugin' => 'customizer')) ?>"> + <div class="panel header-logo-panel"> + <h3 class="panel-title"><?= t('Upload a theme') ?></h3> + <input type="file" name="fileToUpload" id="fileToUpload"> + <input type="submit" class="btn btn-blue" value="<?= t('Add Theme') ?>" name="submit"> + </div> + </form> + <form method="post" enctype="multipart/form-data" action="<?= $this->url->href('CustomizerConfigController', 'resetUserThemes', array('plugin' => 'customizer')) ?>"> + <div class="panel header-logo-panel"> + <h3 class="panel-title"><?= t('Users themes option') ?></h3> + <input type="submit" class="btn btn-red" value="<?= t('Reset All Users Themes') ?>" name="submit"> + </div> + </form> + <form method="post" enctype="multipart/form-data" action="<?= $this->url->href('CustomizerConfigController', 'enableDisableThemes', array('plugin' => 'customizer')) ?>"> + <div class="panel header-logo-panel"> + <h3 class="panel-title"><?= t('Toggle Users themes') ?></h3> + <?php if ($this->task->configModel->get('toggle_user_themes', 'disable') == 'disable') : ?> + <input type="submit" class="btn btn-blue" value="<?= t('Enable Users Themes') ?>" name="submit"> + <?php else :?> + <input type="submit" class="btn btn-red" value="<?= t('Disable Users Themes') ?>" name="submit"> + <?php endif ?> + </div> + </form> + + + </div> + + <button type="button" class="login-accordion"><i class="fa fa-magic" aria-hidden="true"></i> <?= t('Theme Creator') ?></button> + <div class="login-accordian-panel mt-10"> + <?= $this->hook->render('customizer:config:themecreator') ?> + </div> + </div> +</fieldset> diff --git a/plugins/Customizer/Template/file/upload_flavicon.php b/plugins/Customizer/Template/file/upload_flavicon.php new file mode 100644 index 00000000..b0e8988c --- /dev/null +++ b/plugins/Customizer/Template/file/upload_flavicon.php @@ -0,0 +1,22 @@ +<div class="page-header"> + <h2><?= t('Favicon') ?></h2> + <br> + <?= t('Recommend 50x50 pixels, *.png only, max size 20kb.') ?> +</div> + +<?= $this->app->component('file-upload', array( + 'maxSize' => 20000, + 'url' => $this->url->to('CustomizerFileController', 'save', array('plugin' => 'customizer', 'custom_id' => 2)), + 'labelDropzone' => t('Drag and drop your file here'), + 'labelOr' => t('or'), + 'labelChooseFiles' => t('choose file'), + 'labelOversize' => t('The maximum allowed file size is %sB.', $this->text->bytes(20000)), + 'labelSuccess' => t('File has been uploaded successfully.'), + 'labelCloseSuccess' => t('Close this window'), + 'labelUploadError' => t('Unable to upload this file.'), +)) ?> + +<?= $this->modal->submitButtons(array( + 'submitLabel' => t('Upload Favicon'), + 'disabled' => true, +)) ?> diff --git a/plugins/Customizer/Template/file/upload_loginlogo.php b/plugins/Customizer/Template/file/upload_loginlogo.php new file mode 100644 index 00000000..fa715f36 --- /dev/null +++ b/plugins/Customizer/Template/file/upload_loginlogo.php @@ -0,0 +1,22 @@ +<div class="page-header"> + <h2><?= t('Login Logo') ?></h2> + <br> + <?= t('Recommend 100 pixels in height, *.png, *.jpg, *.gif, max size 500kb.') ?> +</div> + +<?= $this->app->component('file-upload', array( + 'maxSize' => 500000, + 'url' => $this->url->to('CustomizerFileController', 'save', array('plugin' => 'customizer', 'custom_id' => 3)), + 'labelDropzone' => t('Drag and drop your file here'), + 'labelOr' => t('or'), + 'labelChooseFiles' => t('choose file'), + 'labelOversize' => t('The maximum allowed file size is %sB.', $this->text->bytes(500000)), + 'labelSuccess' => t('File has been uploaded successfully.'), + 'labelCloseSuccess' => t('Close this window'), + 'labelUploadError' => t('Unable to upload this file.'), +)) ?> + +<?= $this->modal->submitButtons(array( + 'submitLabel' => t('Upload Login Logo'), + 'disabled' => true, +)) ?> diff --git a/plugins/Customizer/Template/file/upload_logo.php b/plugins/Customizer/Template/file/upload_logo.php new file mode 100644 index 00000000..0dae640c --- /dev/null +++ b/plugins/Customizer/Template/file/upload_logo.php @@ -0,0 +1,22 @@ +<div class="page-header"> + <h2><?= t('Header Logo') ?></h2> + <br> + <?= t('Recommend 100 pixels in width, *.png, *.jpg, *.gif, max size 500kb.') ?> +</div> + +<?= $this->app->component('file-upload', array( + 'maxSize' => 500000, + 'url' => $this->url->to('CustomizerFileController', 'save', array('plugin' => 'customizer', 'custom_id' => 1)), + 'labelDropzone' => t('Drag and drop your file here'), + 'labelOr' => t('or'), + 'labelChooseFiles' => t('choose file'), + 'labelOversize' => t('The maximum allowed file size is %sB.', $this->text->bytes(500000)), + 'labelSuccess' => t('File has been uploaded successfully.'), + 'labelCloseSuccess' => t('Close this window'), + 'labelUploadError' => t('Unable to upload this file.'), +)) ?> + +<?= $this->modal->submitButtons(array( + 'submitLabel' => t('Upload Header Logo'), + 'disabled' => true, +)) ?> diff --git a/plugins/Customizer/Template/header/title.php b/plugins/Customizer/Template/header/title.php new file mode 100644 index 00000000..5080c9be --- /dev/null +++ b/plugins/Customizer/Template/header/title.php @@ -0,0 +1,24 @@ +<h1> + <?php if (null !== $this->task->customizerFileModel->getByType(1)) : ?> + <span class="logo"> + <a href="<?= $this->url->href('DashboardController', 'show', array(), false, '', t('Dashboard')) ?>"> + <img src="<?= $this->url->href('CustomizerFileController', 'image', array('plugin' => 'customizer', 'file_id' => $this->task->customizerFileModel->getIdByType(1))) ?>" height="<?= $this->task->configModel->get('headerlogo_size', '30') ?>"> + </a> + </span> + <?php else: ?> + <span class="logo"> + <?= $this->url->link('K<span>B</span>', 'DashboardController', 'show', array(), false, '', t('Dashboard')) ?> + </span> + <?php endif ?> + + <span class="title"> + <?php if (! empty($project) && ! empty($task)): ?> + <?= $this->url->link($this->text->e($project['name']), 'BoardViewController', 'show', array('project_id' => $project['id'])) ?> + <?php else: ?> + <?= $this->text->e($title) ?> + <?php endif ?> + </span> + <?php if (! empty($description)): ?> + <?= $this->app->tooltipHTML($description) ?> + <?php endif ?> +</h1> diff --git a/plugins/Customizer/Template/header/title_older_kb.php b/plugins/Customizer/Template/header/title_older_kb.php new file mode 100644 index 00000000..a38ff323 --- /dev/null +++ b/plugins/Customizer/Template/header/title_older_kb.php @@ -0,0 +1,26 @@ +<h1> + <?php if (null !== $this->task->customizerFileModel->getByType(1)) : ?> + <span class="logo"> + <a href="<?= $this->url->href('DashboardController', 'show', array(), false, '', t('Dashboard')) ?>"> + <img src="<?= $this->url->href('CustomizerFileController', 'image', array('plugin' => 'customizer', 'file_id' => $this->task->customizerFileModel->getIdByType(1))) ?>" height="<?= $this->task->configModel->get('headerlogo_size', '30') ?>"> + </a> + </span> + <?php else: ?> + <span class="logo"> + <?= $this->url->link('K<span>B</span>', 'DashboardController', 'show', array(), false, '', t('Dashboard')) ?> + </span> + <?php endif ?> + + <span class="title"> + <?php if (! empty($project) && ! empty($task)): ?> + <?= $this->url->link($this->text->e($project['name']), 'BoardViewController', 'show', array('project_id' => $project['id'])) ?> + <?php else: ?> + <?= $this->text->e($title) ?> + <?php endif ?> + </span> + <?php if (! empty($description)): ?> + <small class="tooltip" title="<?= $this->text->markdownAttribute($description) ?>"> + <i class="fa fa-info-circle"></i> + </small> + <?php endif ?> +</h1> diff --git a/plugins/Customizer/Template/header/user_dropdown.php b/plugins/Customizer/Template/header/user_dropdown.php new file mode 100644 index 00000000..d302924f --- /dev/null +++ b/plugins/Customizer/Template/header/user_dropdown.php @@ -0,0 +1,45 @@ +<div class="dropdown"> + <a href="#" class="dropdown-menu dropdown-menu-link-icon" style="display:flex;position:relative;align-items:center;flex-direction:row;"><?= $this->helper->dynamicAvatar->currentUserDynamic('avatar-inline') ?><i class="fa fa-caret-down"></i></a> + <ul> + <li class="no-hover"><strong><?= $this->text->e($this->user->getFullname()) ?></strong></li> + <li> + <?= $this->url->icon('tachometer', t('My dashboard'), 'DashboardController', 'show', array('user_id' => $this->user->getId())) ?> + </li> + <li> + <?= $this->url->icon('home', t('My profile'), 'UserViewController', 'show', array('user_id' => $this->user->getId())) ?> + </li> + <li> + <?= $this->url->icon('folder', t('Projects management'), 'ProjectListController', 'show') ?> + </li> + <?php if ($this->user->hasAccess('UserListController', 'show')): ?> + <li> + <?= $this->url->icon('user', t('Users management'), 'UserListController', 'show') ?> + </li> + <li> + <?= $this->url->icon('group', t('Groups management'), 'GroupListController', 'index') ?> + </li> + <li> + <?= $this->url->icon('cubes', t('Plugins'), 'PluginController', 'show') ?> + </li> + <li> + <?= $this->url->icon('cog', t('Settings'), 'ConfigController', 'index') ?> + </li> + <?php endif ?> + + <?= $this->hook->render('template:header:dropdown') ?> + + <li> + <i class="fa fa-fw fa-life-ring" aria-hidden="true"></i> + <?= $this->url->doc(t('Documentation'), 'index') ?> + </li> + <?php if (! DISABLE_LOGOUT): ?> + <li> + <?= $this->url->icon('sign-out', t('Logout'), 'AuthController', 'logout') ?> + </li> + <?php endif ?> + </ul> +</div> +<style> +.avatar-dyn img, .avatar-dyn div {border-radius: <?= $this->task->configModel->get('av_radius', '50') ?>%} +.avatar-dyn .avatar-letter {line-height:<?= $this->task->configModel->get('av_size', '20') ?>px;width:<?= $this->task->configModel->get('av_size', '20') ?>px;font-size:<?= $this->task->configModel->get('av_size', '20') / 2 ?>px;} +</style> diff --git a/plugins/Customizer/Template/layout/index.php b/plugins/Customizer/Template/layout/index.php new file mode 100644 index 00000000..587b3e04 --- /dev/null +++ b/plugins/Customizer/Template/layout/index.php @@ -0,0 +1,47 @@ +<div class="form-login"> + + <?= $this->hook->render('template:auth:login-form:before') ?> + + <?php if (isset($errors['login'])): ?> + <p class="alert alert-error"><?= $this->text->e($errors['login']) ?></p> + <?php endif ?> + + <?php if (! HIDE_LOGIN_FORM): ?> + <form method="post" action="<?= $this->url->href('AuthController', 'check') ?>"> + + <?= $this->form->csrf() ?> + + <?= $this->form->label(t('Username'), 'username') ?> + <?= $this->form->text('username', $values, $errors, array('autofocus', 'required', 'placeholder="Enter your username"')) ?> + + <?= $this->form->label(t('Password'), 'password') ?> + <?= $this->form->password('password', $values, $errors, array('required', 'placeholder="Enter your password"')) ?> + + <?php if (isset($captcha) && $captcha): ?> + <?= $this->form->label(t('Enter the text below'), 'captcha') ?> + <img src="<?= $this->url->href('CaptchaController', 'image') ?>" alt="Captcha"> + <?= $this->form->text('captcha', array(), $errors, array('required')) ?> + <?php endif ?> + + <?php if (REMEMBER_ME_AUTH == true): ?> + <?= $this->form->checkbox('remember_me', t('Remember Me'), 1, true) ?> + <div class="mb-10"></div> + <?php else: ?> + <div class="mb-15"></div> + <?php endif ?> + + <div class="form-actions"> + <button type="submit" class="btn login-btn"><?= t('Sign in') ?></button> + </div> + <?php if ($this->app->config('password_reset') == 1): ?> + <div class="reset-password"> + <?= $this->url->link(t('Forgot password?'), 'PasswordResetController', 'create') ?> + </div> + <?php endif ?> + </form> + <?php endif ?> + + <?= $this->hook->render('template:auth:login-form:after') ?> +</div> + +<?= $this->hook->render('template:auth:login-form:newbox') ?> diff --git a/plugins/Customizer/Template/layout/layout.php b/plugins/Customizer/Template/layout/layout.php new file mode 100644 index 00000000..e5b4b772 --- /dev/null +++ b/plugins/Customizer/Template/layout/layout.php @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width"> + <meta name="mobile-web-app-capable" content="yes"> + <meta name="robots" content="noindex,nofollow"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="referrer" content="no-referrer"> + + <?php if (isset($board_public_refresh_interval)): ?> + <meta http-equiv="refresh" content="<?= $board_public_refresh_interval ?>"> + <?php endif ?> + + <?= $this->asset->colorCss() ?> + <?= $this->asset->css('assets/css/vendor.min.css') ?> + <?= $this->asset->css('assets/css/app.min.css') ?> + <?php if (file_exists('assets/css/print.min.css')) :?> + <?= $this->asset->css('assets/css/print.min.css', true, 'print') ?> + <?php endif ?> + <?= $this->asset->customCss() ?> + + <?php if (! isset($not_editable)): ?> + <?= $this->asset->js('assets/js/vendor.min.js') ?> + <?= $this->asset->js('assets/js/app.min.js') ?> + <?php endif ?> + + <?= $this->hook->asset('css', 'template:layout:css') ?> + <?= $this->hook->asset('js', 'template:layout:js') ?> + <?php if (null !== $this->task->customizerFileModel->getByType(2)) : ?> + <link rel="icon" type="image/png" href="<?= $this->url->href('CustomizerFileController', 'image', array('plugin' => 'customizer', 'file_id' => $this->task->customizerFileModel->getIdByType(2))) ?>"> + <link rel="apple-touch-icon" href="<?= $this->url->href('CustomizerFileController', 'image', array('plugin' => 'customizer', 'file_id' => $this->task->customizerFileModel->getIdByType(2))) ?>"> + <link rel="apple-touch-icon" sizes="72x72" href="<?= $this->url->href('CustomizerFileController', 'image', array('plugin' => 'customizer', 'file_id' => $this->task->customizerFileModel->getIdByType(2))) ?>"> + <link rel="apple-touch-icon" sizes="114x114" href="<?= $this->url->href('CustomizerFileController', 'image', array('plugin' => 'customizer', 'file_id' => $this->task->customizerFileModel->getIdByType(2))) ?>"> + <link rel="apple-touch-icon" sizes="144x144" href="<?= $this->url->href('CustomizerFileController', 'image', array('plugin' => 'customizer', 'file_id' => $this->task->customizerFileModel->getIdByType(2))) ?>"> + <?php else: ?> + <link rel="icon" type="image/png" href="<?= $this->url->dir() ?>assets/img/favicon.png"> + <link rel="apple-touch-icon" href="<?= $this->url->dir() ?>assets/img/touch-icon-iphone.png"> + <link rel="apple-touch-icon" sizes="72x72" href="<?= $this->url->dir() ?>assets/img/touch-icon-ipad.png"> + <link rel="apple-touch-icon" sizes="114x114" href="<?= $this->url->dir() ?>assets/img/touch-icon-iphone-retina.png"> + <link rel="apple-touch-icon" sizes="144x144" href="<?= $this->url->dir() ?>assets/img/touch-icon-ipad-retina.png"> + <?php endif ?> + + + <title> + <?php if (isset($page_title)): ?> + <?= $this->text->e($page_title) ?> + <?php elseif (isset($title)): ?> + <?= $this->text->e($title) ?> + <?php else: ?> + Kanboard + <?php endif ?> + </title> + + <?= $this->hook->render('template:layout:head') ?> + </head> + <body data-status-url="<?= $this->url->href('UserAjaxController', 'status') ?>" + data-login-url="<?= $this->url->href('AuthController', 'login') ?>" + data-keyboard-shortcut-url="<?= $this->url->href('DocumentationController', 'shortcuts') ?>" + data-timezone="<?= $this->app->getTimezone() ?>" + data-js-lang="<?= $this->app->jsLang() ?>" + data-js-date-format="<?= $this->app->getJsDateFormat() ?>" + data-js-time-format="<?= $this->app->getJsTimeFormat() ?>" + data-js-modal-close-msg="<?= t('Close window?\\n\\nChanges that you made have not been saved.') ?>" + > + + <?php if (isset($no_layout) && $no_layout): ?> + <?= $this->app->flashMessage() ?> + <?= $content_for_layout ?> + <?php else: ?> + <?= $this->hook->render('template:layout:top') ?> + <?= $this->render('header', array( + 'title' => $title, + 'description' => isset($description) ? $description : '', + 'board_selector' => isset($board_selector) ? $board_selector : array(), + 'project' => isset($project) ? $project : array(), + )) ?> + <section class="page"> + <?= $this->app->flashMessage() ?> + <?= $content_for_layout ?> + </section> + <?= $this->hook->render('template:layout:bottom') ?> + <?php endif ?> + </body> +</html> diff --git a/plugins/Customizer/Template/layout/login_no_custom.php b/plugins/Customizer/Template/layout/login_no_custom.php new file mode 100644 index 00000000..7e7cbd54 --- /dev/null +++ b/plugins/Customizer/Template/layout/login_no_custom.php @@ -0,0 +1,21 @@ +<?php global $customizer; ?> +<?php if ($customizer['loginCheck']): ?> +<?= $this->url->link('<img src="' . $this->url->href('CustomizerFileController', 'loginlogo', array('plugin' => 'customizer')) . '" height="' . $customizer['logoSize'] . '">', 'CustomizerFileController', 'link', array('plugin' => 'customizer')) ?> +<?php endif ?> +<?php +if (function_exists('session_exists')) { +if (session_exists('redirectAfterLogin') && ! filter_var(session_get('redirectAfterLogin'), FILTER_VALIDATE_URL)) { + $redirect = session_get('redirectAfterLogin'); + if (strpos($redirect, 'Customizer') !== false) { + session_remove('redirectAfterLogin'); + } +} +} else { +if (isset($this->task->sessionStorage->redirectAfterLogin) && ! empty($this->task->sessionStorage->redirectAfterLogin) && ! filter_var($this->task->sessionStorage->redirectAfterLogin, FILTER_VALIDATE_URL)) { + $redirect = $this->task->sessionStorage->redirectAfterLogin; + if (strpos($redirect, 'Customizer') !== false) { + unset($this->task->sessionStorage->redirectAfterLogin); + } +} +} +?> diff --git a/plugins/Customizer/Template/layout/login_with_custom.php b/plugins/Customizer/Template/layout/login_with_custom.php new file mode 100644 index 00000000..1ca70d77 --- /dev/null +++ b/plugins/Customizer/Template/layout/login_with_custom.php @@ -0,0 +1,128 @@ +<?php global $customizer; ?> +<?php if ($customizer['loginCheck']): ?> +<?= $this->url->link('<img src="' . $this->url->href('CustomizerFileController', 'loginlogo', array('plugin' => 'customizer')) . '" height="' . $customizer['logoSize'] . '">', 'CustomizerFileController', 'link', array('plugin' => 'customizer')) ?> +<?php endif ?> +<style> +body { + background: url("<?= $customizer['backURL'] ?>") no-repeat center center fixed; + background-size: cover; + background-color: <?= $customizer['backColor'] ?>; +} +.mb-10 { + margin-bottom: 10px !important; +} +.mb-15 { + margin-bottom: 15px !important; +} + +.form-login > a > img { + display: block; + margin: auto; + padding-top: 10px +} /* This aligns the logo to the text. Adds padding to top of logo. */ + +.form-login { + background-color: <?= $customizer['loginpanel_color'] ?>; + -webkit-box-shadow: 0px 0px <?= $customizer['login_shadow'] ?>px <?= $customizer['login_shadow'] * .1 ?>px <?= $customizer['login_shadow_color'] ?>; + -moz-box-shadow: 0px 0px <?= $customizer['login_shadow'] ?>px <?= $customizer['login_shadow'] * .1 ?>px <?= $customizer['login_shadow_color'] ?>; + box-shadow: 0px 0px <?= $customizer['login_shadow'] ?>px <?= $customizer['login_shadow'] * .1 ?>px <?= $customizer['login_shadow_color'] ?>; + padding: 10px; + border: <?= $customizer['login_border'] ?>px solid <?= $customizer['login_border_color'] ?>; + border-radius: 5px; + max-width: max-content; + text-align: center; +} +.login-btn { + width: <?= $customizer['login_btn_width'] ?>px; + -webkit-box-shadow: 0px 0px <?= $customizer['login_btn_shadow'] ?>px <?= $customizer['login_btn_shadow'] * .1 ?>px <?= $customizer['login_btn_shadow_color'] ?>; + -moz-box-shadow: 0px 0px <?= $customizer['login_btn_shadow'] ?>px <?= $customizer['login_btn_shadow'] * .1 ?>px <?= $customizer['login_btn_shadow_color'] ?>; + box-shadow: 0px 0px <?= $customizer['login_btn_shadow'] ?>px <?= $customizer['login_btn_shadow'] * .1 ?>px <?= $customizer['login_btn_shadow_color'] ?>; + border: <?= $customizer['login_btn_border'] ?>px solid <?= $customizer['login_btn_border_color'] ?>; + background: <?= $customizer['login_btn_color'] ?>; + color: <?= $customizer['login_btn_font_color'] ?>; + background-image: linear-gradient(-180deg, <?= $customizer['login_btn_color'] ?> 0%, <?= $customizer['login_btn_shade_color'] ?> 90%); + border-radius: 5px; + } +.login-btn:hover, .login-btn:focus { + border-color: <?= $customizer['login_btn_border_color'] ?>; + background: <?= $customizer['login_btn_font_color'] ?>; + color: <?= $customizer['login_btn_color'] ?>; +} +/*------ MOVED FROM PLUGIN CSS FILE TO AVOID AFFECTING OTHER PARTS OF KANBOARD. STYLES SET HERE APPLY ONLY TO THE LOGIN PAGE. ------*/ +.form-actions { + text-align: center; + padding-top: unset; + padding-bottom: 10px; +} /* This moves the login button to the centre of the box and removes the useless padding above the login button. Adds padding to bottom of login button. */ + +label:nth-of-type(3n) { + color: grey; + text-align: center; +} /* This makes the 'remember me' smaller and centralised*/ + +.form-actions > .login-btn { + font-variant-caps: all-small-caps; + text-align: center; + transition: cubic-bezier(0.1, 0.75, 0.57, 1) 0.4s; + -webkit-transition: cubic-bezier(0.1, 0.75, 0.57, 1) 0.4s; +} /* This makes the title text of the login button all capitals. Also adds smoothing when hover on the login button */ + +label:nth-of-type(1) { + visibility: hidden; +} /* This hides (to maintain the gap) the text of the labels */ + +label:nth-of-type(2n) { + visibility: hidden; + margin-top: -5px; +} /* This hides (to maintain the gap) the text of the labels and also reduces the top margin */ + +input::-webkit-input-placeholder { + color: #000; + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} /* This styles the placeholder to emphasise it. Cross-browser compatibility */ + +input::-moz-placeholder { + color: #000; + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} /* This styles the placeholder to emphasise it. Cross-browser compatibility */ + +input:-ms-input-placeholder { + color: #000; + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} /* This styles the placeholder to emphasise it. Cross-browser compatibility */ + +input::placeholder { + color: #000; + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} /* This styles the placeholder to emphasise it. Cross-browser compatibility */ + +input[type="password"], input[type="text"]:not(.input-addon-field) { + margin: auto; + display: block; + border-radius: 5px; +} /* This centralises the input fields and makes the borders consistent with the outer form */ + +.form-required { display: none;} /* This removes the standard required asterisk */ + +</style> +<?php +if (function_exists('session_exists')) { +if (session_exists('redirectAfterLogin') && ! filter_var(session_get('redirectAfterLogin'), FILTER_VALIDATE_URL)) { + $redirect = session_get('redirectAfterLogin'); + if (strpos($redirect, 'Customizer') !== false) { + session_remove('redirectAfterLogin'); + } +} +} else { +if (isset($this->task->sessionStorage->redirectAfterLogin) && ! empty($this->task->sessionStorage->redirectAfterLogin) && ! filter_var($this->task->sessionStorage->redirectAfterLogin, FILTER_VALIDATE_URL)) { + $redirect = $this->task->sessionStorage->redirectAfterLogin; + if (strpos($redirect, 'Customizer') !== false) { + unset($this->task->sessionStorage->redirectAfterLogin); + } +} +} +?> diff --git a/plugins/Customizer/Template/layout/note.php b/plugins/Customizer/Template/layout/note.php new file mode 100644 index 00000000..b8454e64 --- /dev/null +++ b/plugins/Customizer/Template/layout/note.php @@ -0,0 +1,7 @@ +<?php global $customizer; ?> + +<div class="form-login"> + <div class="login-note"> + <?= $customizer['login_note'] ?> + </div> +</div> diff --git a/plugins/Customizer/Template/layout/preview_style.php b/plugins/Customizer/Template/layout/preview_style.php new file mode 100644 index 00000000..fdd9576f --- /dev/null +++ b/plugins/Customizer/Template/layout/preview_style.php @@ -0,0 +1,77 @@ +<?php global $customizer; ?> +<style> +.preview-form-login > a > img { + display: block; + margin: auto; + padding-top: 10px +} /* This aligns the logo to the text. Adds padding to top of logo. */ + + +.preview-form-login, .preview-form-note { + background-color: <?= $customizer['loginpanel_color'] ?>; + -webkit-box-shadow: 0px 0px <?= $customizer['login_shadow'] ?>px <?= $customizer['login_shadow'] * .1 ?>px; + -moz-box-shadow: 0px 0px <?= $customizer['login_shadow'] ?>px <?= $customizer['login_shadow'] * .1 ?>px; + box-shadow: 0px 0px <?= $customizer['login_shadow'] ?>px <?= $customizer['login_shadow'] * .1 ?>px; + padding: 10px; + border: <?= $customizer['login_border'] ?>px solid <?= $customizer['login_border_color'] ?>; + border-radius: 5px; + text-align: center; + max-width: max-content; + margin: 5% auto 0;; +} +.preview-login-btn { + width: <?= $customizer['login_btn_width'] ?>px; + -webkit-box-shadow: 0px 0px <?= $customizer['login_btn_shadow'] ?>px <?= $customizer['login_btn_shadow'] * .1 ?>px <?= $customizer['login_btn_shadow_color'] ?>; + -moz-box-shadow: 0px 0px <?= $customizer['login_btn_shadow'] ?>px <?= $customizer['login_btn_shadow'] * .1 ?>px <?= $customizer['login_btn_shadow_color'] ?>; + box-shadow: 0px 0px <?= $customizer['login_btn_shadow'] ?>px <?= $customizer['login_btn_shadow'] * .1 ?>px <?= $customizer['login_btn_shadow_color'] ?>; + border: <?= $customizer['login_btn_border'] ?>px solid <?= $customizer['login_btn_border_color'] ?>; + background: <?= $customizer['login_btn_color'] ?>; + color: <?= $customizer['login_btn_font_color'] ?>; + background-image: linear-gradient(-180deg, transparent 0%, <?= $customizer['login_btn_shade_color'] ?> 90%); + border-radius: 5px; + } + +.preview-login-btn:hover, .preview-login-btn:focus { + border-color: <?= $customizer['login_btn_border_color'] ?>; + background: <?= $customizer['login_btn_font_color'] ?>; + color: <?= $customizer['login_btn_color'] ?>; + background-image: unset; +} + +.preview-form-actions > .preview-login-btn { + font-variant-caps: all-small-caps; + text-align: center; + transition: cubic-bezier(0.1, 0.75, 0.57, 1) 0.4s; + -webkit-transition: cubic-bezier(0.1, 0.75, 0.57, 1) 0.4s; +} + + +.preview-form-actions { + text-align: center; + padding-top: unset; + padding-bottom: 10px; +} /* This moves the login button to the centre of the box and removes the useless padding above the login button. Adds padding to bottom of login button. */ + + + +.preview-form-required { display: none;} /* This removes the standard required asterisk */ + +.avatar-preview img, .avatar-preview div { + border-radius: <?= $this->task->configModel->get('av_radius','50') ?>%; +} +.avatar-preview .avatar-letter { + line-height: <?= $this->task->configModel->get('av_size','20') ?>px; + width: <?= $this->task->configModel->get('av_size','20') ?>px; + font-size: <?= $this->task->configModel->get('av_size','20') / 2 ?>px; +} + +.b-avatar-preview img, .b-avatar-preview div { + border-radius: <?= $this->task->configModel->get('b_av_radius','50') ?>%; +} +.b-avatar-preview .avatar-letter { + line-height: <?= $this->task->configModel->get('b_av_size','20') ?>px; + width: <?= $this->task->configModel->get('b_av_size','20') ?>px; + font-size: <?= $this->task->configModel->get('b_av_size','20') / 2 ?>px; +} + +</style> diff --git a/plugins/Customizer/Template/user_mod/show.php b/plugins/Customizer/Template/user_mod/show.php new file mode 100644 index 00000000..a4fbaf96 --- /dev/null +++ b/plugins/Customizer/Template/user_mod/show.php @@ -0,0 +1,58 @@ +<?php
+global $customizer;
+$user_theme['themeSelection'] = $this->task->userMetadataModel->get($user['id'], 'themeSelection', $this->task->configModel->get('themeSelection', ''));
+?>
+
+<div class="page-header">
+ <h2><?= t('Edit user') ?></h2>
+</div>
+
+<form method="post" id="ts" action="<?= $this->url->href('CustomizerConfigController', 'usertheme', array('plugin' => 'customizer', 'user_id' => $user['id'])) ?>" autocomplete="off">
+ <?= $this->form->csrf() ?>
+ <?= $this->form->hidden('id', $values) ?>
+ <fieldset>
+ <legend><?= t('Themes') ?></legend>
+ <?= $this->form->label(t('User Theme'), 'themeSelection') ?>
+ <?= $this->helper->themeHelper->reverseSelectOnChange('themeSelection', $customizer['themes'], $user_theme, $errors) ?>
+ </fieldset>
+</form>
+
+<form method="post" action="<?= $this->url->href('UserModificationController', 'save', array('user_id' => $user['id'])) ?>" autocomplete="off">
+ <?= $this->form->csrf() ?>
+ <?= $this->form->hidden('id', $values) ?>
+
+ <fieldset>
+ <legend><?= t('Profile') ?></legend>
+ <?= $this->form->label(t('Username'), 'username') ?>
+ <?= $this->form->text('username', $values, $errors, array('autofocus', 'required', isset($values['is_ldap_user']) && $values['is_ldap_user'] == 1 && !$this->user->isAdmin() ? 'readonly' : '', 'maxlength="191"')) ?>
+
+ <?= $this->form->label(t('Name'), 'name') ?>
+ <?= $this->form->text('name', $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_name') ? '' : 'readonly')) ?>
+
+ <?= $this->form->label(t('Email'), 'email') ?>
+ <?= $this->form->email('email', $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_email') ? '' : 'readonly')) ?>
+ </fieldset>
+
+ <fieldset>
+ <legend><?= t('Preferences') ?></legend>
+ <?= $this->form->label(t('Timezone'), 'timezone') ?>
+ <?= $this->form->select('timezone', $timezones, $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_timezone') ? '' : 'disabled')) ?>
+
+ <?= $this->form->label(t('Language'), 'language') ?>
+ <?= $this->form->select('language', $languages, $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_language') ? '' : 'disabled')) ?>
+
+ <?= $this->form->label(t('Filter'), 'filter') ?>
+ <?= $this->form->text('filter', $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_filter') ? '' : 'readonly')) ?>
+ </fieldset>
+
+ <?php if ($this->user->isAdmin()): ?>
+ <fieldset>
+ <legend><?= t('Security') ?></legend>
+ <?= $this->form->label(t('Application role'), 'role') ?>
+ <?= $this->form->select('role', $roles, $values, $errors) ?>
+ </fieldset>
+ <?php endif ?>
+
+ <?= $this->modal->submitButtons() ?>
+</form>
+
\ No newline at end of file |