diff --git a/includes/runtime/Theme.php b/includes/runtime/Theme.php index 630650b53933f84907012389e3205bf46f4b8253..212876d45d35b73630e046c73e626416db142b0b 100644 --- a/includes/runtime/Theme.php +++ b/includes/runtime/Theme.php @@ -65,7 +65,18 @@ class Vtiger_Theme extends Vtiger_Viewer { * @return <string> - theme folder */ public static function getBaseThemePath(){ - return 'layouts'. '/' . self::getLayoutName(). '/'. self::DEFAULTSKIN; + $basepath = 'layouts'. '/' . self::getLayoutName(); + $useskin = static::DEFAULTSKIN; + + // do we have any override valid custom skin? + $customskin = isset($_SESSION) && isset($_SESSION['authenticated_user_skin']) ? $_SESSION['authenticated_user_skin'] : ''; + if ($customskin && !preg_match("/[^a-zA-Z0-9_-]/", $customskin)) { // strict-check to avoid file-inclusion attack. + $customskin = "custom_skins/" . $customskin; // lookup path + if (file_exists($basepath . '/' . $customskin)) { // ensure validity + $useskin = $customskin; + } + } + return $basepath . '/' . $useskin; } /** @@ -108,7 +119,11 @@ class Vtiger_Theme extends Vtiger_Viewer { * @return <Array> */ public static function getAllSkins(){ - return Vtiger_Util_Helper::getAllSkins(); + $dirs = glob("layouts/". static::DEFAULTLAYOUT . "/custom_skins/*", GLOB_ONLYDIR); + if (!empty($dirs)) { + $dirs = array_map('basename', $dirs); + } + return $dirs; } /** diff --git a/layouts/v7/custom_skins/.gitkeep b/layouts/v7/custom_skins/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/layouts/v7/modules/Users/Login.tpl b/layouts/v7/modules/Users/Login.tpl index bbcb892671912f8eb4a2bfe8cde8486c173c89a2..ea2b626d839ab2309dd9509d16ed3de700c86ed2 100644 --- a/layouts/v7/modules/Users/Login.tpl +++ b/layouts/v7/modules/Users/Login.tpl @@ -62,11 +62,14 @@ input:focus ~ .bar:before, input:focus ~ .bar:after { width: 50%; } + select { + font-size: 16px; + } #page { padding-top: 86px; } .widgetHeight { - height: 410px; + height: 460px; margin-top: 20px !important; } .loginDiv { @@ -230,7 +233,18 @@ <span class="bar"></span> <label>Password</label> </div> - <div class="group"> + {assign var="CUSTOM_SKINS" value=Vtiger_Theme::getAllSkins()} + {if !empty($CUSTOM_SKINS)} + <div class="group" style="margin-bottom: 10px;"> + <select id="skin" name="skin" placeholder="Skin" style="text-transform: capitalize; width:100%;height:30px;"> + <option value="">Default Skin</option> + {foreach item=CUSTOM_SKIN from=$CUSTOM_SKINS} + <option value="{$CUSTOM_SKIN}">{$CUSTOM_SKIN}</option> + {/foreach} + </select> + </div> + {/if} + <div class="group"> <button type="submit" class="button buttonBlue">Sign in</button><br> <a class="forgotPasswordLink" style="color: #15c;">forgot password?</a> </div> @@ -421,4 +435,4 @@ }); </script> </div> - {/strip} \ No newline at end of file + {/strip} diff --git a/modules/Users/actions/Login.php b/modules/Users/actions/Login.php index d46d937168cfa6d56052cd80d5deacafe6e31f9c..99f2dd9027d2d308049adf8cc82a8699ce388672 100644 --- a/modules/Users/actions/Login.php +++ b/modules/Users/actions/Login.php @@ -36,6 +36,7 @@ class Users_Login_Action extends Vtiger_Action_Controller { $_SESSION['authenticated_user_id'] = $userid; $_SESSION['app_unique_key'] = vglobal('application_unique_key'); $_SESSION['authenticated_user_language'] = vglobal('default_language'); + $_SESSION['authenticated_user_skin'] = $request->get('skin'); //Enabled session variable for KCFINDER $_SESSION['KCFINDER'] = array();