Compare commits
	
		
			11 Commits
		
	
	
		
			11_0_0-69_
			...
			11_0_0-79_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f30b4ab2b5 | |||
| fa286e966d | |||
| 9bb2128891 | |||
| accf96df0d | |||
| 1c601f0ace | |||
| cffbe53fb4 | |||
| aad1a458f4 | |||
| 252bf20410 | |||
| ebbe7af9a7 | |||
| 36de44fcef | |||
| 750ab7dd11 | 
| @@ -1,250 +0,0 @@ | ||||
| { | ||||
|     $OUT = <<'EOF'; | ||||
|  | ||||
| /*	from e-smith-manager to smanager (smeserver_manager2)  */ | ||||
|  | ||||
| /*---------------------------------------------------------------------- | ||||
|  * copyright (C) 1999-2003 Mitel Networks Corporation | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA | ||||
|  * | ||||
|  * Technical support for this program is available from Mitel Networks | ||||
|  * Please visit our web site www.mitel.com for details. | ||||
|  *---------------------------------------------------------------------- | ||||
|  */ | ||||
|  | ||||
| /* This is the stylesheet used as the basis for older broswers. | ||||
|  | ||||
| Note that you CANNOT simly add styles here and hope they work.  ONLY CSS | ||||
| level 1 styles should be in this file.  Everyting else goes into the other 3 | ||||
| files. | ||||
|  | ||||
| These basic styles ensire that browsers that don't understand the @import | ||||
| method will still be usable.  All modern browsers will use the styles in | ||||
| sme_main.css, sme_menu.css or sme_header.css depending on the frame in which | ||||
| the page is found.    | ||||
| */ | ||||
|  | ||||
| /* Default HTML styles */ | ||||
| body { | ||||
|     background: #ffffff; | ||||
|     color: #000000; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
|     border-width: 0; | ||||
| } | ||||
|  | ||||
| table, tr, td, div, p, form { | ||||
|     color: #000000; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
| } | ||||
|  | ||||
| p { | ||||
|     margin-top: 8px; | ||||
|     margin-bottom: 2px; | ||||
| } | ||||
|  | ||||
| form { | ||||
|     margin-top: 2px; | ||||
|     margin-bottom: 2px; | ||||
| } | ||||
|  | ||||
| span { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
| } | ||||
|  | ||||
| .notsmall { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
| } | ||||
|  | ||||
| h1, .h1 { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     color: #333333; | ||||
|     font-size: 18px; | ||||
|     margin-bottom: 4px; | ||||
|     margin-top: 12px; | ||||
| } | ||||
|  | ||||
| h2, .h2 { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     color: #333333; | ||||
|     font-size: 14px; | ||||
|     margin-bottom: 3px; | ||||
|     margin-top: 12px; | ||||
| } | ||||
|  | ||||
| h3, .h3 { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     color: #333333; | ||||
|     font-size: 12px; | ||||
|     margin-bottom: 2px; | ||||
|     margin-top: 12px; | ||||
| } | ||||
|  | ||||
| h4, .h4 { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-style: italic; | ||||
|     color: #333333; | ||||
|     font-size: 12px; | ||||
|     margin-bottom: 2px; | ||||
|     margin-top: 10px; | ||||
| } | ||||
|  | ||||
| ol, ul, li { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 10px; | ||||
|     font-weight: normal; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| ul { | ||||
|     list-style-type: circle; | ||||
| } | ||||
|  | ||||
| /* Core styles for use with sme_header.css*/ | ||||
| body.header {  | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
|     background: #cccccc;  | ||||
|     margin-top: 0px;  | ||||
|     margin-right: 0px;  | ||||
|     margin-bottom: 0px;  | ||||
|     margin-left: 0px;  | ||||
| } | ||||
|  | ||||
| .hilightbar { | ||||
|     background-color: #ffc50a; | ||||
|     font-size: 4px; | ||||
| } | ||||
|  | ||||
| .infobar { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
|     background-color: #cccccc; | ||||
| } | ||||
|  | ||||
| .darkergrey { | ||||
|     color: #666666; | ||||
| } | ||||
|  | ||||
| td.darkgrey { | ||||
|     background-color: #888888; | ||||
| } | ||||
|  | ||||
| a.update { | ||||
|     color: red; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
|     background: #cccccc;  | ||||
| } | ||||
|  | ||||
| /* Core styles for use with sme_menu.css */ | ||||
|  | ||||
| body.menu {  | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px; | ||||
|     background-color: #e8f3e1; | ||||
| } | ||||
|  | ||||
| td.section { | ||||
|     padding-bottom: 2px;  | ||||
|     padding-top: 8px;  | ||||
| } | ||||
|  | ||||
| .section { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px; | ||||
|     font-weight: bold; | ||||
|     background-color: #e8f3e1; | ||||
| } | ||||
|  | ||||
| a.item {  | ||||
|     color: #00008b; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
|     background: #e8f3e1;  | ||||
| } | ||||
|  | ||||
| a.sl {  | ||||
|     color: green; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
|     background: #e8f3e1;  | ||||
| } | ||||
|  | ||||
| a.alert {  | ||||
|     color: red; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
|     background: #e8f3e1;  | ||||
| } | ||||
|  | ||||
| /* Core styles for use with sme_main.css */ | ||||
| body.main {  | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px;  | ||||
|     background-color: #ffffff; | ||||
|     color: #000000; | ||||
| } | ||||
|  | ||||
| td.sme-noborders-label { | ||||
|     font-weight: bold; | ||||
|     width: 33%; | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| hr.sectionbar { | ||||
|     color: #666666; | ||||
|     background-color: #666666; | ||||
|     height: 1px; | ||||
|     width: 80%; | ||||
|     border: 0; | ||||
| } | ||||
|  | ||||
| hr.sme-copyrightbar { | ||||
|     color: #dddddd; | ||||
|     background-color: #dddddd; | ||||
|     height: 1px; | ||||
|     width: 100%; | ||||
|     border: 0; | ||||
| } | ||||
|  | ||||
| .sme-copyright { | ||||
|     color: #777777; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 10px;  | ||||
| } | ||||
|  | ||||
| /*These style definitions were found int he old css file (manager.css) | ||||
| but don't seem to ever be referenced in the code.  They're here | ||||
| for reference. | ||||
|  | ||||
| .centerit { | ||||
|     text-align: center; | ||||
| } | ||||
| .highlight { | ||||
|     background: #ffc61e; | ||||
| } | ||||
| .subheading { | ||||
|     background: #ffffff; | ||||
|     color: #1e385b; | ||||
| } | ||||
| */ | ||||
|  | ||||
| EOF | ||||
| } | ||||
| @@ -1,96 +0,0 @@ | ||||
| { | ||||
|     $OUT =<<'HERE'; | ||||
|  | ||||
| /*	from e-smith-manager to smanager (smeserver_manager2)  */ | ||||
|  | ||||
| /*---------------------------------------------------------------------- | ||||
|  * copyright (C) 1999-2003 Mitel Networks Corporation | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA | ||||
|  * | ||||
|  * Technical support for this program is available from Mitel Networks | ||||
|  * Please visit our web site www.mitel.com for details. | ||||
|  *---------------------------------------------------------------------- | ||||
|  */ | ||||
|  | ||||
| /*contribs.org styling  | ||||
| */ | ||||
| body.header { | ||||
| background: #bee6a2; | ||||
|     } | ||||
| .hilightbar { | ||||
| background-color: #ffffff; | ||||
|     } | ||||
| .infobar { | ||||
| background-color: #98d36e; | ||||
|     } | ||||
| a.update { | ||||
| font-size: 11px; | ||||
| background: #98d36e; | ||||
|     } | ||||
|  | ||||
| /* Core styles for use with sme_menu.css */ | ||||
| body.menu { | ||||
| background-color: #e8f3e1; | ||||
|     } | ||||
| td.section { | ||||
| background-color: #e8f3e1; | ||||
|     } | ||||
| a.item { | ||||
| background: #e8f3e1; | ||||
|     } | ||||
| a.sl { | ||||
| background: #e8f3e1; | ||||
|     } | ||||
| a.alert { | ||||
| background: #e8f3e1; | ||||
|     } | ||||
|      | ||||
| /* Core Styles for use with sme_main.css */ | ||||
| hr.sectionbar { | ||||
| color: #8ebe43; | ||||
| background-color: #8ebe43; | ||||
|     } | ||||
| hr.sme-copyrightbar { | ||||
| color: #8ebe43; | ||||
| background-color: #8ebe43; | ||||
|     } | ||||
|        | ||||
| /* flag container*/ | ||||
| #flag-container span { | ||||
| 	font-size: 24px; | ||||
|     display: flex;                     /* Allows for easy centering */ | ||||
|     justify-content: center;           /* Center horizontally */ | ||||
|     align-items: center;               /* Center vertically */ | ||||
|     width: 100%;                       /* Full width of parent */ | ||||
|     height: 24px;                      /* Set a fixed height */ | ||||
|     border: 1px solid #ccc;            /* Light gray border */ | ||||
|     border-radius: 5px;                /* Rounded corners */ | ||||
|     cursor: default;                   /* Prevent text cursor */ | ||||
|  | ||||
| } | ||||
|  | ||||
| .fallback-box { | ||||
|   display: inline-block; /* Make it inline-block to fit around the content */ | ||||
|   border: 2px solid gray; /* Change the border color as desired */ | ||||
|   padding: 10px; /* Add some padding */ | ||||
|   border-radius: 10px; /* Round the corners of the box */ | ||||
|   font-size: 60px; /* Adjust size if needed */ | ||||
|   margin-top: 10px; /* Add some margin */ | ||||
|   text-align: center; /* Center text inside the box */ | ||||
| } | ||||
|  | ||||
| HERE | ||||
| } | ||||
| @@ -1 +0,0 @@ | ||||
| /* DO NOT MODIFY THIS FILE! It is updated automatically */ | ||||
| @@ -1,440 +0,0 @@ | ||||
| { | ||||
|     $OUT = <<'EOF'; | ||||
|  | ||||
| /*	from e-smith-manager to smanager (smeserver_manager2)  */ | ||||
|  | ||||
| /*---------------------------------------------------------------------- | ||||
|  * copyright (C) 1999-2003 Mitel Networks Corporation | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA | ||||
|  * | ||||
|  * Technical support for this program is available from Mitel Networks | ||||
|  * Please visit our web site www.mitel.com for details. | ||||
|  *---------------------------------------------------------------------- | ||||
|  */ | ||||
|  | ||||
| /*	This is the stylesheet used in the main panels only.   | ||||
|  | ||||
|    This file inherits the styles use in sme_core in the "header" section, and | ||||
|    as noted in the code below. Note that some of the styles here are empty.   | ||||
| 	This is because the style definition has moved safely to sme_core.css | ||||
| 	and the placeholder is left here for reference or future use. | ||||
|  | ||||
|    There are a lot of styles in here, so read carefully.  Each one is documented. | ||||
|  | ||||
| 	Styles that were in the old stylesheets, but are not used in the UI are at the | ||||
| 	bottom, commented out.  These can be removed at the end of the 6.0 cycle */ | ||||
|  | ||||
| /* general page properties */ | ||||
| body, body.main {  | ||||
|     margin-top: 5px;  | ||||
|     margin-right: 20px;  | ||||
|     margin-bottom: 5px;  | ||||
|     margin-left: 5px;  | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Table properties ****************************************/ | ||||
| /* There are THREE  types of tables | ||||
|    1. *.sme-layout*     is used for layout purposes.  It is the "master | ||||
| 	                      container" on a page.  It controls the top-level table | ||||
|                          inside of which everything else is put. | ||||
| 	2. *.sme-noborders*  is used for layout, and defines a borderless table and  | ||||
| 	                      cells used within it. | ||||
| 	2. *.sme-border*     is used for tabular data, and defines a header row and borders | ||||
| 	                      for tables that need borders | ||||
|  | ||||
| 	*/ | ||||
|  | ||||
| /*First, some defaults */ | ||||
| td { | ||||
|     text-align: left; | ||||
| } | ||||
|  | ||||
|  | ||||
| /*  | ||||
| sme-layout* : Used for top-level layout | ||||
| */ | ||||
|  | ||||
| table.sme-layout { | ||||
|     border-collapse: collapse; | ||||
| 	 margin-bottom: 2px; | ||||
| 	 margin-top: 2px; | ||||
| } | ||||
|  | ||||
| tr.sme-layout { | ||||
|     border: 1px solid #dddddd;  | ||||
| } | ||||
|  | ||||
| td.sme-layout { | ||||
|     border: 1px solid #dddddd;  | ||||
| } | ||||
|  | ||||
| /*This special style is actually used only for the button row along the bottom of each page*/ | ||||
| th.sme-layout { | ||||
|     border: 1px solid #dddddd;  | ||||
|     background-color: #e8f3e1; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 9pt; | ||||
|     font-weight: bold; | ||||
|     color: #000000; | ||||
|     text-align: right;  | ||||
|     padding: 4px; | ||||
| } | ||||
|  | ||||
| /*  | ||||
| sme-noborders* : Used for mid-level layout | ||||
| */ | ||||
| table.sme-noborders { | ||||
|     padding: 0px; | ||||
|     margin-top: 0px; | ||||
|     margin-bottom: 20px; | ||||
|     margin-left: 0px; | ||||
|     margin-right: 0px; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px; | ||||
| } | ||||
| td.sme-noborders-label { | ||||
|     font-weight: bold; | ||||
|     /*width: 250px;*/ | ||||
|     text-align: right; | ||||
|     /*vertical-align: top;*/ | ||||
|     background-color: #e8f3e1; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px; | ||||
| } | ||||
| td.sme-noborders-content { | ||||
|     text-align: left; | ||||
|     vertical-align: top;	 | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 11px; | ||||
| } | ||||
| td.sme-noborders-info, div.sme-noborders-info { | ||||
|     text-align: left; | ||||
|     vertical-align: top;	 | ||||
| } | ||||
| /* Used for a left-most column of radio buttons (see date/time panel) */ | ||||
| td.sme-radiobutton { | ||||
|     width: 30px; | ||||
| } | ||||
| /*  | ||||
| sme-border* : Used for tabular data | ||||
| */ | ||||
| table.sme-border { | ||||
|     border-collapse: collapse; | ||||
|     border: 2px solid #cccccc; | ||||
|     empty-cells: show; | ||||
|     margin: 5px 5px 5px 2px;	  | ||||
| } | ||||
| td.sme-border, | ||||
| td.sme-border-warning, | ||||
| td.sme-border-right, | ||||
| td.sme-border-center { | ||||
|     border: 1px solid #cccccc; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 10px; | ||||
|     font-weight: normal; | ||||
|     color: #000000; | ||||
|     text-align: left; | ||||
|     padding-left: 2px; | ||||
|     padding-right: 2px; | ||||
|     padding-top: 3px; | ||||
|     padding-bottom: 3px; | ||||
| } | ||||
| td.sme-border-warning { | ||||
|     color: red; | ||||
| 	 } | ||||
| td.sme-border-right {text-align: right;} | ||||
| td.sme-border-center {text-align: center;} | ||||
| th.sme-border { | ||||
|     border: 1px solid #cccccc;  | ||||
|     background-color: #bee6a2; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 10px; | ||||
|     font-weight: bold; | ||||
|     color: #000000; | ||||
|     text-align: center; | ||||
| 	 vertical-align: bottom; | ||||
|     padding-left: 2px; | ||||
|     padding-right: 2px; | ||||
|     padding-left: 3px; | ||||
|     padding-right: 3px; | ||||
|     padding-top: 3px; | ||||
|     padding-bottom: 3px; | ||||
| 	 /*border-width: 1px; | ||||
| 	 border-style: solid; | ||||
|     border-color: #F2F0EE #75736E #75736E #F2F0EE ;*/  | ||||
| } | ||||
| td.sme-border a, td.sme-border-right a, td.sme-border-center a { | ||||
|     font-size: 10px; | ||||
| } | ||||
|  | ||||
| /* misc layout stuff*/ | ||||
| /* these two are for any error messages that pop up*/ | ||||
| div.error, div.sme-error, span.error, span.sme-error { | ||||
|     color: red; | ||||
|     background-color: #ffffff; | ||||
|     border-width: 1px; | ||||
|     border-style: solid; | ||||
|     border-color: red ;  | ||||
|     padding: 2px; | ||||
|     margin-left: 20px; | ||||
|     margin-right: 20px; | ||||
|     margin-top:0px; | ||||
|     margin-bottom:0px; | ||||
| 	  | ||||
| } | ||||
|  | ||||
| div.error-noborders, div.sme-error-noborders, | ||||
| span.error-noborders, span.sme-error-noborders | ||||
| { | ||||
|     color: red; | ||||
|     background-color: #ffffff; | ||||
|     border-width: 0px; | ||||
| } | ||||
|  | ||||
| div.error h2, span.error h2, | ||||
| div.error p, span.error p | ||||
| { | ||||
|     color: red; | ||||
| } | ||||
| /* These are for the special case of a link being inside an error message */ | ||||
| div.sme-error a, div.error a, span.error a, span.sme-error a, | ||||
| div.error-noborders a, div.sme-error-noborders a, | ||||
| span.error-noborders a, span.sme-error-noborders a | ||||
| { | ||||
|     color: #ff0000; | ||||
|     font-weight: bold; | ||||
|     text-decoration: underline; | ||||
| } | ||||
|  | ||||
| /* For when a link is the error message */ | ||||
| a.error:link, a.error:visited, a.error:hover, a.error:active { | ||||
|     color: #ff0000; | ||||
|     font-weight: normal; | ||||
|     text-decoration: underline; | ||||
| } | ||||
|  | ||||
| /* these two are for any success messages that pop up*/ | ||||
| div.success, span.success { | ||||
|     color: #006400; | ||||
|     background-color: #ffffff; | ||||
|     border-width: 1px; | ||||
|     border-style: solid; | ||||
|     border-color: #006400 ;  | ||||
|     padding: 2px; | ||||
|     margin-left: 20px; | ||||
|     margin-right: 20px; | ||||
|     margin-top:0px; | ||||
|     margin-bottom:0px; | ||||
| 	  | ||||
| } | ||||
|  | ||||
| /* These two are for the special case of a link being inside a success message */ | ||||
| div.success a, span.success a  | ||||
| { | ||||
|     color: #006400; | ||||
|     font-weight: bold; | ||||
|     text-decoration: underline; | ||||
| } | ||||
|  | ||||
| div.success h2, span.success h2, | ||||
| div.success p, span.success p | ||||
| { | ||||
|     color: green; | ||||
| } | ||||
|  | ||||
| /*These two define the copyright footer styles, one for the line and one for the text*/ | ||||
| hr.sme-copyrightbar { | ||||
| } | ||||
| .sme-copyright { | ||||
| } | ||||
|  | ||||
| /* These ones define styles for the links that are made to look like | ||||
|    standard form submit buttons */ | ||||
| a.button-like:link,  | ||||
| a.button-like:visited, | ||||
| a.button-like:hover, | ||||
| a.button-like:active, | ||||
| a.button-like-small:link,  | ||||
| a.button-like-small:visited, | ||||
| a.button-like-small:hover, | ||||
| a.button-like-small:active {  | ||||
|     font-family: sans-serif; | ||||
|     font-size: 13px;  | ||||
|     color: black;  | ||||
|     background: #D4D0C8;  | ||||
|     text-decoration: none; | ||||
|     text-align: left;  | ||||
|     border-color: #F2F0EE #75736E #75736E #F2F0EE ;  | ||||
|     margin-top: 10px;  | ||||
|     margin-right: 2px;  | ||||
|     margin-bottom: 10px;  | ||||
|     margin-left: 2px;  | ||||
|     border-style: solid;  | ||||
|     border-top-width: 2px;  | ||||
|     border-right-width: 2px;  | ||||
|     border-bottom-width: 2px;  | ||||
|     border-left-width: 2px; | ||||
|     padding-top: 2px;  | ||||
|     padding-bottom: 2px;  | ||||
|     padding-left: 6px;  | ||||
|     padding-right: 6px;  | ||||
|  } | ||||
| a.button-like-small:link,  | ||||
| a.button-like-small:visited, | ||||
| a.button-like-small:hover, | ||||
| a.button-like-small:active {  | ||||
|     border-top-width: 1px;  | ||||
|     border-right-width: 1px;  | ||||
|     border-bottom-width: 1px;  | ||||
|     border-left-width: 1px; | ||||
|     font-size: 10px;  | ||||
|     padding-top: 0px;  | ||||
|     padding-bottom: 0px;  | ||||
|     padding-left: 1px;  | ||||
|     padding-right: 1px;  | ||||
| } | ||||
| a.button-like:active, | ||||
| a.button-like-small:active {  | ||||
|     border-color: #75736E #F2F0EE #F2F0EE #75736E  ;  | ||||
| } | ||||
|  | ||||
| /* EXPERIMENTAL SECTION */ | ||||
| /* These are styles used to experiment with. */ | ||||
|  | ||||
| /* class for links, similar to the class in sme_menu.css, but for a red button */ | ||||
| a.button-like-red:link,  | ||||
| a.button-like-red:visited, | ||||
| a.button-like-red:hover, | ||||
| a.button-like-red:active {  | ||||
|     border-left: #F1726C 2px solid; | ||||
|     border-right: #B42025 2px solid; | ||||
|     border-top: #F1726C 2px solid; | ||||
|     border-bottom: #B42025 2px solid; | ||||
|  } | ||||
| a.button-like-red:active {  | ||||
|     border-color: #75736E #F2F0EE #F2F0EE #75736E  ;  | ||||
| } | ||||
|  | ||||
| /*These are style definitions found in the UI but not defined in any file I  | ||||
|   could locate.  They're listed here for historical purposes, but have been | ||||
|   removed from the UI | ||||
|  | ||||
| pagedescription (used in the first paragraph of text on a page) [HTML.pm] | ||||
| label (used in forms) [HTML.pm] | ||||
| field (used in forms) [HTML.pm] | ||||
| fielddescription (used ???)[HTML.pm] | ||||
| buttons (used in forms) [HTML.pm] | ||||
| */   | ||||
| /*td.sme-submitbutton { | ||||
| 	text-align: right; | ||||
| } | ||||
| */ | ||||
|  | ||||
| /*These style definitions were found int he old css file (manager.css) | ||||
|   but don't seem to ever be referenced in the code.  They're here | ||||
|   for reference. | ||||
|  | ||||
| .banner { | ||||
|     background: #000000; | ||||
|     color: #ffffff; | ||||
| } | ||||
| .banner-right { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     background: #e17200; | ||||
|     color: #ffffff; | ||||
| } | ||||
| .border { | ||||
|     background: #000000; | ||||
|     color: #000000; | ||||
|     border-color: #000000; | ||||
| } | ||||
| .sidebar { | ||||
|     width: 200px; | ||||
|     background: #ffffff; | ||||
|     font-size: smaller; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-weight: normal; | ||||
| } | ||||
| .sidebar-title { | ||||
|     background: #1e385b; | ||||
|     color: #ffffff; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-weight: bold; | ||||
| } | ||||
| .newsitem { | ||||
|     background: #ffffff; | ||||
|     color: #000000; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     margin-left: 5px; | ||||
|     margin-right: 5px; | ||||
|     margin-top: 5px; | ||||
|     margin-bottom: 5px; | ||||
| } | ||||
| .newsitem-title { | ||||
|     background: #cccccc; | ||||
|     color: #ffffff; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-weight: bold; | ||||
| } | ||||
| .newsitem-footer { | ||||
|     background: #cccccc; | ||||
|     color: #000000; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: smaller; | ||||
|     text-align: right; | ||||
| } | ||||
| .newsitem-detail { | ||||
|     font-size: smaller; | ||||
|     font-weight: normal; | ||||
| }  | ||||
| .formlabel { | ||||
|     background: #c0c0c0; | ||||
|     color: #000000; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: small; | ||||
|     font-weight: bold; | ||||
|     text-align: right; | ||||
| } | ||||
| .welcome-link { | ||||
|     background: #ffffff; | ||||
|     color: #1e385b; | ||||
| } | ||||
| .littlelink { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
| } | ||||
| #textlayer { | ||||
|     position: absolute; | ||||
|     visibility: inherit; | ||||
|     top: 160px; | ||||
|     left: 50px; | ||||
|     z-index: 2; | ||||
| } | ||||
| #para { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-weight: bold; | ||||
|     color: #000000; | ||||
| }   | ||||
| #title { | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-weight: bold; | ||||
|     padding: 7px 7px 7px 7px; | ||||
|     color: #ffffff; | ||||
| }  | ||||
| */ | ||||
|  | ||||
| EOF | ||||
| } | ||||
| @@ -1,50 +0,0 @@ | ||||
| { | ||||
|     $OUT =<<'HERE'; | ||||
|  | ||||
| /*	from e-smith-manager to smanager (smeserver_manager2)  */ | ||||
|  | ||||
| /*---------------------------------------------------------------------- | ||||
|  * copyright (C) 1999-2003 Mitel Networks Corporation | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA | ||||
|  * | ||||
|  * Technical support for this program is available from Mitel Networks | ||||
|  * Please visit our web site www.mitel.com for details. | ||||
|  *---------------------------------------------------------------------- | ||||
|  */ | ||||
| /*contribs.org styling */ | ||||
|  | ||||
| /* This special style is actually used only for the button row along the bottom of each page */ | ||||
| th.sme-layout { | ||||
| border: 1px solid #8ebe43; | ||||
| background-color: #bee6a2; | ||||
|     } | ||||
| table.sme-border { | ||||
| border: 2px solid #dddddd; | ||||
|     } | ||||
| td.sme-border-warning, | ||||
| td.sme-border-right, | ||||
| td.sme-border-center { | ||||
| border: 1px solid #dddddd; | ||||
|     } | ||||
| td.sme-border-right {text-align: right;} | ||||
| td.sme-border-center {text-align: center;} | ||||
| th.sme-border { | ||||
| border: 1px solid #dddddd; | ||||
| background-color: #e8f3e1; | ||||
|     } | ||||
| HERE | ||||
| } | ||||
|      | ||||
| @@ -1 +0,0 @@ | ||||
| /* DO NOT MODIFY THIS FILE! It is updated automatically */ | ||||
| @@ -1,229 +0,0 @@ | ||||
| { | ||||
|     $OUT = <<'EOF'; | ||||
|  | ||||
| /*	from e-smith-manager to smanager (smeserver_manager2)  */ | ||||
|  | ||||
| /*---------------------------------------------------------------------- | ||||
|  * copyright (C) 1999-2003 Mitel Networks Corporation | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA | ||||
|  * | ||||
|  * Technical support for this program is available from Mitel Networks | ||||
|  * Please visit our web site www.mitel.com for details. | ||||
|  *---------------------------------------------------------------------- | ||||
|  */ | ||||
|  | ||||
| /* This is the stylesheet used in the navigation panel only | ||||
|  | ||||
|    This file inherits the styles use in sme_core in the "navigation" section, | ||||
|    and as noted in the code below. Note that some of the styles here are empty. | ||||
|    This is because the style definition has moved safely to sme_core.css and | ||||
|    the placeholder is left here for reference or future use. | ||||
|  | ||||
|    There are a lot of styles in here, so read carefully.  Each one is | ||||
|    documented. | ||||
|  | ||||
|    Styles that were in the old stylesheets, but are not used in the UI are at | ||||
|    the bottom, commented out.  These can be removed at the end of the 6.0 | ||||
|    cycle */ | ||||
|  | ||||
| /* Sets the general page properties */ | ||||
| body, body.menu {  | ||||
|     margin-top: 0px;  | ||||
|     margin-right: 0px;  | ||||
|     margin-bottom: 0px;  | ||||
|     margin-left: 2px;  | ||||
| } | ||||
|  | ||||
| /* This is the section heading style */ | ||||
| .section { | ||||
| } | ||||
|  | ||||
| td.menu-cell { | ||||
|     margin-top: 0px;  | ||||
|     margin-right: 0px;  | ||||
|     margin-bottom: 0px;  | ||||
|     margin-left: 0px;  | ||||
|     padding-left: 0px; | ||||
|     padding-right: 0px; | ||||
|     padding-top: 0px; | ||||
|     padding-bottom: 0px; | ||||
|  | ||||
| } | ||||
|  | ||||
| /* | ||||
| All the a links use pseudoclasses to control the two visual link styles. | ||||
| For example: | ||||
|   a.item:link             the general link item | ||||
|   a.item-current:link:    the active link item | ||||
|  | ||||
| The switch from item to item-current is done with a javascript script in the head of the | ||||
| navigation page, using the onClick event. | ||||
|  | ||||
| We are making heavy use of the cascade with these. | ||||
| */     | ||||
|  | ||||
| /* a:link controls the look of a link when the mouse is nowhere near it */ | ||||
| a.item:link, a.item-current:link,  | ||||
| a.warn:link, a.warn-current:link {  | ||||
|     display: block; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 10px;  | ||||
|     color: black;  | ||||
|     background: #e8f3e1;  | ||||
|     text-decoration: none; | ||||
|     text-align: left;  | ||||
|     border-color: #e8f3e1;  | ||||
|     margin-top: 0px;  | ||||
|     margin-right: 0px;  | ||||
|     margin-bottom: 0px;  | ||||
|     margin-left: 0px;  | ||||
|     border-style: solid;  | ||||
|     border-top-width: 1px;  | ||||
|     border-right-width: 1px;  | ||||
|     border-bottom-width: 1px;  | ||||
|     border-left-width: 1px; | ||||
|     padding-right: 10px;  | ||||
|     padding-left: 10px;  | ||||
|     padding-top: 0px;  | ||||
|     padding-bottom: 2px;  | ||||
|  } | ||||
|  | ||||
| /* a:visited controls the look of a visited link (one that has been clicked) */ | ||||
| a.item:visited, a.item-current:visited,  | ||||
| a.warn:visited, a.warn-current:visited {  | ||||
|     display: block; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 10px;  | ||||
|     color: black;  | ||||
|     background: #e8f3e1;  | ||||
|     text-decoration: none;  | ||||
|     border-color: #e8f3e1;  | ||||
|     margin-top: 0px;  | ||||
|     margin-right: 0px;  | ||||
|     margin-bottom: 0px;  | ||||
|     margin-left: 0px;  | ||||
|     border-style: solid;  | ||||
|     border-top-width: 1px;  | ||||
|     border-right-width: 1px;  | ||||
|     border-bottom-width: 1px;  | ||||
|     border-left-width: 1px; | ||||
|     padding-right: 10px;  | ||||
|     padding-left: 10px;  | ||||
|     padding-bottom: 2px;  | ||||
|     text-align: left;  | ||||
| } | ||||
|  | ||||
| /* a:hover controls the look of a link under the curser*/ | ||||
| a.item:hover, a.item-current:hover, | ||||
| a.warn:hover, a.warn-current:hover {  | ||||
|     display: block; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 10px;  | ||||
|     color: black;  | ||||
|     text-decoration: none;  | ||||
|     background: #cccccc;  | ||||
|     border-color: #888888;  | ||||
|     margin-top: 0px;  | ||||
|     margin-right: 0px; | ||||
|     margin-bottom: 0px;  | ||||
|     margin-left: 0px;  | ||||
|     border-style: solid;  | ||||
|     border-top-width: 1px;  | ||||
|     border-right-width: 1px;  | ||||
|     border-bottom-width: 1px;  | ||||
|     border-left-width: 1px;  | ||||
|     padding-right: 10px;  | ||||
|     padding-left: 10px;  | ||||
|     padding-bottom: 2px;  | ||||
|     text-align: left;  | ||||
| } | ||||
|  | ||||
| /* a:active controls the look of a link as it is selected*/ | ||||
| a.item:active, a.item-current:active,  | ||||
| a.warn:active, a.warn-current:active {  | ||||
|     display: block; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 10px;  | ||||
|     color: white;  | ||||
|     background: black;  | ||||
|     text-decoration: none ;  | ||||
|     border-color: #000000;  | ||||
|     margin-top: 0px;  | ||||
|     margin-right: 0px;  | ||||
|     margin-bottom: 0px;  | ||||
|     margin-left: 0px;  | ||||
|     border-style: solid;  | ||||
|     border-top-width: 1px;  | ||||
|     border-right-width: 1px;  | ||||
|     border-bottom-width: 1px;  | ||||
|     border-left-width: 1px; | ||||
|     padding-right: 10px;  | ||||
|     padding-left: 10px;  | ||||
|     padding-bottom: 2px;  | ||||
|     text-align: left;  | ||||
| } | ||||
|  | ||||
| /*  | ||||
| These styles are to ensure that a selected link appears selected, even if the link | ||||
| opens in another frame.  This uses a javascript chunk in the head of the navigation  | ||||
| frame to change the style using the onClick event. | ||||
| */ | ||||
| a.item-current:link,    a.warn-current:link, | ||||
| a.item-current:visited, a.warn-current:visited,  | ||||
| a.item-current:active,  a.warn-current:active, | ||||
| a.item-current:hover,   a.warn-current:hover {  | ||||
|     display: block; | ||||
|     font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|     font-size: 10px;  | ||||
|     color: black;  | ||||
|     text-decoration: none;  | ||||
|     background: #ffffff;  | ||||
|     border-color: #888888;  | ||||
|     margin-top: 0px;  | ||||
|     margin-right: 0px; | ||||
|     margin-bottom: 0px;  | ||||
|     margin-left: 0px;  | ||||
|     border-style: solid;  | ||||
|     border-top-width: 1px;  | ||||
|     border-right-width: 1px;  | ||||
|     border-bottom-width: 1px;  | ||||
|     border-left-width: 1px;  | ||||
|     padding-right: 10px;  | ||||
|     padding-left: 10px;  | ||||
|     padding-bottom: 2px;  | ||||
|     text-align: left;  | ||||
| } | ||||
|  | ||||
| /* these two add a border on the styles defined directly above when | ||||
| the mouse is hovering over them */ | ||||
| a.item-current:hover,   a.warn-current:hover {  | ||||
|     border-color: #888888;  | ||||
| } | ||||
|  | ||||
| /* These redefine a few elements to make room for the icon to the left of the warn class*/ | ||||
| a.warn:link,    a.warn-current:link,  | ||||
| a.warn:visited, a.warn-current:visited,  | ||||
| a.warn:active,  a.warn-current:active, | ||||
| a.warn:hover,   a.warn-current:hover {  | ||||
|     background-image: url(/server-common/warn.gif); | ||||
|     background-repeat: no-repeat; | ||||
|     background-position: 10px;  | ||||
|     padding-left: 25px;  | ||||
| } | ||||
| /*end*/ | ||||
|  | ||||
| EOF | ||||
| } | ||||
| @@ -1 +0,0 @@ | ||||
| /* DO NOT MODIFY THIS FILE! It is updated automatically */ | ||||
| @@ -1,293 +0,0 @@ | ||||
| { | ||||
|     $OUT = <<'EOF'; | ||||
|  | ||||
| /*	smeserver_manager2  */ | ||||
|  | ||||
| /*---------------------------------------------------------------------- | ||||
|  * copyright (C) 1999-2003 Mitel Networks Corporation | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA | ||||
|  * | ||||
|  * Technical support for this program is available from Mitel Networks | ||||
|  * Please visit our web site www.mitel.com for details. | ||||
|  *---------------------------------------------------------------------- | ||||
|  */ | ||||
|  | ||||
| /* This is the basic stylesheet originally used in the mojo version. | ||||
|    */ | ||||
|  | ||||
| body{ | ||||
|     background-color: #FFF; | ||||
| } | ||||
|  | ||||
| #container{ | ||||
|     max-width: 100%; | ||||
|     position: relative; | ||||
|     margin: auto; | ||||
| } | ||||
|  | ||||
| #navigation{ | ||||
|     width: 190px; | ||||
|     position: absolute; | ||||
|     margin-left: 0px; | ||||
|     padding: 5px; | ||||
|     background-color: #E8F3E1; | ||||
| /*    height: 600px; */ | ||||
|     overflow: auto; | ||||
| } | ||||
|  | ||||
| #main{ | ||||
|     margin-left: 195px; | ||||
|     padding: 10px; | ||||
| } | ||||
|  | ||||
| #central{ | ||||
|     margin-left: 0px; | ||||
|     padding: 5px; | ||||
| } | ||||
|  | ||||
| #footer{ | ||||
|     margin-left: 0px; | ||||
|     padding: 5px; | ||||
| } | ||||
|  | ||||
| #header { | ||||
|     background: #bee6a2; | ||||
| } | ||||
|  | ||||
| #header h1, a:link, a:visited { | ||||
|     color: black; | ||||
|     text-decoration: none; | ||||
| /* contribs.org styling */ | ||||
| } | ||||
|  | ||||
| a:link { color: #006921; text-decoration: none; } | ||||
| a:visited { color: #063; text-decoration: none; } | ||||
| a:hover { color: #F00; text-decoration: none; } | ||||
| a:active { color: #606060; text-decoration: none; } | ||||
|  | ||||
| .sme-error { | ||||
|     color: red; | ||||
|     display:block; | ||||
|     background-color: #ffffff; | ||||
|     border-width: 1px; | ||||
|     border-style: solid; | ||||
|     border-color: red ;  | ||||
|     padding: 2px; | ||||
|     margin-left: 10px; | ||||
|     margin-right: 10px; | ||||
|     margin-top:0px; | ||||
|     margin-bottom:0px; | ||||
| } | ||||
|  | ||||
| .sme-warning { | ||||
|     color: orange; | ||||
|     display:block;   | ||||
|     background-color: #ffffff; | ||||
|     border-width: 1px; | ||||
|     border-style: solid; | ||||
|     border-color: orange ;  | ||||
|     padding: 4px; | ||||
|     margin-left: 20px; | ||||
|     margin-right: 20px; | ||||
|     margin-top:2px; | ||||
|     margin-bottom:2px; | ||||
| } | ||||
|  | ||||
| #footer img { | ||||
|     float: right; | ||||
|     position: fixed; | ||||
|     margin-left: 40%; | ||||
| } | ||||
|  | ||||
| label.field-with-error { | ||||
| 	color: #dd7e5e | ||||
| } | ||||
|  | ||||
| input.field-with-error {  | ||||
| 	background-color: #fd9e7e  | ||||
| } | ||||
|  | ||||
| span.label { | ||||
|     display: inline-block; | ||||
|     font-weight: bold; | ||||
|     background-color: #e8f3e1; /*lightgreen;*/ | ||||
|     width: 30%; | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| td.label { | ||||
|     font-weight: bold; | ||||
|     background-color: #e8f3e1; /*lightgreen;*/ | ||||
|     width: 30%; | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| span.label2 { | ||||
|     display: inline-block; | ||||
|     font-weight: bold; | ||||
|     background-color: #e8f3e1; /*lightgreen;*/ | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| span.data { | ||||
|     padding: 2px; | ||||
|     font-weight: bold; | ||||
|     margin-left: 0%; | ||||
| /*    background-color: lightblue;*/ | ||||
| } | ||||
|  | ||||
| span.data2 { | ||||
|     padding: 2px; | ||||
| /*    background-color: lightblue; */ | ||||
| } | ||||
|  | ||||
| input.action { | ||||
|     margin-left: 0px; | ||||
|     background-color: #bee6a2; /*lightgreen;*/ | ||||
|     color: darkgreen; | ||||
|     border-radius: 8px; | ||||
|     border: 2px solid #4CAF50; /* Green */ | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
| } | ||||
|  | ||||
| input.action:hover {background-color: #3e8e41; color:white;} | ||||
|  | ||||
| input.action:active { | ||||
|   background-color: #3e8e41; | ||||
|   transform: translate(-2px,2px); | ||||
| } | ||||
|  | ||||
| .center { | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
| } | ||||
|  | ||||
| input.action2 { | ||||
|     margin-left: 0px; | ||||
|     color: black; | ||||
|     background-color: #d4d0c8; | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
| } | ||||
|  | ||||
|  | ||||
| #modul.desc { | ||||
|     padding: 3px; | ||||
|     background-color: grey; | ||||
| } | ||||
|  | ||||
| [type = 'text'] { | ||||
|     margin-left: 0px; | ||||
|     /*background-color: lightblue;*/ | ||||
| } | ||||
|  | ||||
| .a, .return { | ||||
|     color: #661866; | ||||
|     font-weight: bold; | ||||
| } | ||||
|  | ||||
| a.section { | ||||
| } | ||||
| .a, .item { | ||||
|     line-height: 12px; | ||||
| } | ||||
|  | ||||
| a.section-title { | ||||
|     display: inline-block; | ||||
|     color: #6CA345;	/*#888;*/ | ||||
|     padding-left: 5px; | ||||
|     padding-right: 5px; | ||||
|     line-height: 18px; | ||||
|     font-weight: bold; | ||||
| } | ||||
|  | ||||
| a.menu-title { | ||||
|     display: inline-block; | ||||
|     color: #1A6D1A;	/*#666;*/ | ||||
|     padding-left: 1px; | ||||
|     padding-right: 1px; | ||||
|     font-weight: bold; | ||||
| } | ||||
|  | ||||
|  | ||||
| #module { | ||||
| /*    height: 600px; */ | ||||
|     overflow: auto; | ||||
| } | ||||
|  | ||||
|  | ||||
| #h2l1 { | ||||
|     height: 40px; | ||||
|     width: 100%; | ||||
| } | ||||
| #h2e11 { | ||||
|     width: 50%; | ||||
|     float: left; | ||||
| } | ||||
| #h2e12 { | ||||
|     background-color: #C0E7A6; | ||||
|     float: left; | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| #h2l2 { | ||||
| /*    background-color: #A8F9E7;*/ | ||||
|     border-top: solid white 3px; | ||||
|     border-bottom: solid white 2px; | ||||
|     height: 14px; | ||||
|     width: 100%; | ||||
|     padding: 1px; | ||||
| } | ||||
|  | ||||
| #h2e21 { | ||||
|     float: left; | ||||
|     width: 70%; | ||||
| } | ||||
|  | ||||
| #h2e22,#h2e23,#h2e12 { | ||||
|     float: left; | ||||
|     width: 14em; | ||||
|     text-align: center; | ||||
| } | ||||
|  | ||||
| .toggle-password { | ||||
|     margin-left: -30px; | ||||
| } | ||||
|  | ||||
| .tg-icon { | ||||
|     position: relative; | ||||
|     top: 5px; | ||||
|     left: 2px; | ||||
| } | ||||
|  | ||||
| .roundcube div { | ||||
| 	height:462px; | ||||
| 	width:85%; | ||||
| 	margin-bottom:1%; | ||||
| } | ||||
|  | ||||
| .roundcube object { | ||||
| 	margin-top:1%; | ||||
| 	height:95%; | ||||
| 	width:100%; | ||||
| } | ||||
|  | ||||
|  | ||||
| /*end*/ | ||||
| EOF | ||||
| } | ||||
| @@ -1 +0,0 @@ | ||||
| /* DO NOT MODIFY THIS FILE! It is updated automatically */ | ||||
| @@ -30,8 +30,11 @@ use SrvMngr::Plugin::WithoutCache; | ||||
|  | ||||
| use esmith::I18N; | ||||
|  | ||||
| # Import the function(s) you need | ||||
| use SrvMngr_Auth qw(check_admin_access); | ||||
|  | ||||
| #this is overwrittrn with the "release" by the spec file - release can be "99.el8.sme" | ||||
| our $VERSION = '51.el8.sme';  | ||||
| our $VERSION = '78.el8.sme';  | ||||
| #Extract the release value | ||||
| if ($VERSION =~ /^(\d+)/) { | ||||
|     $VERSION = $1;  # $1 contains the matched numeric digits | ||||
| @@ -46,7 +49,7 @@ our @EXPORT_OK = qw( | ||||
| 	getNavigation ip_number validate_password is_normal_password email_simple | ||||
| 	mac_address_or_blank mac_address ip_number_or_blank | ||||
| 	lang_space get_routes_list subnet_mask get_reg_mask | ||||
| 	gen_locale_date_string get_public_ip_address | ||||
| 	gen_locale_date_string get_public_ip_address simpleNavMerge | ||||
| 	); | ||||
|  | ||||
| has home => sub { | ||||
| @@ -301,10 +304,11 @@ sub setup_routing { | ||||
|     $if_logged_in->get('/userpassword')->to('userpassword#main')->name('passwd'); | ||||
|     $if_logged_in->post('/userpassword')->to('userpassword#change_password')->name('passwd2'); | ||||
|  | ||||
|     my $if_admin = $r->under( sub { | ||||
| 	my $c =shift; | ||||
| 	return $c->is_admin || $c->auth_fail($c->l("acs_ADMIN")); | ||||
|     }); | ||||
| 	my $if_admin = $r->under( sub { | ||||
| 	    my $c = shift; | ||||
| 	    # Call the imported function directly | ||||
| 	    return check_admin_access($c) || $c->auth_fail($c->l("acs_ADMIN")); | ||||
| 	}); | ||||
|  | ||||
|     $if_admin->get('/backup')->to('backup#main')->name('backup'); | ||||
|     $if_admin->post('/backup')->to('backup#do_display')->name('backupd'); | ||||
| @@ -549,9 +553,10 @@ sub getNavigation { | ||||
|  | ||||
|     use esmith::NavigationDB; | ||||
|  | ||||
|     my $c  = shift; | ||||
|     my $class  = shift; #not the controller as it is called as an external, not part of the controller. | ||||
|     my $lang = shift || 'en-us'; | ||||
|     my $menu = shift || 'N'; | ||||
|     my $username = shift || ''; #Username when logged in as a user not admin | ||||
|  | ||||
| #    my $lang = $c->session->{lang} || 'en-us'; | ||||
|  | ||||
| @@ -560,13 +565,33 @@ sub getNavigation { | ||||
|  | ||||
|     my @files = (); | ||||
|     my %files_hash = (); | ||||
|      | ||||
|     # Added: Store allowed admin panels for non-admin users | ||||
|     my @allowed_admin_panels = (); | ||||
|     my $is_admin = 1;  # Default to admin (full access) | ||||
|      | ||||
|     # Added: Check if user is non-admin and get their allowed panels | ||||
|     if ($username ne '') { | ||||
|         # Get the AccountsDB to check user permissions | ||||
|         my $accountsdb = esmith::AccountsDB->open_ro() or | ||||
|             die "Couldn't open AccountsDB\n"; | ||||
|              | ||||
|         # Check if user has AdminPanels property | ||||
|         my $user_rec = $accountsdb->get($username); | ||||
|         if (defined $user_rec && $user_rec->prop('AdminPanels')) { | ||||
|             $is_admin = 0;  # User is non-admin with specific panel access | ||||
|             # Get comma-separated list of allowed admin panels | ||||
|             my $admin_panels = $user_rec->prop('AdminPanels'); | ||||
|             @allowed_admin_panels = split(/,/, $admin_panels); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     #----------------------------------------------------- | ||||
|     # Determine the directory where the functions are kept | ||||
|     #-----------------------------------------------------  | ||||
| 	my $navigation_ctlr_ignore =  | ||||
| 	"(\.\.?|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm|Legacypanel\.pm(-.*)?)"; | ||||
| #	"(\.\.?|Initial\.pm|Manual\.pm|Swttheme\.pm|Request\.pm|Modules\.pm(-.*)?)"; | ||||
| 	"(\.\.?|.*\-Custom\.pm|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm|Legacypanel\.pm(-.*)?)"; | ||||
| #	"(\.\.?|Initial\.pm|.*Manual\.pm|Swttheme\.pm|Request\.pm|Modules\.pm(-.*)?)"; | ||||
| 	my $navigation_cgi_ignore =  | ||||
| 	"(\.\.?|navigation|noframes|online-manual|(internal|pleasewait)(-.*)?)"; | ||||
|  | ||||
| @@ -638,70 +663,110 @@ sub getNavigation { | ||||
|     } | ||||
|  | ||||
|     foreach my $file (keys %files_hash) | ||||
|     { | ||||
| 	#my $heading = 'Unknown'; | ||||
| 	my $heading = 'Legacy'; | ||||
| 	 | ||||
| 	my $description = $file; | ||||
| 	my $headingWeight = 99999; | ||||
| 	my $descriptionWeight = 99999; | ||||
| 	my $urlpath = ''; | ||||
| 	my $menucat = 'A';	# admin menu (default) | ||||
| 		{ | ||||
| 		#my $heading = 'Unknown'; | ||||
| 		my $heading = 'Legacy'; | ||||
| 		 | ||||
| 		my $description = $file; | ||||
| 		my $headingWeight = 99999; | ||||
| 		my $descriptionWeight = 99999; | ||||
| 		my $urlpath = ''; | ||||
| 		my $menucat = 'A';	# admin menu (default) | ||||
|  | ||||
| 	my $rec = $navdb->get($file); | ||||
| 		my $rec = $navdb->get($file); | ||||
|  | ||||
| 	if (defined $rec) | ||||
| 	{ | ||||
| 	    $heading = $rec->prop('Heading'); | ||||
| 	    $description = $rec->prop('Description'); | ||||
| 	    $headingWeight = $rec->prop('HeadingWeight') || 99999; #Stop noise in logs if file in dir does not have nav header. | ||||
| 	    $descriptionWeight = $rec->prop('DescriptionWeight'); | ||||
| 	    $urlpath = $rec->prop('UrlPath') || ''; | ||||
| 	    $menucat = $rec->prop('MenuCat') || 'A';	# admin menu (default) | ||||
| 	} | ||||
| 	next if $menu ne $menucat; | ||||
| 		if (defined $rec) | ||||
| 		{ | ||||
| 			$heading = $rec->prop('Heading'); | ||||
| 			$description = $rec->prop('Description'); | ||||
| 			$headingWeight = $rec->prop('HeadingWeight') || 99999; #Stop noise in logs if file in dir does not have nav header. | ||||
| 			$descriptionWeight = $rec->prop('DescriptionWeight'); | ||||
| 			$urlpath = $rec->prop('UrlPath') || ''; | ||||
| 			$menucat = $rec->prop('MenuCat') || 'A';	# admin menu (default) | ||||
| 		} | ||||
| 		 | ||||
| 		# Added: Check if this is an admin menu item and if user has access | ||||
| 		if ($menucat eq 'A' && !$is_admin) { | ||||
| 			# Skip this admin panel if user doesn't have access to it | ||||
| 			my $has_access = 0; | ||||
| 			my $file_no_ext = $file; | ||||
| 			$file_no_ext =~ s/\.pm$//;  # Remove .pm extension if present | ||||
| 			foreach my $allowed_panel (@allowed_admin_panels) { | ||||
| 				if ($file_no_ext eq lc($allowed_panel)) { | ||||
| 					#die("Here!!$file $file_no_ext $allowed_panel "); | ||||
| 					$has_access = 1; | ||||
| 					last; | ||||
| 				} | ||||
| 			} | ||||
| 			next if !$has_access; | ||||
| 		} | ||||
|  | ||||
| 	#--------------------------------------------------  | ||||
| 	# add heading, description and weight information to data structure | ||||
| 	#--------------------------------------------------  | ||||
| 		next if $menu ne $menucat; | ||||
|  | ||||
| 	unless (exists $nav {$heading}) | ||||
| 	{ | ||||
| 	    $nav {$heading} = { COUNT => 0, WEIGHT => 0, DESCRIPTIONS => [] }; | ||||
| 	} | ||||
| 		#--------------------------------------------------  | ||||
| 		# add heading, description and weight information to data structure | ||||
| 		#--------------------------------------------------  | ||||
|  | ||||
| 	$nav {$heading} {'COUNT'} ++; | ||||
| 	$nav {$heading} {'WEIGHT'} += $headingWeight; | ||||
| 		unless (exists $nav {$heading}) | ||||
| 		{ | ||||
| 			$nav {$heading} = { COUNT => 0, WEIGHT => 0, DESCRIPTIONS => [] }; | ||||
| 		} | ||||
|  | ||||
| 	# Check for manager panel, and assign the appropriate | ||||
| 	#  cgi-bin prefix for the links. | ||||
| 	# Grab the last 2 directories by splitting for '/'s and | ||||
| 	#  then concatenating the last 2 | ||||
| 	# probably a better way, but I don't know it. | ||||
| 		$nav {$heading} {'COUNT'} ++; | ||||
| 		$nav {$heading} {'WEIGHT'} += $headingWeight; | ||||
|  | ||||
| 	my $path; | ||||
| 	if ( $files_hash{$file} eq 'ctrl') { | ||||
| 	    $path = "2"; | ||||
| 	} elsif ( $files_hash{$file} eq 'cgim') { | ||||
| 		$path = "/cgi-bin"; | ||||
| 	} else { | ||||
| 		my @filename = split /\//, $files_hash{$file}; | ||||
| 		$path = "/$filename[scalar @filename - 2]/$filename[scalar @filename - 1]"; | ||||
| 	}; | ||||
| 		# Check for manager panel, and assign the appropriate | ||||
| 		#  cgi-bin prefix for the links. | ||||
| 		# Grab the last 2 directories by splitting for '/'s and | ||||
| 		#  then concatenating the last 2 | ||||
| 		# probably a better way, but I don't know it. | ||||
|  | ||||
| 	push @{ $nav {$heading} {'DESCRIPTIONS'} }, | ||||
| 		{ DESCRIPTION => $description, | ||||
| 		  WEIGHT => $descriptionWeight,  | ||||
| 		  FILENAME => $urlpath ? $urlpath : "$path/$file", | ||||
| 		  CGIPATH => $path, | ||||
| 		  MENUCAT => $menucat | ||||
| 		my $path; | ||||
| 		if ( $files_hash{$file} eq 'ctrl') { | ||||
| 			$path = "2"; | ||||
| 		} elsif ( $files_hash{$file} eq 'cgim') { | ||||
| 			$path = "/cgi-bin"; | ||||
| 		} else { | ||||
| 			my @filename = split /\//, $files_hash{$file}; | ||||
| 			$path = "/$filename[scalar @filename - 2]/$filename[scalar @filename - 1]"; | ||||
| 		}; | ||||
|  | ||||
| 		push @{ $nav {$heading} {'DESCRIPTIONS'} }, | ||||
| 			{ DESCRIPTION => $description, | ||||
| 			  WEIGHT => $descriptionWeight,  | ||||
| 			  FILENAME => $urlpath ? $urlpath : "$path/$file", | ||||
| 			  CGIPATH => $path, | ||||
| 			  MENUCAT => $menucat | ||||
| 			}; | ||||
|     } | ||||
|  | ||||
| 	return \%nav; | ||||
|  | ||||
| } | ||||
|  | ||||
| sub simpleNavMerge { | ||||
| 	#Used to merge two nav structures - used for the user and selected admin menu. | ||||
|     my ($class,$nav1, $nav2) = @_; | ||||
|     my %result = %$nav1;  # Start with a copy of first nav | ||||
|      | ||||
|     # Merge in second nav | ||||
|     foreach my $heading (keys %$nav2) { | ||||
|         if (exists $result{$heading}) { | ||||
|             # Add counts and weights | ||||
|             $result{$heading}{COUNT} += $nav2->{$heading}{COUNT}; | ||||
|             $result{$heading}{WEIGHT} += $nav2->{$heading}{WEIGHT}; | ||||
|             # Append descriptions | ||||
|             push @{$result{$heading}{DESCRIPTIONS}}, @{$nav2->{$heading}{DESCRIPTIONS}}; | ||||
|         } else { | ||||
|             # Just copy the heading | ||||
|             $result{$heading} = $nav2->{$heading}; | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     return \%result; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| sub _lang_space { | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,7 @@ package SrvMngr::Controller::Ibays; | ||||
|  | ||||
| #---------------------------------------------------------------------- | ||||
| # heading     : Network | ||||
| # description : Shared areas (was ibays) | ||||
| # description : Ibays | ||||
| # navigation  : 6000 100 | ||||
| # | ||||
| # | ||||
|   | ||||
| @@ -142,6 +142,10 @@ sub do_display { | ||||
|     if ($trt eq 'LIST') { | ||||
|  | ||||
|         #List all the port forwards | ||||
|         # Open them again as maybe written to above  | ||||
|         $tcp_db = esmith::ConfigDB->open('portforward_tcp') || die "Can't open portforward_tcp database: $!\n"; | ||||
| 		$udp_db = esmith::ConfigDB->open('portforward_udp') || die "Can't open portforward_udp database: $!\n"; | ||||
|  | ||||
|         my @tcpforwards = $tcp_db->get_all; | ||||
|         my @udpforwards = $udp_db->get_all; | ||||
|         my $empty       = 1 if not @tcpforwards and not @udpforwards; | ||||
| @@ -211,6 +215,7 @@ sub add_portforward { | ||||
|  | ||||
| sub get_destination_host { | ||||
|     my $q           = shift; | ||||
| 	$cdb = esmith::ConfigDB->open || die "Can't open configuration database: $!\n"; | ||||
|     my $dhost       = $q->param("dhost"); | ||||
|     my $localip     = $cdb->get_prop('InternalInterface', 'IPAddress'); | ||||
|     my $external_ip = $cdb->get_prop('ExternalInterface', 'IPAddress') || $localip; | ||||
| @@ -357,6 +362,7 @@ sub isValidPort() { | ||||
|  | ||||
| sub validate_destination_host { | ||||
|     my $c     = shift; | ||||
| 	$cdb = esmith::ConfigDB->open || die "Can't open configuration database: $!\n"; | ||||
|     my $dhost = $c->param('dhost'); | ||||
|     $dhost =~ s/^\s+|\s+$//g; | ||||
|     my $localip = $cdb->get_prop('InternalInterface', 'IPAddress'); | ||||
| @@ -395,4 +401,4 @@ sub validate_allowed_hosts { | ||||
|     } ## end foreach (split(/[\s,]+/, $ahost...)) | ||||
|     return %valid_ahost_list; | ||||
| } ## end sub validate_allowed_hosts | ||||
| 1; | ||||
| 1; | ||||
| @@ -30,7 +30,7 @@ our @EXPORT = qw( networkAccess_list passwordLogin_list get_ssh_permit_root_logi | ||||
| ); | ||||
|  | ||||
| #		get_pptp_sessions | ||||
| our $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
| my  $db; # = esmith::ConfigDB->open || warn "Couldn't open configuration database";  | ||||
|  | ||||
| sub main { | ||||
|     my $c = shift; | ||||
| @@ -134,7 +134,7 @@ sub networkAccess_list { | ||||
|     return [ | ||||
|         [ $c->l('rma_NO_ACCESS')         => 'off' ], | ||||
|         [ $c->l('NETWORKS_ALLOW_LOCAL')  => 'private' ], | ||||
|         [ $c->l('NETWORKS_ALLOW_PUBLIC') => 'normal' ] | ||||
|         [ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public' ] | ||||
|     ]; | ||||
| } ## end sub networkAccess_list | ||||
|  | ||||
| @@ -144,6 +144,7 @@ sub passwordLogin_list { | ||||
| } | ||||
|  | ||||
| sub get_prop { | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     my ($c, $item, $prop) = @_; | ||||
|     warn "You must specify a record key"    unless $item; | ||||
|     warn "You must specify a property name" unless $prop; | ||||
| @@ -154,6 +155,8 @@ sub get_prop { | ||||
| sub get_value { | ||||
|     my $c    = shift; | ||||
|     my $item = shift; | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     return ($db->get($item)->value()); | ||||
| } ## end sub get_value | ||||
|  | ||||
| @@ -179,8 +182,8 @@ sub get_ssh_password_auth { | ||||
| } | ||||
|  | ||||
| sub get_ssh_access { | ||||
|     my $status = get_prop('', 'sshd', 'status'); | ||||
|  | ||||
| 	my $c = shift; | ||||
|     my $status = $c->get_prop('sshd', 'status'); | ||||
|     if (defined($status) && ($status eq 'enabled')) { | ||||
|         my $access = get_prop('', 'sshd', 'access'); | ||||
|         $access = ($access eq 'public') ? 'public' : 'private'; | ||||
| @@ -202,6 +205,7 @@ sub get_ftp_password_login_access { | ||||
| } ## end sub get_ftp_password_login_access | ||||
|  | ||||
| sub get_telnet_mode { | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     my $telnet = $db->get('telnet'); | ||||
|     return ('off') unless $telnet; | ||||
|     my $status = $telnet->prop('status') || 'disabled'; | ||||
| @@ -211,8 +215,8 @@ sub get_telnet_mode { | ||||
| } ## end sub get_telnet_mode | ||||
|  | ||||
| sub get_ipsecrw_sessions { | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     my $status = $db->get('ipsec')->prop('RoadWarriorStatus'); | ||||
|  | ||||
|     if (defined($status) && ($status eq 'enabled')) { | ||||
|         return ($db->get('ipsec')->prop('RoadWarriorSessions') || '0'); | ||||
|     } else { | ||||
| @@ -221,6 +225,7 @@ sub get_ipsecrw_sessions { | ||||
| } ## end sub get_ipsecrw_sessions | ||||
|  | ||||
| sub get_ipsecrw_status { | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     return undef unless ($db->get('ipsec')); | ||||
|     return $db->get('ipsec')->prop('RoadWarriorStatus'); | ||||
| } | ||||
| @@ -228,6 +233,7 @@ sub get_ipsecrw_status { | ||||
| sub pptp_and_dhcp_range { | ||||
|     my $c           = shift; | ||||
|     my $val         = shift || 0; | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     my $dhcp_status = $db->get_prop('dhcpd', 'status') || 'disabled'; | ||||
|     my $dhcp_end    = $db->get_prop('dhcpd', 'end') || ''; | ||||
|     my $dhcp_start  = $db->get_prop('dhcpd', 'start') || ''; | ||||
| @@ -245,6 +251,7 @@ sub pptp_and_dhcp_range { | ||||
|  | ||||
| sub _get_valid_from { | ||||
|     my $c   = shift; | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     my $rec = $db->get('httpd-admin'); | ||||
|     return undef unless ($rec); | ||||
|     my @vals = (split ',', ($rec->prop('ValidFrom') || '')); | ||||
| @@ -287,12 +294,12 @@ sub validate_network_and_mask { | ||||
|  | ||||
| sub change_settings { | ||||
|     my ($c, %rma_datas) = @_; | ||||
|  | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     #------------------------------------------------------------ | ||||
|     # good; go ahead and change the access. | ||||
|     #------------------------------------------------------------ | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     my $rec = $db->get('telnet'); | ||||
|  | ||||
|     if ($rec) { | ||||
|         if ($rma_datas{telnetAccess} eq "off") { | ||||
|             $rec->set_prop('status', 'disabled'); | ||||
| @@ -363,7 +370,7 @@ sub change_settings { | ||||
| sub set_ipsecrw_sessions { | ||||
|     my $c        = shift; | ||||
|     my $sessions = shift; | ||||
|  | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|     if (defined $sessions) { | ||||
|         $db->get('ipsec')->set_prop('RoadWarriorSessions', $sessions); | ||||
|  | ||||
| @@ -378,6 +385,7 @@ sub add_new_valid_from { | ||||
|     my $c    = shift; | ||||
|     my $net  = shift; | ||||
|     my $mask = shift; | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|  | ||||
|     # we transform bit mask to regular mask | ||||
|     $mask = get_reg_mask($net, $mask); | ||||
| @@ -400,6 +408,7 @@ sub remove_valid_from { | ||||
|     my $c           = shift; | ||||
|     my $remove_nets = shift; | ||||
|     my @remove      = split /,/, $remove_nets; | ||||
|     $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; | ||||
|  | ||||
|     #	my @remove = $c->param('Remove_nets'); | ||||
|     my @vals = $c->_get_valid_from(); | ||||
| @@ -430,4 +439,4 @@ sub remove_valid_from { | ||||
|     $db->get('httpd-admin')->set_prop('ValidFrom', $prop); | ||||
|     return 1; | ||||
| } ## end sub remove_valid_from | ||||
| 1; | ||||
| 1; | ||||
| @@ -1,16 +1,11 @@ | ||||
| package SrvMngr::Controller::Review; | ||||
|  | ||||
| #---------------------------------------------------------------------- | ||||
| # heading     : Support | ||||
| # heading     : Investigation | ||||
| # description : Review configuration | ||||
| # navigation  : 000 500 | ||||
| # menu        : N | ||||
| # navigation  : 6000 6800 | ||||
| # routes : end | ||||
| #---------------------------------------------------------------------- | ||||
| # heading-o     : Configuration | ||||
| # description-o : Review configuration | ||||
| # navigation-o  : 6000 6800 | ||||
| #---------------------------------------------------------------------- | ||||
| use strict; | ||||
| use warnings; | ||||
| use Mojo::Base 'Mojolicious::Controller'; | ||||
| @@ -313,4 +308,4 @@ sub get_public_ip_address | ||||
| } | ||||
|  | ||||
|  | ||||
| 1; | ||||
| 1; | ||||
| @@ -31,7 +31,8 @@ sub main { | ||||
|     my %log_datas = (); | ||||
|     my $title     = $c->l('log_FORM_TITLE'); | ||||
|     my $notif     = ''; | ||||
|     $log_datas{default_op} = ($cdb->get('viewlogfiles')->prop('DefaultOperation')) || 'view'; | ||||
|     my $viewlog = $cdb->get('viewlogfiles'); | ||||
|     $log_datas{default_op} = ($viewlog ? $viewlog->prop('DefaultOperation') : undef) || 'view'; | ||||
|     $c->stash(title => $title, notif => $notif, log_datas => \%log_datas); | ||||
|     $c->render(template => 'viewlogfiles'); | ||||
| } ## end sub main | ||||
|   | ||||
							
								
								
									
										99
									
								
								root/usr/share/smanager/lib/SrvMngr_Auth.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								root/usr/share/smanager/lib/SrvMngr_Auth.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,99 @@ | ||||
| # Optimized SrvMngr_Auth module using stash caching and Exporter | ||||
|  | ||||
| package SrvMngr_Auth; | ||||
|  | ||||
| use strict; | ||||
| use warnings; | ||||
| use Exporter qw(import); # Import the Exporter module | ||||
| use esmith::AccountsDB; | ||||
|  | ||||
| # Define functions to be exported upon request | ||||
| our @EXPORT_OK = qw(check_admin_access load_user_auth_info has_panel_access get_panel_from_path); | ||||
|  | ||||
| # Helper function to extract panel name from path | ||||
| sub get_panel_from_path { | ||||
|     my ($path) = @_; | ||||
|      | ||||
|     if ($path =~ m{^/([^/]+)}) { | ||||
|         return $1; | ||||
|     } | ||||
|      | ||||
|     return ''; # Return empty string if no panel found | ||||
| } | ||||
|  | ||||
| # Load user authentication info and cache it in the stash | ||||
| sub load_user_auth_info { | ||||
|     my ($c) = @_; | ||||
|      | ||||
|     # Check if auth info is already cached in the stash | ||||
|     return if exists $c->stash->{auth_info}; | ||||
|      | ||||
|     my %auth_info = ( | ||||
|         username => '', # Initialize username | ||||
|         is_admin => 0, | ||||
|         allowed_panels => [], | ||||
|     ); | ||||
|      | ||||
|     # Get username from session | ||||
|     $auth_info{username} = $c->session->{username} || ''; # Provide default empty string | ||||
|      | ||||
|     # Check if user is admin | ||||
|     $auth_info{is_admin} = $c->is_admin || 0; | ||||
|      | ||||
|     # If not admin, get allowed panels | ||||
|     if (!$auth_info{is_admin} && $auth_info{username}) { | ||||
|         my $accountsdb = esmith::AccountsDB->open_ro(); | ||||
|         if ($accountsdb) { | ||||
|             my $user_rec = $accountsdb->get($auth_info{username}); | ||||
|             # Check if the property exists before trying to get its value | ||||
|             if (defined $user_rec && $user_rec->prop('AdminPanels')) { | ||||
|                 # Get comma-separated list of allowed admin panels | ||||
|                 my $admin_panels = $user_rec->prop('AdminPanels'); | ||||
|                 $auth_info{allowed_panels} = [split(/,/, $admin_panels)]; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     # Store the calculated info in the stash | ||||
|     $c->stash(auth_info => \%auth_info); | ||||
| } | ||||
|  | ||||
| # Check if a user has access to a specific panel (uses cached info) | ||||
| sub has_panel_access { | ||||
|     my ($c, $panel) = @_; | ||||
|      | ||||
|     # Ensure auth info is loaded | ||||
|     load_user_auth_info($c); | ||||
|      | ||||
|     my $auth_info = $c->stash->{auth_info}; | ||||
|      | ||||
|     # Check if requested panel is in allowed panels | ||||
|     foreach my $allowed_panel (@{$auth_info->{allowed_panels}}) { | ||||
|         return 1 if $panel eq lc($allowed_panel); #Controller files are capitalised, but that is lost in panel id. | ||||
|     } | ||||
|      | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| # Main function to check admin access (uses cached info) | ||||
| sub check_admin_access { | ||||
|     my ($c) = @_; | ||||
|      | ||||
|     # Ensure auth info is loaded | ||||
|     load_user_auth_info($c); | ||||
|      | ||||
|     my $auth_info = $c->stash->{auth_info}; | ||||
|      | ||||
|     # First check if user is admin | ||||
|     return 1 if $auth_info->{is_admin}; | ||||
|      | ||||
|     # If not admin, check if they have access to the specific panel | ||||
|     my $current_path = $c->req->url->path; | ||||
|     my $requested_panel = $current_path;   | ||||
|     return 0 unless $requested_panel; | ||||
|      | ||||
|     # Check if user has access to this panel using the cached info | ||||
|     return has_panel_access($c, $requested_panel); | ||||
| } | ||||
|  | ||||
| 1; # Return true value for module loading | ||||
| @@ -0,0 +1,505 @@ | ||||
|  { | ||||
|     margin-left: 0; | ||||
| } | ||||
|  | ||||
| a.alert { | ||||
|     color: red; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     background: #e8f3e1; | ||||
| } | ||||
|  | ||||
| a.item { | ||||
|     color: #00008b; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     background: #e8f3e1; | ||||
| } | ||||
|  | ||||
| a.item-current:hover,   a.warn-current:hover { | ||||
|     border-color: #888; | ||||
| } | ||||
|  | ||||
| a.item-current:link,    a.warn-current:link, | ||||
| a.item-current:visited, a.warn-current:visited,  | ||||
| a.item-current:active,  a.warn-current:active, | ||||
| a.item-current:hover,   a.warn-current:hover { | ||||
|     display: block; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 10px; | ||||
|     color: black; | ||||
|     text-decoration: none; | ||||
|     background: #fff; | ||||
|     border-color: #888; | ||||
|     margin: 0; | ||||
|     border-style: solid; | ||||
|     border-width: 1px; | ||||
|     padding-right: 10px; | ||||
|     padding-left: 10px; | ||||
|     padding-bottom: 2px; | ||||
|     text-align: left; | ||||
| } | ||||
|  | ||||
| a.item:active, a.item-current:active,  | ||||
| a.warn:active, a.warn-current:active { | ||||
|     display: block; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 10px; | ||||
|     color: white; | ||||
|     background: black; | ||||
|     text-decoration: none; | ||||
|     border-color: #000; | ||||
|     margin: 0; | ||||
|     border-style: solid; | ||||
|     border-width: 1px; | ||||
|     padding-right: 10px; | ||||
|     padding-left: 10px; | ||||
|     padding-bottom: 2px; | ||||
|     text-align: left; | ||||
| } | ||||
|  | ||||
| a.item:hover, a.item-current:hover, | ||||
| a.warn:hover, a.warn-current:hover { | ||||
|     display: block; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 10px; | ||||
|     color: black; | ||||
|     text-decoration: none; | ||||
|     background: #ccc; | ||||
|     border-color: #888; | ||||
|     margin: 0; | ||||
|     border-style: solid; | ||||
|     border-width: 1px; | ||||
|     padding-right: 10px; | ||||
|     padding-left: 10px; | ||||
|     padding-bottom: 2px; | ||||
|     text-align: left; | ||||
| } | ||||
|  | ||||
| a.item:link, a.item-current:link,  | ||||
| a.warn:link, a.warn-current:link { | ||||
|     display: block; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 10px; | ||||
|     color: black; | ||||
|     background: #e8f3e1; | ||||
|     text-decoration: none; | ||||
|     text-align: left; | ||||
|     border-color: #e8f3e1; | ||||
|     margin: 0; | ||||
|     border-style: solid; | ||||
|     border-width: 1px; | ||||
|     padding: 0 10px 2px; | ||||
| } | ||||
|  | ||||
| a.item:visited, a.item-current:visited,  | ||||
| a.warn:visited, a.warn-current:visited { | ||||
|     display: block; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 10px; | ||||
|     color: black; | ||||
|     background: #e8f3e1; | ||||
|     text-decoration: none; | ||||
|     border-color: #e8f3e1; | ||||
|     margin: 0; | ||||
|     border-style: solid; | ||||
|     border-width: 1px; | ||||
|     padding-right: 10px; | ||||
|     padding-left: 10px; | ||||
|     padding-bottom: 2px; | ||||
|     text-align: left; | ||||
| } | ||||
|  | ||||
| a.section-title { | ||||
|     display: inline-block; | ||||
|     color: #6CA345; | ||||
|     padding-left: 5px; | ||||
|     padding-right: 5px; | ||||
|     line-height: 18px; | ||||
|     font-weight: bold; | ||||
| } | ||||
|  | ||||
| a.sl { | ||||
|     color: green; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     background: #e8f3e1; | ||||
| } | ||||
|  | ||||
| a.update { | ||||
|     color: red; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     background: #98d36e; | ||||
| } | ||||
|  | ||||
| a.warn:link,    a.warn-current:link,  | ||||
| a.warn:visited, a.warn-current:visited,  | ||||
| a.warn:active,  a.warn-current:active, | ||||
| a.warn:hover,   a.warn-current:hover { | ||||
|     background-image: url("/server-common/warn.gif"); | ||||
|     background-repeat: no-repeat; | ||||
|     background-position: 10px; | ||||
|     padding-left: 25px; | ||||
| } | ||||
|  | ||||
| a:active { | ||||
|     color: #606060; | ||||
|     text-decoration: none; | ||||
| } | ||||
|  | ||||
| a:hover { | ||||
|     color: #F00; | ||||
|     text-decoration: none; | ||||
| } | ||||
|  | ||||
| a:link { | ||||
|     color: #006921; | ||||
|     text-decoration: none; | ||||
| } | ||||
|  | ||||
| a:visited { | ||||
|     color: #063; | ||||
|     text-decoration: none; | ||||
| } | ||||
|  | ||||
| body { | ||||
|     background-color: #FFF; | ||||
|     color: #000; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     border-width: 0; | ||||
| } | ||||
|  | ||||
| body, body.main { | ||||
|     margin: 5px 20px 5px 5px; | ||||
| } | ||||
|  | ||||
| body, body.menu { | ||||
|     margin: 0 0 0 2px; | ||||
| } | ||||
|  | ||||
| body.header { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     background-color: #bee6a2; | ||||
|     margin: 0; | ||||
| } | ||||
|  | ||||
| body.main { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     background-color: #fff; | ||||
|     color: #000; | ||||
| } | ||||
|  | ||||
| body.menu { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     background-color: #e8f3e1; | ||||
| } | ||||
|  | ||||
| div.error, div.sme-error, span.error, span.sme-error { | ||||
|     color: red; | ||||
|     background-color: #f9f9f9; | ||||
|     border-width: 1px; | ||||
|     border-style: solid; | ||||
|     border-color: red; | ||||
|     padding: 10px; | ||||
|     border-radius: 10px; | ||||
|      | ||||
| } | ||||
|  | ||||
| form { | ||||
|     margin-top: 2px; | ||||
|     margin-bottom: 2px; | ||||
| } | ||||
|  | ||||
| h1, .h1 { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     color: #333; | ||||
|     font-size: 18px; | ||||
|     margin-bottom: 4px; | ||||
|     margin-top: 12px; | ||||
| } | ||||
|  | ||||
| h2, .h2 { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     color: #333; | ||||
|     font-size: 14px; | ||||
|     margin-bottom: 3px; | ||||
|     margin-top: 12px; | ||||
| } | ||||
|  | ||||
| h3, .h3 { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     color: #333; | ||||
|     font-size: 12px; | ||||
|     margin-bottom: 2px; | ||||
|     margin-top: 12px; | ||||
| } | ||||
|  | ||||
| h4, .h4 { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-style: italic; | ||||
|     color: #333; | ||||
|     font-size: 12px; | ||||
|     margin-bottom: 2px; | ||||
|     margin-top: 10px; | ||||
| } | ||||
|  | ||||
| hr.sectionbar { | ||||
|     color: #8ebe43; | ||||
|     background-color: #8ebe43; | ||||
|     height: 1px; | ||||
|     width: 80%; | ||||
|     border: 0; | ||||
| } | ||||
|  | ||||
| hr.sme-copyrightbar { | ||||
|     color: #8ebe43; | ||||
|     background-color: #8ebe43; | ||||
|     height: 1px; | ||||
|     width: 100%; | ||||
|     border: 0; | ||||
| } | ||||
|  | ||||
| input.action { | ||||
|     margin-left: 0; | ||||
|     background-color: #bee6a2; | ||||
|     color: darkgreen; | ||||
|     border-radius: 8px; | ||||
|     border: 2px solid #4CAF50; | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
| } | ||||
|  | ||||
| input.action2 { | ||||
|     margin-left: 0; | ||||
|     color: black; | ||||
|     background-color: #d4d0c8; | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
| } | ||||
|  | ||||
| input.action:active { | ||||
|     background-color: #3e8e41; | ||||
|     transform: translate(-2px,2px); | ||||
| } | ||||
|  | ||||
| input.action:hover { | ||||
|     background-color: #3e8e41; | ||||
|     color: white; | ||||
| } | ||||
|  | ||||
| input.field-with-error { | ||||
|     background-color: #fd9e7e; | ||||
| } | ||||
|  | ||||
| label.field-with-error { | ||||
|     color: #dd7e5e; | ||||
| } | ||||
|  | ||||
| ol, ul, li { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 10px; | ||||
|     font-weight: normal; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| p { | ||||
|     margin-top: 8px; | ||||
|     margin-bottom: 2px; | ||||
| } | ||||
|  | ||||
| span { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
| } | ||||
|  | ||||
| span.data { | ||||
|     padding: 2px; | ||||
|     font-weight: bold; | ||||
|     margin-left: 0; | ||||
| } | ||||
|  | ||||
| span.data2 { | ||||
|     padding: 2px; | ||||
| } | ||||
|  | ||||
| span.label { | ||||
|     display: inline-block; | ||||
|     font-weight: bold; | ||||
|     background-color: #e8f3e1; | ||||
|     width: 30%; | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| span.label2 { | ||||
|     display: inline-block; | ||||
|     font-weight: bold; | ||||
|     background-color: #e8f3e1; | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| table, tr, td, div, p, form { | ||||
|     color: #000; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
| } | ||||
|  | ||||
| table.sme-border { | ||||
|     border-collapse: collapse; | ||||
|     border: 2px solid #cccccc; | ||||
|     empty-cells: show; | ||||
|     margin: 5px; | ||||
| } | ||||
|  | ||||
| table.sme-layout { | ||||
|     border-collapse: collapse; | ||||
|     margin-bottom: 2px; | ||||
|     margin-top: 2px; | ||||
| } | ||||
|  | ||||
| table.sme-noborders { | ||||
|     padding: 0; | ||||
|     margin: 0 0 20px; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
| } | ||||
|  | ||||
| td { | ||||
|     text-align: left; | ||||
| } | ||||
|  | ||||
| td.darkgrey { | ||||
|     background-color: #888; | ||||
| } | ||||
|  | ||||
| td.label { | ||||
|     font-weight: bold; | ||||
|     background-color: #e8f3e1; | ||||
|     width: 30%; | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| td.menu-cell { | ||||
|     margin: 0; | ||||
|     padding: 0; | ||||
| } | ||||
|  | ||||
| td.section { | ||||
|     padding-bottom: 2px; | ||||
|     padding-top: 8px; | ||||
|     background-color: #e8f3e1; | ||||
| } | ||||
|  | ||||
| td.sme-border a, td.sme-border-right a, td.sme-border-center a { | ||||
|     font-size: 10px; | ||||
| } | ||||
|  | ||||
| td.sme-border, td.sme-border-warning, td.sme-border-right, td.sme-border-center { | ||||
|     border: 1px solid #cccccc; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 10px; | ||||
|     font-weight: normal; | ||||
|     color: #000; | ||||
|     text-align: left; | ||||
|     padding: 3px 2px; | ||||
| } | ||||
|  | ||||
| td.sme-border-center { | ||||
|     text-align: center; | ||||
| } | ||||
|  | ||||
| td.sme-border-right { | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| td.sme-border-warning { | ||||
|     color: red; | ||||
| } | ||||
|  | ||||
| /* sme-layout* : Used for top-level layout */ | ||||
|  table.sme-layout { | ||||
|      border-collapse: collapse; | ||||
|      margin-bottom: 2px; | ||||
|      margin-top: 2px; | ||||
| } | ||||
|  tr.sme-layout { | ||||
|      border: 1px solid #dddddd; | ||||
| } | ||||
|  td.sme-layout { | ||||
|      border: 1px solid #dddddd; | ||||
| } | ||||
|  | ||||
| td.sme-noborders-content { | ||||
|     text-align: left; | ||||
|     vertical-align: top; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
| } | ||||
|  | ||||
| td.sme-noborders-info, div.sme-noborders-info { | ||||
|     text-align: left; | ||||
|     vertical-align: top; | ||||
| } | ||||
|  | ||||
| td.sme-noborders-label { | ||||
|     font-weight: bold; | ||||
|     text-align: right; | ||||
|     background-color: #e8f3e1; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     width: 33%; | ||||
| } | ||||
|  | ||||
| td.sme-radiobutton { | ||||
|     width: 30px; | ||||
| } | ||||
|  | ||||
| th.sme-border { | ||||
|     border: 1px; | ||||
|     background-color: #bee6a2; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 10px; | ||||
|     font-weight: bold; | ||||
|     color: #000; | ||||
|     text-align: center; | ||||
|     vertical-align: bottom; | ||||
|     padding: 3px; | ||||
| } | ||||
|  | ||||
| th.sme-layout { | ||||
|     border: 1px; | ||||
|     background-color: #e8f3e1; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 9pt; | ||||
|     font-weight: bold; | ||||
|     color: #000; | ||||
|     text-align: right; | ||||
|     padding: 4px; | ||||
| } | ||||
|  | ||||
| tr.sme-layout { | ||||
|     border: 1px; | ||||
| } | ||||
|  | ||||
| ul { | ||||
|     list-style-type: circle; | ||||
| } | ||||
|  | ||||
| div.success, span.success { | ||||
|      color: #006400; | ||||
|      border-width: 1px; | ||||
|      border-style: solid; | ||||
|      border-color: #006400 ; | ||||
|      padding: 10px; | ||||
|      border-radius: 10px; | ||||
| } | ||||
|  | ||||
| div.roundcube #roundcube{ | ||||
| 	width:100%; | ||||
| 	height:600px; | ||||
| } | ||||
							
								
								
									
										283
									
								
								root/usr/share/smanager/themes/default/public/css/new_sme.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										283
									
								
								root/usr/share/smanager/themes/default/public/css/new_sme.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,283 @@ | ||||
| /* css/sme-password.css */ | ||||
| .input-container { | ||||
|     position: relative; | ||||
|     display: inline-block; | ||||
| } | ||||
| .sme-password { | ||||
|     padding-right: 5px; /* Ensure space for the toggle icon */ | ||||
| } | ||||
| .toggle-password { | ||||
|     position: absolute; | ||||
|     right: 4px; /* Position it towards the right */ | ||||
|     top: 50%; /* Center vertically */ | ||||
|     transform: translateY(-50%); /* Adjust for exact centering */ | ||||
|     cursor: pointer; | ||||
|     width: 20px; /* Set the width of the icon */ | ||||
|     height: 20px; /* Set the height of the icon */ | ||||
| } | ||||
|  | ||||
| .module { | ||||
|     padding: 20px; | ||||
|     border: 1px ; | ||||
|     border-radius: 10px; | ||||
|     background-color: #f9f9f9; | ||||
|     box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); | ||||
|     margin-left: 10px !important; | ||||
|     margin-top: 10px; | ||||
| } | ||||
|  | ||||
| .sme-copyright { | ||||
|     color: #777; | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 10px; | ||||
| } | ||||
|  | ||||
| .logo { | ||||
|     height: 142%; | ||||
|     width: auto; | ||||
|     margin-left: -16px; | ||||
| } | ||||
|  | ||||
| .gradient-panel { | ||||
|     width: 100%; | ||||
|     height: 40px; | ||||
|     background: linear-gradient(to right, white ,#c0e7a5 ); | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     position: relative; | ||||
| } | ||||
|  | ||||
| .sme-error { | ||||
|     color: #d9534f; | ||||
|     display: block; | ||||
|     background-color: #fff; | ||||
|     border-width: 1px; | ||||
|     border-style: solid; | ||||
|     border-color: red; | ||||
|     padding: 2px; | ||||
|     font-weight: bold; | ||||
|     margin-bottom: 15px; | ||||
| } | ||||
|  | ||||
| .login-button { | ||||
|     position: absolute; | ||||
|     left: 7%; | ||||
|     transform: translateX(-50%); | ||||
|     background-color: #4caf50b8; | ||||
|     color: white !important; | ||||
|     border: none; | ||||
|     padding: 8px; | ||||
|     text-align: center; | ||||
|     text-decoration: none; | ||||
|     display: inline-block; | ||||
|     font-size: 14px; | ||||
|     cursor: pointer; | ||||
|     border-radius: 4px; | ||||
|     margin-left: 77%; | ||||
| } | ||||
|  | ||||
| .sme-warning { | ||||
|     color: orange; | ||||
|     display: block; | ||||
|     background-color: #fff; | ||||
|     border-width: 1px; | ||||
|     border-style: solid; | ||||
|     border-color: orange; | ||||
|     padding: 2px; | ||||
| } | ||||
|  | ||||
| .infobar { | ||||
|     font-family: Verdana, Tahoma, sans-serif; | ||||
|     font-size: 11px; | ||||
|     background-color: #98d36e; | ||||
| } | ||||
|  | ||||
| .module-content { | ||||
|     font-family: Georgia, Garamond, serif; | ||||
|     font-size: 13px; | ||||
|     line-height: 1.2; | ||||
|     color: #555; | ||||
| } | ||||
|  | ||||
| #help-button { | ||||
|     text-decoration: none; | ||||
|     font-size: 20px; | ||||
|     padding: 8px; | ||||
|     background-color: #98d36e; | ||||
|     border-radius: 4px; | ||||
|     color: #000; | ||||
| } | ||||
|  | ||||
| /* | ||||
| #module { | ||||
|     padding: 20px; | ||||
|     border: 1px; | ||||
|     border-radius: 10px; | ||||
|     background-color: #f9f9f9; | ||||
|     box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); | ||||
| } | ||||
| */ | ||||
|  | ||||
| #container { | ||||
|     max-width: 100%; | ||||
|     position: relative; | ||||
|     margin: auto; | ||||
| } | ||||
|  | ||||
| #header2 { | ||||
|     width:96%; | ||||
|     margin-left: 1px; | ||||
|     margin-top: 4px; | ||||
| } | ||||
|  | ||||
| #main { | ||||
|     margin-left: 200px; | ||||
|     padding: 10px; | ||||
| } | ||||
|  | ||||
| #central { | ||||
|     padding: 5px; | ||||
| } | ||||
|  | ||||
| #footer { | ||||
|     padding-left: 5px; | ||||
| } | ||||
|  | ||||
| #header { | ||||
|     width: 100%; | ||||
|     margin: auto; | ||||
| } | ||||
|  | ||||
| #navigation { | ||||
|     width: 190px; | ||||
|     position: absolute; | ||||
|     padding: 5px; | ||||
|     background-color: #E8F3E1; | ||||
|     overflow: auto; | ||||
|     margin-top:20px; | ||||
| } | ||||
|  | ||||
| #footer img { | ||||
|      float: right; | ||||
|      position: fixed; | ||||
|      /*margin-left: 40%;*/ | ||||
| } | ||||
|  | ||||
| .flag-style { | ||||
|      position: absolute; | ||||
|      transform: translateY(-50%); | ||||
|      left: 95%; | ||||
|     /*right: 20px; | ||||
|     */ | ||||
|      width: 24px; | ||||
|      height: 14px; | ||||
|      display: inline-block; | ||||
|      vertical-align: middle; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* flag container*/ | ||||
| #flag-container span { | ||||
| 	font-size: 24px; | ||||
|     display: flex;                     /* Allows for easy centering */ | ||||
|     justify-content: center;           /* Center horizontally */ | ||||
|     align-items: center;               /* Center vertically */ | ||||
|     width: 100%;                       /* Full width of parent */ | ||||
|     height: 24px;                      /* Set a fixed height */ | ||||
|     border: 1px solid #ccc;            /* Light gray border */ | ||||
|     border-radius: 5px;                /* Rounded corners */ | ||||
|     cursor: default;                   /* Prevent text cursor */ | ||||
|  | ||||
| } | ||||
|  | ||||
| .fallback-box { | ||||
|   display: inline-block; /* Make it inline-block to fit around the content */ | ||||
|   border: 2px solid gray; /* Change the border color as desired */ | ||||
|   padding: 10px; /* Add some padding */ | ||||
|   border-radius: 10px; /* Round the corners of the box */ | ||||
|   font-size: 60px; /* Adjust size if needed */ | ||||
|   margin-top: 10px; /* Add some margin */ | ||||
|   text-align: center; /* Center text inside the box */ | ||||
| } | ||||
|  | ||||
|  table.sme-border { | ||||
|      border-collapse: collapse; | ||||
|      border: 2px solid #cccccc; | ||||
|      empty-cells: show; | ||||
|      margin: 5px 5px 5px 2px; | ||||
| } | ||||
|  td.sme-border, td.sme-border-warning, td.sme-border-right, td.sme-border-center { | ||||
|      border: 1px solid #cccccc; | ||||
|      font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|      font-size: 10px; | ||||
|      font-weight: normal; | ||||
|      color: #000000; | ||||
|      text-align: left; | ||||
|      padding-left: 2px; | ||||
|      padding-right: 2px; | ||||
|      padding-top: 3px; | ||||
|      padding-bottom: 3px; | ||||
| } | ||||
|  td.sme-border-warning { | ||||
|      color: red; | ||||
| } | ||||
|  td.sme-border-right { | ||||
|     text-align: right; | ||||
| } | ||||
|  td.sme-border-center { | ||||
|     text-align: center; | ||||
| } | ||||
|  th.sme-border { | ||||
|      border: 1px solid #cccccc; | ||||
|      background-color: #bee6a2; | ||||
|      font-family: Verdana, Arial, Helvetica, sans-serif; | ||||
|      font-size: 10px; | ||||
|      font-weight: bold; | ||||
|      color: #000000; | ||||
|      text-align: center; | ||||
|      vertical-align: bottom; | ||||
|      padding-left: 3px; | ||||
|      padding-right: 3px; | ||||
|      padding-top: 3px; | ||||
|      padding-bottom: 3px; | ||||
|     /*border-width: 1px; | ||||
|      border-style: solid; | ||||
|      border-color: #F2F0EE #75736E #75736E #F2F0EE ; | ||||
|     */ | ||||
| } | ||||
|  td.sme-border a, td.sme-border-right a, td.sme-border-center a { | ||||
|      font-size: 10px; | ||||
| } | ||||
|  | ||||
| th.sme-layout { | ||||
| border: 1px solid #8ebe43; | ||||
| background-color: #bee6a2; | ||||
|     } | ||||
| table.sme-border { | ||||
| border: 2px solid #dddddd; | ||||
|     } | ||||
| td.sme-border-warning, | ||||
| td.sme-border-right, | ||||
| td.sme-border-center { | ||||
| border: 1px solid #dddddd; | ||||
|     } | ||||
| td.sme-border-right {text-align: right;} | ||||
| td.sme-border-center {text-align: center;} | ||||
| th.sme-border { | ||||
| border: 1px solid #dddddd; | ||||
| background-color: #e8f3e1; | ||||
|     } | ||||
|      | ||||
| .no-visited-state { | ||||
|      color: inherit; | ||||
|     /* Or specify the desired color */ | ||||
|      text-decoration: none; | ||||
|     /* Or any other style you want to reset */ | ||||
| } | ||||
|  | ||||
| .no-visited-state:visited { | ||||
|      color: inherit; | ||||
|     /* Or specify the desired color */ | ||||
|      text-decoration: none; | ||||
|     /* Or any other style you want to reset */ | ||||
| } | ||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 12 KiB | 
| @@ -33,7 +33,7 @@ | ||||
| 	%= select_field 'EmailUnknownUser' => $c->get_emailunknownuser_opt(), class => 'input' | ||||
| 	</span></p> | ||||
|  | ||||
| 	<hr class='menubar' /> | ||||
| 	<!--<hr class='menubar' />--> | ||||
| 	<h2> | ||||
| 	%=l 'mai_TITLE_DELEGATE' | ||||
| 	</h2> | ||||
| @@ -47,7 +47,7 @@ | ||||
| 	%= text_field 'DelegateMailServer', class => 'input' | ||||
| 	</span></p> | ||||
|  | ||||
| 	<hr class='sectionbar' /> | ||||
| 	<!--<hr class='sectionbar' />--> | ||||
| 	<h2> | ||||
| 	%=l 'mai_TITLE_SMARTHOST' | ||||
| 	</h2> | ||||
| @@ -89,4 +89,4 @@ | ||||
|     % end     | ||||
|  | ||||
| </div> | ||||
| %end | ||||
| %end | ||||
| @@ -92,7 +92,7 @@ | ||||
| 	%= select_field 'uSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input' | ||||
| 	</span></p> | ||||
|  | ||||
| 	<hr class="sectionbar" /> | ||||
| 	<!--<hr class="sectionbar" />--> | ||||
| 	<h2> | ||||
| 	%=l 'mai_TITLE_SECONDARY' | ||||
| 	</h2> | ||||
|   | ||||
| @@ -47,9 +47,10 @@ | ||||
|     </div> | ||||
|  | ||||
| 	%= hidden_field 'trt' => 'ACC' | ||||
|     % end     | ||||
|     % end    | ||||
|     <br>  | ||||
|  | ||||
|         <hr class="sectionbar" /> | ||||
|     <!--<hr class="sectionbar" />--> | ||||
|      | ||||
|     %= form_for 'emailsettings' => (method => 'POST') => begin | ||||
| 	<p><span class=label> | ||||
| @@ -76,9 +77,10 @@ | ||||
|     </div> | ||||
|  | ||||
| 	%= hidden_field 'trt' => 'FIL' | ||||
|     % end     | ||||
|     % end   | ||||
|     <br>   | ||||
|  | ||||
|         <hr class="sectionbar" /> | ||||
|     <!--<hr class="sectionbar" />--> | ||||
|  | ||||
|     %= form_for 'emailsettings' => (method => 'POST') => begin | ||||
| 	<p><span class=label> | ||||
| @@ -118,8 +120,9 @@ | ||||
|  | ||||
| 	%= hidden_field 'trt' => 'REC' | ||||
|     % end     | ||||
|     <br> | ||||
|  | ||||
|         <hr class="sectionbar" /> | ||||
|     <!--<hr class="sectionbar" />--> | ||||
|  | ||||
|     %= form_for 'emailsettings' => (method => 'POST') => begin | ||||
| 	<p><span class=label> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  | ||||
| % content_for 'module' => begin | ||||
|  | ||||
| <div id="central" class="sme-error"> | ||||
| <div id="central" class="sme-error module"> | ||||
|     <p><br>dev<br> Oups !!!  | ||||
|         The page you were requesting | ||||
|         "<%= $self->req->url->path || '/' %>" | ||||
| @@ -14,4 +14,4 @@ | ||||
|     </p> | ||||
| </div> | ||||
|  | ||||
| % end | ||||
| % end | ||||
| @@ -8,7 +8,7 @@ | ||||
| 	</p> | ||||
|     % } | ||||
|  | ||||
| <div id='central' class='central initial-panel'> | ||||
| <div id='central' class='central initial-panel module'> | ||||
|  | ||||
|     % if ( stash 'error' ) { | ||||
|     	<br><div class=sme-error> | ||||
|   | ||||
| @@ -7,11 +7,18 @@ | ||||
| <title><%= $title %></title> | ||||
|     <link rel="made" href="mailto:bugs%40koozali.org"> | ||||
|     <meta name="copyright" content="(head.tmpl)Copyright 2003-2004 Mitel Corporation"> | ||||
|     %= stylesheet '/css/sme_core.css' | ||||
|     %= stylesheet '/css/sme_main.css' | ||||
|     %= stylesheet '/css/sme_menu.css' | ||||
|     %= stylesheet '/css/styles.css' | ||||
|     %= stylesheet '/css/sme-password.css' | ||||
|  | ||||
|     %= stylesheet '/css/new_sme.css' | ||||
|     %= stylesheet '/css/new-sme-main.css' | ||||
|  | ||||
|  | ||||
|     %# Replaced by consolidated (and rationlised) CSS files as above March 2025 | ||||
|     %#= stylesheet '/css/sme_core.css' | ||||
|     %#= stylesheet '/css/sme_main.css' | ||||
|     %#= stylesheet '/css/sme_menu.css' | ||||
|     %#= stylesheet '/css/styles.css' | ||||
|     %#= stylesheet '/css/sme-password.css' | ||||
|  | ||||
|     %= content_for 'head_contrib' | ||||
|     % if (config 'hasJquery') { | ||||
| 	%= include 'partials/_js_imports' | ||||
| @@ -70,7 +77,7 @@ | ||||
| 	    %= content 'js_toggleMenu' | ||||
| 	% } | ||||
|  | ||||
| 	<div id="navigation" class="col-md-3"> | ||||
| 	<div id="navigation" class="col-md-3 module"> | ||||
| 	    %= include 'partials/_nav_menu' | ||||
| %	if ( $c->is_logged_in ) { | ||||
| 	    %= include 'partials/_user_menu' | ||||
| @@ -84,17 +91,17 @@ | ||||
| 	    %= include 'partials/_info' | ||||
|  | ||||
| 	    % if (flash 'success') { | ||||
| 		<br><div class=success> | ||||
| 		<br><div class="success module"> | ||||
| 		%= $c->render_to_string(inline => flash 'success')  | ||||
| 		</div> | ||||
| 	    % } | ||||
| 	    % if ( flash 'warning' ) { | ||||
| 		<br><div class=sme-warning> | ||||
| 		<br><div class="sme-warning  module"> | ||||
| 		%= $c->render_to_string(inline => flash 'warning')  | ||||
| 		</div> | ||||
| 	    %} | ||||
| 	    % if ( flash 'error' ) { | ||||
| 		<br><div class=sme-error> | ||||
| 		<br><div class="sme-error module"> | ||||
| 		%= $c->render_to_string(inline => flash 'error')  | ||||
| 		</div> | ||||
| 	    %} | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  | ||||
| % content_for 'module' => begin | ||||
|  | ||||
| <div id="central" class="sme-error"> | ||||
| <div id="central" class="sme-error module"> | ||||
|     <p><br>dev<br> Oups !!!  | ||||
|         The page you were requesting | ||||
|         "<%= $self->req->url->path || '/' %>" | ||||
| @@ -12,4 +12,4 @@ | ||||
|     </p> | ||||
| </div> | ||||
|  | ||||
| % end | ||||
| % end | ||||
| @@ -1,5 +1,5 @@ | ||||
| % layout 'defaultlight', title => 'Sme server 2 - Error P'; | ||||
| <div id='central' class='central not_found-panel'> | ||||
| <div id='central' class='central not_found-panel module'> | ||||
|     <p><br><br> | ||||
|         The page you were requesting | ||||
|         "<%= $self->req->url->path || '/' %>" | ||||
| @@ -7,4 +7,4 @@ | ||||
|     <br><br> | ||||
|     	%= link_to Welcome => '/' | ||||
|     </p> | ||||
| </div> | ||||
| </div> | ||||
| @@ -85,7 +85,8 @@ | ||||
|  | ||||
|     %= form_for '/domains' => (method => 'POST') => begin | ||||
|  | ||||
| 		<HR class="sectionbar"> | ||||
| 		<!-- <HR class="sectionbar">--> | ||||
| 		<br> | ||||
|  | ||||
| 		% my $btn2 = l('dom_DOMAINS_PAGE_CORPORATE_DNS'); | ||||
|  | ||||
| @@ -119,4 +120,4 @@ | ||||
|  | ||||
|  | ||||
|  | ||||
| </div> | ||||
| </div> | ||||
| @@ -1,5 +1,5 @@ | ||||
| <div id="footer"> | ||||
| <HR class="sme-copyrightbar"> | ||||
| <div id="footer" class="module"> | ||||
| <!--<HR class="sme-copyrightbar">--> | ||||
| <a href="https://mojolicious.org" target="_blank"><img src="images/sme-mojo-logo-white.png" style="position:relative;"></a> | ||||
| <font class="sme-copyright"> | ||||
| %	if ( $c->is_logged_in && $c->is_admin) { | ||||
|   | ||||
| @@ -1,128 +1,12 @@ | ||||
| <style> | ||||
| #h2l1 { | ||||
|     display: flex;                  /* Use flexbox layout */ | ||||
|     justify-content: space-between; /* Space between child elements */ | ||||
|     align-items: center;           /* Center items vertically */ | ||||
| } | ||||
|  | ||||
| #h2e11 { | ||||
|     flex: 1;                       /* Allow the first div to take available space on the left */ | ||||
| } | ||||
|  | ||||
| #h2e12 {  | ||||
|     display: flex;                 /* Make this div a flex container */ | ||||
|     align-items: center;           /* Vertically center content in this div */ | ||||
|     margin-left: 20px;            /* Add margin to the left of this div */ | ||||
| } | ||||
|  | ||||
| #flag-container { | ||||
|     display: flex;                 /* Make this div a flex container */ | ||||
|     align-items: center;           /* Vertically center content in this div */ | ||||
|     margin-left: 20px;             /* Add margin to the left of the flag container */ | ||||
|     padding-right: 20px;           /* Add padding to the right side of the flag container */ | ||||
| } | ||||
|  | ||||
| .flag-icon { | ||||
|     width: 43px; | ||||
|     font-size: 20px; | ||||
| } | ||||
|  | ||||
| #legacy-button button { | ||||
|     background-color: #98d36e; /* Button background color */ | ||||
|     font-weight: lighter;      /* Lighter text for the button */ | ||||
|     color: #063;               /* Button text color */ | ||||
|     padding: 5px 10px;         /* Padding for the button */ | ||||
|     border: none;              /* Remove default button border */ | ||||
|     border-radius: 4px;        /* Rounded corners for button */ | ||||
|     cursor: pointer;           /* Change cursor on hover */ | ||||
| } | ||||
|  | ||||
| #legacy-button button:hover { | ||||
|     background-color: #82c961; /* Change color on hover */ | ||||
| } | ||||
|  | ||||
| .infobar { | ||||
|     display: flex;                  /* Use flexbox for alignment */ | ||||
|     justify-content: space-between; /* Space between child elements */ | ||||
|     align-items: center;            /* Center items vertically */ | ||||
|     padding: 10px;                  /* Adjust padding as desired */ | ||||
| } | ||||
|  | ||||
| #h2e21 { | ||||
|     flex: 1;                        /* Allow the first div to take available space on the left */ | ||||
| } | ||||
|  | ||||
| #h2e22 { | ||||
|     display: flex;                  /* Make this div a flex container */ | ||||
|     justify-content: center;        /* Center the help button */ | ||||
|     align-items: center;            /* Center vertically */ | ||||
|     flex: none;                    /* Prevent this div from growing */ | ||||
|     position: relative;             /* Relative position for centering */ | ||||
|     width: 100px;                  /* Set a width for the help button container */ | ||||
| } | ||||
|  | ||||
| #h2e23 { | ||||
|     margin-left: auto;              /* Push the third div to the right */ | ||||
| } | ||||
|  | ||||
| .login-button { | ||||
|     background-color: #98d36e;     /* Button background color */ | ||||
|     font-weight: bold;              /* Bold text */ | ||||
|     color: #ffffff;                 /* Button text color */ | ||||
|     padding: 8px 12px;              /* Adjust padding for button height */ | ||||
|     border: none;                   /* Remove default border */ | ||||
|     border-radius: 4px;             /* Rounded corners */ | ||||
|     cursor: pointer;                /* Change cursor on hover */ | ||||
| } | ||||
|  | ||||
| .login-button:hover { | ||||
|     background-color: #82c961;      /* Change color on hover */ | ||||
| } | ||||
|  | ||||
| #help-button { | ||||
|     text-decoration: none;          /* Remove underline from link */ | ||||
|     font-size: 20px;                /* Adjust font size as needed */ | ||||
|     padding: 8px 12px;              /* Add padding to the help link */ | ||||
|     background-color: #98d36e;      /* Background for visibility */ | ||||
|     border-radius: 4px;             /* Rounded corners */ | ||||
|     color: #000;                    /* Button text color */ | ||||
| } | ||||
|  | ||||
| #help-button:hover { | ||||
|     background-color: #82c961;      /* Change background on hover */ | ||||
| } | ||||
| </style> | ||||
|  | ||||
| <div id="header2" class="hd2"> | ||||
|     <div id="h2l1">  | ||||
| 		<div id="h2e11"> | ||||
| 			<a target='_blank' href="http://www.koozali.org"><img src="images/smeserver_logo.jpg" height="40" alt="SME Server"></a> | ||||
| 		</div>  | ||||
|  | ||||
| 		<div id="h2e22"> | ||||
| 			<button type='button'class="login-button"><a id="help-button" target="_parent" href="manual">?</a></button> | ||||
| 		</div> | ||||
|      | ||||
|         <div id="h2e12"> | ||||
| 			<button type='button' class="login-button"><a id="legacy-button" href="/server-manager" target='_blank'>Legacy SM</a></button> | ||||
|         </div> | ||||
| 		<div id="h2e23"> | ||||
| 			% if ( not defined $c->session->{username} ) { | ||||
| 				<button type='button' class="login-button"><a target="_parent" href="login">Login</a></button> | ||||
| 			% } else { | ||||
| 				<button type='button' class="login-button"><a target="_parent" href="logout"><%= $c->session->{username} %> Logout</a></button> | ||||
| 			% } | ||||
| 		</div> | ||||
| 		<div id="flag-container"> | ||||
| 			<!-- The flag icon will be inserted here --> | ||||
| 		</div> | ||||
|     </div> | ||||
| 	<div id="h2l2" class="infobar">  | ||||
| 		<div id="h2e21"> | ||||
| 			<b> | ||||
| 				<%= session 'SystemName' %>@<%= session 'DomainName' %></b>  | ||||
| 		</div> | ||||
| 		 | ||||
| 		 | ||||
| <div id="header2" class="hd2 module gradient-panel"> | ||||
| 	<img src="images/KoozaliServerManager.png" alt="Koozali Logo" class="logo" > | ||||
| 	% if ( not defined $c->session->{username} ) { | ||||
| 		<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="login">Login</a></button> | ||||
| 	% } else { | ||||
| 		<button type='button' class="login-button"><a class = "no-visited-state" target="_parent" href="logout">Logout <%= $c->session->{username} %></a></button> | ||||
| 	% } | ||||
| 	<div id="flag-container" class = "flag-style"> | ||||
| 		<!--			 The flag icon will be inserted here --> | ||||
| 	</div> | ||||
| </div> | ||||
| </div> | ||||
| @@ -1,16 +1,16 @@ | ||||
| <%     use POSIX qw(strftime); %> | ||||
| <div id="info"> | ||||
|     <% if (! $c->session->{PwdSet} ) { %> | ||||
| 	<div class="sme-error"><h5> | ||||
| 	<div class="sme-error module"><h5> | ||||
|         Warning: you have not yet changed the default system password.</h5></div> | ||||
|     <% } %> | ||||
|     <% if ( $c->is_unsafe ) { %> | ||||
| 	<div class="sme-error"><h5> | ||||
| 	<div class="sme-error module"><h5> | ||||
|         Warning: a reconfigure and reboot is required before proceeding! Failure to do so now | ||||
|         may leave your system in an unknown state!</h5></div> | ||||
|     <% } %> | ||||
|     <% if ( $c->session->{Access} eq 'public' && ((config->{debug} ne '0') || (config->{mode} ne 'production')) ) { %> | ||||
| 	<div class="sme-error"><h5> | ||||
| 	<div class="sme-error module"><h5> | ||||
|         Warning: Development or debug mode enabled AND public access is offered ! | ||||
|         </h5></div> | ||||
|     <% } %> | ||||
|   | ||||
| @@ -13,17 +13,18 @@ | ||||
| 	% my $var5 = @vars[4]; | ||||
| 	% my $var6 = @vars[5]; | ||||
|  | ||||
|    <br> | ||||
| 	%if ($ret{'ret'} eq "") { | ||||
|    	 | ||||
| 	%} elsif (index($ret{ret},"SUCCESS") != -1) { | ||||
| 	   <div class='success'> | ||||
| 	       <h2> Operation Status Report</h2> | ||||
| 			%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6); | ||||
| 	       <!--<h2> Operation Status Report</h2>--> | ||||
| 		%= $c->render_to_string(inline => l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6)); | ||||
| 		</div> | ||||
| 	   %} else {  | ||||
| 	   <div class='sme-error'> | ||||
| 	       <h2> Operation Status Report - Error</h2> | ||||
| 			%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6); | ||||
| 	       <!--<h2> Operation Status Report - Error</h2>--> | ||||
| 		%= $c->render_to_string(inline => l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6)); | ||||
|     	</div> | ||||
| 	%} | ||||
| 	<br /> | ||||
| @@ -66,5 +67,4 @@ | ||||
| 			</p> | ||||
| 	%end | ||||
|  | ||||
| </div> | ||||
|  | ||||
| </div> | ||||
| @@ -26,13 +26,15 @@ | ||||
| 	%if ($ret{ret} eq "") { | ||||
| 		%=l "ln_FIRSTPAGE_DESC" | ||||
| 	%} elsif (index($ret{ret},"SUCCESS") != -1) { | ||||
| 	   <br> | ||||
| 	   <div class='success'> | ||||
| 	       <h2> Operation Status Report</h2> | ||||
| 	       <!--<h2> Operation Status Report</h2>--> | ||||
| 		%= $c->render_to_string(inline => l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6,$var7)); | ||||
| 		</div> | ||||
| 	   %} else {  | ||||
| 	   <br> | ||||
| 	   <div class='sme-error'> | ||||
| 	       <h2> Operation Status Report - Error</h2> | ||||
| 	       <!--<h2> Operation Status Report - Error</h2>--> | ||||
| 		%= $c->render_to_string(inline => l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6,$var7)); | ||||
|     	</div> | ||||
| 	%} | ||||
| @@ -103,4 +105,4 @@ | ||||
| 		</table> | ||||
| 			%= hidden_field 'trt' => $ln_datas->{trt} | ||||
| 	%} | ||||
| </div> | ||||
| </div> | ||||
| @@ -13,16 +13,17 @@ | ||||
| 	% my $var5 = @vars[4]; | ||||
| 	% my $var6 = @vars[5]; | ||||
|  | ||||
| 	<br> | ||||
| 	%if ($ret{'ret'} eq "") { | ||||
|    	 | ||||
| 	%} elsif (index($ret{ret},"SUCCESS") != -1) { | ||||
| 	   <div class='success'> | ||||
| 	       <h2> Operation Status Report</h2> | ||||
| 	       <!--<h2> Operation Status Report</h2>--> | ||||
| 			%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6); | ||||
| 		</div> | ||||
| 	   %} else {  | ||||
| 	   <div class='sme-error'> | ||||
| 	       <h2> Operation Status Report - Error</h2> | ||||
| 	       <!--<h2> Operation Status Report - Error</h2>--> | ||||
| 			%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6); | ||||
|     	</div> | ||||
| 	%} | ||||
| @@ -84,4 +85,4 @@ | ||||
|  | ||||
| 	%end | ||||
|  | ||||
| </div> | ||||
| </div> | ||||
| @@ -21,13 +21,15 @@ | ||||
| 	%if ($ret{ret} eq "") { | ||||
| 	    %= $c->render_to_string(inline => l('pf_FIRST_PAGE_DESCRIPTION')); | ||||
| 	%} elsif (index($ret{ret},"SUCCESS") != -1) { | ||||
| 		<br> | ||||
| 	   <div class='success'> | ||||
| 	       <h2> Operation Status Report</h2> | ||||
| 	       <!--<h2> Operation Status Report</h2>--> | ||||
| 			%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6); | ||||
| 		</div> | ||||
| 	   %} else {  | ||||
| 		<br> | ||||
| 	   <div class='sme-error'> | ||||
| 	       <h2> Operation Status Report - Error</h2> | ||||
| 	       <!--<h2> Operation Status Report - Error</h2>--> | ||||
| 			%= $c->l($ret{ret},$var1,$var2,$var3,$var4,$var5,$var6); | ||||
|     	</div> | ||||
| 	%} | ||||
| @@ -113,4 +115,4 @@ | ||||
| 	</table> | ||||
| 	%= hidden_field 'trt' => $pf_datas->{trt} | ||||
|   | ||||
| </div> | ||||
| </div> | ||||
| @@ -11,4 +11,4 @@ | ||||
| 	</span> | ||||
| 	</p> | ||||
|  | ||||
| 	<hr class='sectionbar' /> | ||||
| 	<!--<hr class='sectionbar' />--> | ||||
| @@ -1,5 +1,7 @@ | ||||
| %	use SrvMngr qw( getNavigation ); | ||||
| %	my %nav = %{SrvMngr->getNavigation( $c->languages(), 'U' )}; | ||||
| %	use SrvMngr qw( getNavigation simpleNavMerge ); | ||||
| %	my %nav1 = %{SrvMngr->getNavigation( $c->languages(), 'U' )}; | ||||
| % 	my %nav2 = %{SrvMngr->getNavigation( $c->languages(), 'A', session('username') )}; | ||||
| %	my %nav = $c->session->{is_admin} ? %nav1 : %{SrvMngr->simpleNavMerge(\%nav1, \%nav2)}; | ||||
|  | ||||
| 	<div id='usermenu'> | ||||
| 	<a href='#' id='toguser' class='section section-title'>Current User (<%= session 'username' %>)</a> | ||||
| @@ -7,26 +9,24 @@ | ||||
| %    my $cc = 300; | ||||
| %    foreach my $h (sort { ($nav{$a}{'WEIGHT'}/$nav{$a}{'COUNT'})  | ||||
| %		<=> ($nav{$b}{'WEIGHT'}/$nav{$b}{'COUNT'}) } keys %nav) { | ||||
| 	<!-- div class='section'><%= $h %></div --> | ||||
| %	my ($classNew, $target, $href) = ''; | ||||
| %	foreach (sort { $a->{'WEIGHT'} <=> $b->{'WEIGHT'} }  @{$nav{$h}{'DESCRIPTIONS'}}) { | ||||
|  | ||||
| %	next if ($_->{'MENUCAT'} ne 'U' );	# menu User  | ||||
|  | ||||
| %	    if ( $_->{'FILENAME'} =~ m/^2\// ) { | ||||
| %		$target = '_self'; | ||||
| %	    	(my $file2 = $_->{'FILENAME'}) =~ s|^2/||; | ||||
| %	    	$href = '/smanager/' . $file2; | ||||
| %	    } else { | ||||
| %		$target = 'main'; | ||||
| %	    	$href = '/server-manager' . $_->{'FILENAME'}; | ||||
| %	    } | ||||
| 	    <div class='menu-cell'><a class='item<%= $classNew %>' target='<%= $target %>' | ||||
| 	    id='sme<%= $cc %>' href='<%= $href %>'><%= $_->{'DESCRIPTION'} %></a></div> | ||||
| 		<!-- div class='section'><%= $h %></div --> | ||||
| %		my ($classNew, $target, $href) = ''; | ||||
| %		foreach (sort { $a->{'WEIGHT'} <=> $b->{'WEIGHT'} }  @{$nav{$h}{'DESCRIPTIONS'}}) { | ||||
| %			next if ($_->{'MENUCAT'} ne 'A' && $_->{'MENUCAT'} ne 'U' );	# menu User  | ||||
| %		    if ( $_->{'FILENAME'} =~ m/^2\// ) { | ||||
| %				$target = '_self'; | ||||
| %				(my $file2 = $_->{'FILENAME'}) =~ s|^2/||; | ||||
| %				$href = '/smanager/' . $file2; | ||||
| %		    } else { | ||||
| %				$target = 'main'; | ||||
| %				$href = '/server-manager' . $_->{'FILENAME'}; | ||||
| %		    } | ||||
| 			<div class='menu-cell'><a class='item<%= $classNew %>' target='<%= $target %>' | ||||
| 			id='sme<%= $cc %>' href='<%= $href %>'><%= $_->{'DESCRIPTION'} %></a></div> | ||||
| %           $cc++; | ||||
| %	} | ||||
| %		} | ||||
|  | ||||
| %    } | ||||
|  | ||||
|     </div> | ||||
|     </div> | ||||
|     </div> | ||||
|   | ||||
| @@ -17,7 +17,7 @@ | ||||
| 	</span> | ||||
|     %} | ||||
|  | ||||
|     <hr class='sectionbar' /> | ||||
|     <!--<hr class='sectionbar' />--> | ||||
|  | ||||
|     <% 	my $btn = l('SAVE'); %> | ||||
|  | ||||
| @@ -50,7 +50,7 @@ | ||||
| 	</span> | ||||
| 	<br><br> | ||||
|  | ||||
| 	<hr class='sectionbar' /> | ||||
| 	<!--<hr class='sectionbar' />--> | ||||
|  | ||||
|     %} | ||||
|  | ||||
| @@ -85,7 +85,7 @@ | ||||
|             %= t td => (class => 'sme-border') => $net | ||||
|             %= t td => (class => 'sme-border') => $mask | ||||
|             %= t td => (class => 'sme-border') => $numhosts | ||||
|             <td class='sme-border'><input type='checkbox' name='Remote_nets' value='<%= $net.'/'.$mask %>'> </td> | ||||
|             <td class='sme-border'><input type='checkbox' name='Remove_nets' value='<%= $net.'/'.$mask %>'> </td> | ||||
|     	</tr> | ||||
|     %    } | ||||
|  | ||||
| @@ -115,7 +115,7 @@ | ||||
| 	%= text_field 'ValidFromMask', class => 'input' | ||||
| 	</span> | ||||
|  | ||||
| 	<hr class='sectionbar' /> | ||||
| 	<!--<hr class='sectionbar' />--> | ||||
|  | ||||
| 	<h2> | ||||
| 	%=l 'rma_TITLE_SSH' | ||||
| @@ -154,7 +154,7 @@ | ||||
| 	</span> | ||||
| 	<br> | ||||
|  | ||||
| 	<hr class='sectionbar' /> | ||||
| 	<!--<hr class='sectionbar' />--> | ||||
|  | ||||
| 	<h2> | ||||
| 	%=l 'rma_TITLE_FTP_ACCESS' | ||||
| @@ -183,7 +183,7 @@ | ||||
|  | ||||
|     % my $mode = $c->get_telnet_mode(); | ||||
|     % if ( $mode ne 'off') { | ||||
| 	<hr class='sectionbar' /> | ||||
| 	<!--<hr class='sectionbar' />--> | ||||
|  | ||||
| 	<h2> | ||||
| 	%=l 'rma_TITLE_TELNET_ACCESS' | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| % layout 'default', title => 'Sme server 2 - Review'; | ||||
|  | ||||
| % content_for 'module' => begin | ||||
| <div id='central' class='central review-panel'> | ||||
| <div id='central' class='central review-panel module'> | ||||
|     <h1> <%= $title %> </h1> | ||||
|     <%= $modul %><br><br> | ||||
|  | ||||
| @@ -134,4 +134,4 @@ | ||||
|  | ||||
| </div> | ||||
|  | ||||
| % end | ||||
| % end | ||||
| @@ -3,7 +3,7 @@ | ||||
| % content_for 'module' => begin | ||||
|  | ||||
|  | ||||
| <div id='roundcube' class='roundcube roundcube-panel'> | ||||
| <div id='roundcube' class='roundcube roundcube-panel module'> | ||||
|     % if (config->{debug} == 1) { | ||||
| 		<p> | ||||
| 			%= dumper $c->current_route | ||||
| @@ -37,4 +37,4 @@ | ||||
| </div> | ||||
|  | ||||
|  | ||||
| %end | ||||
| %end | ||||
| @@ -1,7 +1,7 @@ | ||||
| % layout 'default', title => 'Sme server 2 - IndexT'; | ||||
|  | ||||
| % content_for 'module' => begin | ||||
| <div id='central' class='central welcome-panel'> | ||||
| <div id='central' class='central welcome-panel module'> | ||||
|     <p>Index on line - Welcome page<br> | ||||
|     </p> | ||||
|     <p> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  | ||||
| % content_for 'module' => begin | ||||
|  | ||||
| <div id="central" class="sme-error"> | ||||
| <div id="central " class="sme-error module"> | ||||
|     <p><br>dev<br> What else !!!  | ||||
|         The page you were requesting | ||||
|         "<%= $self->req->url->path || '/' %>" | ||||
| @@ -14,4 +14,4 @@ | ||||
|     </p> | ||||
| </div> | ||||
|  | ||||
| % end | ||||
| % end | ||||
| @@ -55,7 +55,7 @@ | ||||
| 	% end | ||||
|     %} | ||||
|  | ||||
|     <br><hr class=sectionbar /><br> | ||||
|     <!--<br><hr class=sectionbar /><br>--> | ||||
|  | ||||
|     %= form_for 'yum' => (method => 'POST') => begin | ||||
|  | ||||
| @@ -97,4 +97,4 @@ | ||||
|  | ||||
| </div> | ||||
|  | ||||
| % end | ||||
| % end | ||||
| @@ -2,7 +2,7 @@ Summary: Sme server  navigation module : manager 2 | ||||
| %define name smeserver-manager | ||||
| Name: %{name} | ||||
| %define version 11.0.0 | ||||
| %define release 69 | ||||
| %define release 79 | ||||
| Version: %{version} | ||||
| Release: %{release}%{?dist} | ||||
| License: GPL | ||||
| @@ -143,6 +143,51 @@ true | ||||
| %defattr(-,root,root) | ||||
|  | ||||
| %changelog | ||||
| * Wed Apr 30 2025 Brian Read <brianr@koozali.org> 11.0.0-79.sme | ||||
| - Add code in SrvMngr to take note of user panel setting  | ||||
|  | ||||
| * Thu Apr 17 2025 Brian Read <brianr@koozali.org> 11.0.0-78.sme | ||||
| - typo in remoteaccess panel | ||||
| - Fix crash in veiwlogfiles if viewlogfiles key not in DB  | ||||
|  | ||||
| * Sat Apr 12 2025 Brian Read <brianr@koozali.org> 11.0.0-77.sme | ||||
| - Sort out local and pulic access setting in remote panel  [SME: 12988] | ||||
| - caching problem, plus confusion between normal and public setting in sshd / access in DB | ||||
|  | ||||
| * Fri Apr 11 2025 Brian Read <brianr@koozali.org> 11.0.0-76.sme | ||||
| - Restore css for roundcube embedded  [SME: 12987] | ||||
|  | ||||
| * Wed Apr 09 2025 Brian Read <brianr@koozali.org> 11.0.0-75.sme | ||||
| - Move review configuration to behind login [SME: 12984] | ||||
| - Fix crash in port forwarding [SME: 12985] | ||||
|  | ||||
| * Wed Mar 26 2025 Brian Read <brianr@koozali.org> 11.0.0-74.sme | ||||
| - Fix error message and success message format in Local Networking panel [SME: 12969] | ||||
|  | ||||
| * Tue Mar 25 2025 Brian Read <brianr@koozali.org> 11.0.0-73.sme | ||||
| - Some changes to error message format in css. | ||||
| - Fix DB Cache problem with port forwarding panel [SME: 12970] | ||||
| - Fix error and success message display for port forwarding panel [SME: 12969] | ||||
|  | ||||
| * Mon Mar 24 2025 Brian Read <brianr@koozali.org> 11.0.0-72.sme | ||||
| - Remove css files from template structure [SME: 12967] | ||||
| - Rationalise and merge css files  | ||||
| - Adjust some gaps around panels | ||||
| - Remove HR lines | ||||
|  | ||||
| * Thu Mar 20 2025 Brian Read <brianr@koozali.org> 11.0.0-71.sme | ||||
| - Sort out navigation menu error on startup [SME: 12946] | ||||
| - More places where floating panel needed | ||||
| - Adjust floating panel to make space around it the same  | ||||
| - clean up some css | ||||
|  | ||||
| * Wed Mar 19 2025 Brian Read <brianr@koozali.org> 11.0.0-70.sme | ||||
| - Re-cast the default theme - use proper koozali logo image, unwind multiple divs | ||||
| - Enhance responsiveness  | ||||
| - Revert Ibay menu name to Ibays | ||||
| - Remove legacy SM1 button on header | ||||
| - Remove "?" access to wiki help on header | ||||
|  | ||||
| * Mon Mar 17 2025 Brian Read <brianr@koozali.org> 11.0.0-69.sme | ||||
| - Add a total summary report across all existing logs [SME: 12951] | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user