From eac2a360d197c83491794ffbb2ab26124e6d63fa Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Wed, 20 Mar 2019 13:55:25 +0300 Subject: [PATCH 01/43] add min-height for top bar. it doesn't cover buttons when there's no EDIT button in the top bar. --- .../src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css | 3 ++- .../src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css | 2 +- .../src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css index b2f34ba461..7b8cbef3c6 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css @@ -179,7 +179,8 @@ padding: 10px 20px; margin: 0 -15px; text-align: right; - font-size: .8em; } + font-size: .8em; + min-height: 40px; } .docs-page .docs-content .docs-link-btns a { color: #999; } .docs-page .docs-content .docs-link-btns a:hover { diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css index b45d67007f..5ab24a90b6 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css @@ -1 +1 @@ -body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{color:#007bff;text-decoration:none;}.docs-page .docs-sidebar{background:#f5f7f9;padding-right:1rem;position:relative;top:0;left:0;position:fixed;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:270px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{background:none;padding-left:36px;width:100%;background:#e9ecef;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.5rem 0 1rem;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:8px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{line-height:1;border-top-left-radius:0;border-bottom-left-radius:0;padding:.3em .5em .5em;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{position:relative;padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon{position:absolute;top:0;padding:8px 10px;line-height:1;left:16px;background:none;padding:.375rem .75rem;font-size:1rem;line-height:1.5;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 220px);overflow-y:auto;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:.935em;list-style:none;padding:0 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:1px solid #eeeff3;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:1px solid #eeeff3;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.5rem;color:#000;font-weight:700;padding:20px 0 10px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.9rem;opacity:.6;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.15;transition:.4s;font-size:.75rem;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:.5;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{border-bottom:1px solid #f4f5f7;background:#fdfdfd;padding:10px 20px;margin:0 -15px;text-align:right;font-size:.8em;}.docs-page .docs-content .docs-link-btns a{color:#999;}.docs-page .docs-content .docs-link-btns a:hover{color:#444;text-decoration:none;}.docs-page .docs-content .docs-link-btns .twitter{color:#00acee;}.docs-page .docs-content .docs-link-btns .linkedin{color:#0077b5;}.docs-page .docs-content .docs-link-btns .email{color:#5a5a5a;}.docs-page .docs-content .docs-link-btns .share-button{margin-left:10px;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .docs-page-index{min-height:100vh;}.docs-page .docs-page-index #scroll-index{max-height:100vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:0;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:2px solid #007bff;background:none;color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}@media(min-width:1100px){.container{max-width:1080px;}.docs-page .docs-sidebar.dark-sidebar{background:#191919;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{background:#333;border-color:#333;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#444;border-color:#444;color:#ddd;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:1px solid #333;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:1px solid #333;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#f5f7f9;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{position:relative;padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter .filter-icon{left:0;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.5rem;font-weight:700;display:block;margin-right:0;padding:7px 0 10px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}} \ No newline at end of file +body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{color:#007bff;text-decoration:none;}.docs-page .docs-sidebar{background:#f5f7f9;padding-right:1rem;position:relative;top:0;left:0;position:fixed;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:270px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{background:none;padding-left:36px;width:100%;background:#e9ecef;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.5rem 0 1rem;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:8px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{line-height:1;border-top-left-radius:0;border-bottom-left-radius:0;padding:.3em .5em .5em;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{position:relative;padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon{position:absolute;top:0;padding:8px 10px;line-height:1;left:16px;background:none;padding:.375rem .75rem;font-size:1rem;line-height:1.5;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 220px);overflow-y:auto;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:.935em;list-style:none;padding:0 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:1px solid #eeeff3;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:1px solid #eeeff3;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.5rem;color:#000;font-weight:700;padding:20px 0 10px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.9rem;opacity:.6;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.15;transition:.4s;font-size:.75rem;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:.5;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{border-bottom:1px solid #f4f5f7;background:#fdfdfd;padding:10px 20px;margin:0 -15px;text-align:right;font-size:.8em;min-height:40px;}.docs-page .docs-content .docs-link-btns a{color:#999;}.docs-page .docs-content .docs-link-btns a:hover{color:#444;text-decoration:none;}.docs-page .docs-content .docs-link-btns .twitter{color:#00acee;}.docs-page .docs-content .docs-link-btns .linkedin{color:#0077b5;}.docs-page .docs-content .docs-link-btns .email{color:#5a5a5a;}.docs-page .docs-content .docs-link-btns .share-button{margin-left:10px;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .docs-page-index{min-height:100vh;}.docs-page .docs-page-index #scroll-index{max-height:100vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:0;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:2px solid #007bff;background:none;color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}@media(min-width:1100px){.container{max-width:1080px;}.docs-page .docs-sidebar.dark-sidebar{background:#191919;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{background:#333;border-color:#333;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#444;border-color:#444;color:#ddd;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:1px solid #333;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:1px solid #333;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;}.docs-page .docs-sidebar.dark-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#f5f7f9;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{position:relative;padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter .filter-icon{left:0;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.5rem;font-weight:700;display:block;margin-right:0;padding:7px 0 10px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss index 866ac2e08f..a689be25e2 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss @@ -293,6 +293,7 @@ body { margin: 0 -15px; text-align: right; font-size: .8em; + min-height: 40px; a { color: #999; From f698a3b63f4ad1ef9c5f06a8d139a4e38f1b3553 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 10:21:10 +0300 Subject: [PATCH 02/43] DistributedCache cleanup --- .../Volo/Abp/Caching/DistributedCache.cs | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs index 477b0c764b..f65683042b 100644 --- a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs +++ b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Caching.Distributed; @@ -70,11 +69,12 @@ namespace Volo.Abp.Caching } catch (Exception ex) { - if ((bool) hideErrors) + if (hideErrors == true) { Logger.LogException(ex, LogLevel.Warning); return null; } + throw; } @@ -94,11 +94,14 @@ namespace Volo.Abp.Caching try { - cachedBytes = await Cache.GetAsync(NormalizeKey(key), CancellationTokenProvider.FallbackToProvider(token)); + cachedBytes = await Cache.GetAsync( + NormalizeKey(key), + CancellationTokenProvider.FallbackToProvider(token) + ); } catch (Exception ex) { - if ((bool)hideErrors) + if (hideErrors == true) { Logger.LogException(ex, LogLevel.Warning); return null; @@ -185,7 +188,7 @@ namespace Volo.Abp.Caching } catch (Exception ex) { - if ((bool) hideErrors) + if (hideErrors == true) { Logger.LogException(ex, LogLevel.Warning); return; @@ -210,7 +213,7 @@ namespace Volo.Abp.Caching } catch (Exception ex) { - if ((bool)hideErrors) + if (hideErrors == true) { Logger.LogException(ex, LogLevel.Warning); return; @@ -230,7 +233,7 @@ namespace Volo.Abp.Caching } catch (Exception ex) { - if ((bool) hideErrors) + if (hideErrors == true) { Logger.LogException(ex, LogLevel.Warning); return; @@ -250,7 +253,7 @@ namespace Volo.Abp.Caching } catch (Exception ex) { - if ((bool)hideErrors) + if (hideErrors == true) { Logger.LogException(ex, LogLevel.Warning); return; @@ -270,7 +273,7 @@ namespace Volo.Abp.Caching } catch (Exception ex) { - if ((bool) hideErrors) + if (hideErrors == true) { Logger.LogException(ex, LogLevel.Warning); } @@ -289,7 +292,7 @@ namespace Volo.Abp.Caching } catch (Exception ex) { - if ((bool)hideErrors) + if (hideErrors == true) { Logger.LogException(ex, LogLevel.Warning); return; From f127520c74ad71ff6a719ccc6638e6594c432148 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 11:39:29 +0300 Subject: [PATCH 03/43] Add L property to ApplicationService base class. Resolves #903. --- .../Volo.Abp.Ddd.Application.csproj | 1 + .../Services/ApplicationService.cs | 28 +++++++++++++++---- .../Abp/Localization/AbpLocalizationModule.cs | 14 ++++++---- .../Volo/Abp/Localization/DefaultResource.cs | 8 ++++++ 4 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/DefaultResource.cs diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj b/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj index 243c94e66a..cf3cb85cd0 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj +++ b/framework/src/Volo.Abp.Ddd.Application/Volo.Abp.Ddd.Application.csproj @@ -19,6 +19,7 @@ + diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs index 48865f38f2..3b2bbc7582 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs @@ -1,16 +1,18 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; using JetBrains.Annotations; using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; using Volo.Abp.Aspects; using Volo.Abp.Auditing; using Volo.Abp.Authorization; using Volo.Abp.DependencyInjection; using Volo.Abp.Features; using Volo.Abp.Guids; +using Volo.Abp.Localization; using Volo.Abp.MultiTenancy; using Volo.Abp.ObjectMapping; using Volo.Abp.Settings; @@ -21,8 +23,8 @@ using Volo.Abp.Validation; namespace Volo.Abp.Application.Services { - public abstract class ApplicationService : - IApplicationService, + public abstract class ApplicationService : + IApplicationService, IAvoidDuplicateCrossCuttingConcerns, IValidationEnabled, IUnitOfWorkEnabled, @@ -53,6 +55,22 @@ namespace Volo.Abp.Application.Services public IFeatureChecker FeatureChecker { get; set; } + public IStringLocalizerFactory StringLocalizerFactory { get; set; } + + public IStringLocalizer L => _localizer ?? (_localizer = StringLocalizerFactory.Create(LocalizationResource)); + private IStringLocalizer _localizer; + + protected Type LocalizationResource + { + get => _localizationResource; + set + { + _localizationResource = value; + _localizer = null; + } + } + private Type _localizationResource = typeof(DefaultResource); + protected IUnitOfWork CurrentUnitOfWork => UnitOfWorkManager?.Current; protected ILogger Logger => _lazyLogger.Value; diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationModule.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationModule.cs index 23e61e417f..23de1929d6 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationModule.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpLocalizationModule.cs @@ -1,5 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Localization.Resources.AbpValidation; +using Volo.Abp.Localization.Resources.AbpValidation; using Volo.Abp.Modularity; using Volo.Abp.Settings; using Volo.Abp.VirtualFileSystem; @@ -24,9 +23,14 @@ namespace Volo.Abp.Localization Configure(options => { - options.Resources - .Add("en") - .AddVirtualJson("/Localization/Resources/AbpValidation"); + options + .Resources + .Add("en"); + + options + .Resources + .Add("en") + .AddVirtualJson("/Localization/Resources/AbpValidation"); }); } } diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/DefaultResource.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/DefaultResource.cs new file mode 100644 index 0000000000..a491446230 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/DefaultResource.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.Localization +{ + [LocalizationResourceName("Default")] + public class DefaultResource + { + + } +} From 6dfd4e975c6b47c07bda10576078932f422865c0 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 11:39:40 +0300 Subject: [PATCH 04/43] Implement RemoteLanguageProvider --- .../Mvc/Client/RemoteFeatureChecker.cs | 4 +--- .../Mvc/Client/RemoteLanguageProvider.cs | 23 +++++++++++++++++++ ...ApplicationLocalizationConfigurationDto.cs | 5 ++++ .../AbpApplicationConfigurationAppService.cs | 11 ++++++--- 4 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteLanguageProvider.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs index 0643620ec9..f769f512a5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteFeatureChecker.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Features; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteLanguageProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteLanguageProvider.cs new file mode 100644 index 0000000000..02c97c0598 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemoteLanguageProvider.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Localization; + +namespace Volo.Abp.AspNetCore.Mvc.Client +{ + public class RemoteLanguageProvider : ILanguageProvider, ITransientDependency + { + protected ICachedApplicationConfigurationClient ConfigurationClient { get; } + + public RemoteLanguageProvider(ICachedApplicationConfigurationClient configurationClient) + { + ConfigurationClient = configurationClient; + } + + public async Task> GetLanguagesAsync() + { + var configuration = await ConfigurationClient.GetAsync(); + return configuration.Localization.Languages; + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationConfigurationDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationConfigurationDto.cs index 05b5d8c7a6..2667734537 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationConfigurationDto.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationLocalizationConfigurationDto.cs @@ -1,16 +1,21 @@ using System; using System.Collections.Generic; +using Volo.Abp.Localization; namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations { [Serializable] public class ApplicationLocalizationConfigurationDto { + //TODO: Rename to Texts? public Dictionary> Values { get; set; } + public List Languages { get; set; } + public ApplicationLocalizationConfigurationDto() { Values = new Dictionary>(); + Languages = new List(); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs index 70eb04c707..223c83d594 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs @@ -24,6 +24,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations private readonly ISettingProvider _settingProvider; private readonly ISettingDefinitionManager _settingDefinitionManager; private readonly IFeatureDefinitionManager _featureDefinitionManager; + private readonly ILanguageProvider _languageProvider; public AbpApplicationConfigurationAppService( IOptions localizationOptions, @@ -33,7 +34,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations ICurrentUser currentUser, ISettingProvider settingProvider, SettingDefinitionManager settingDefinitionManager, - IFeatureDefinitionManager featureDefinitionManager) + IFeatureDefinitionManager featureDefinitionManager, + ILanguageProvider languageProvider) { _serviceProvider = serviceProvider; _abpAuthorizationPolicyProvider = abpAuthorizationPolicyProvider; @@ -42,6 +44,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations _settingProvider = settingProvider; _settingDefinitionManager = settingDefinitionManager; _featureDefinitionManager = featureDefinitionManager; + _languageProvider = languageProvider; _localizationOptions = localizationOptions.Value; } @@ -53,7 +56,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations { Auth = await GetAuthConfigAsync(), Features = await GetFeaturesConfigAsync(), - Localization = GetLocalizationConfig(), + Localization = await GetLocalizationConfigAsync(), CurrentUser = GetCurrentUser(), Setting = await GetSettingConfigAsync() }; @@ -87,10 +90,12 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations return authConfig; } - protected virtual ApplicationLocalizationConfigurationDto GetLocalizationConfig() + protected virtual async Task GetLocalizationConfigAsync() { var localizationConfig = new ApplicationLocalizationConfigurationDto(); + localizationConfig.Languages.AddRange(await _languageProvider.GetLanguagesAsync()); + foreach (var resource in _localizationOptions.Resources.Values) { var dictionary = new Dictionary(); From fa3fd1a14f930529909ef32f95b067912c3ae34b Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 14:37:25 +0300 Subject: [PATCH 05/43] Directly use resource.ResourceName --- .../AbpApplicationConfigurationAppService.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs index 223c83d594..e6cfafdf48 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs @@ -109,8 +109,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations dictionary[localizedString.Name] = localizedString.Value; } - var resourceName = LocalizationResourceNameAttribute.GetName(resource.ResourceType); - localizationConfig.Values[resourceName] = dictionary; + localizationConfig.Values[resource.ResourceName] = dictionary; } return localizationConfig; From d9433687abace731a6ecc5924de60727d4b66d6c Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 14:51:22 +0300 Subject: [PATCH 06/43] Add accept language header --- .../Client/DynamicProxying/DynamicHttpProxyInterceptor.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index 10d2c98126..21f27cce49 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Net.Http; +using System.Net.Http.Headers; using System.Reflection; using System.Threading; using System.Threading.Tasks; @@ -210,6 +212,9 @@ namespace Volo.Abp.Http.Client.DynamicProxying //CorrelationId requestMessage.Headers.Add(CorrelationIdOptions.HttpHeaderName, CorrelationIdProvider.Get()); + + //TODO: Is that the way we want? Couldn't send the culture (not ui culture) + requestMessage.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue(CultureInfo.CurrentUICulture.Name)); } private string GetConfiguredApiVersion() From dd9fbcda6031aae417f28026e6ff2e31aafb2e0e Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 15:17:06 +0300 Subject: [PATCH 07/43] Move change password to profile service --- .../Volo/Abp/Identity/IIdentityUserAppService.cs | 2 -- .../Volo/Abp/Identity/IProfileAppService.cs | 2 ++ .../Volo/Abp/Identity/IdentityUserAppService.cs | 12 ------------ .../Volo/Abp/Identity/ProfileAppService.cs | 6 ++++++ .../Volo/Abp/Identity/IdentityUserController.cs | 5 ----- .../Volo/Abp/Identity/ProfileController.cs | 10 ++++++---- .../Identity/Shared/ChangePasswordModal.cshtml.cs | 13 ++++++++----- 7 files changed, 22 insertions(+), 28 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs index 8927121bf9..f3e342503c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs @@ -14,7 +14,5 @@ namespace Volo.Abp.Identity Task FindByUsernameAsync(string username); Task FindByEmailAsync(string email); - - Task ChangePasswordAsync(string currentPassword, string newPassword); } } diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IProfileAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IProfileAppService.cs index cb61fc6a82..142b5ad16a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IProfileAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IProfileAppService.cs @@ -8,5 +8,7 @@ namespace Volo.Abp.Identity Task GetAsync(); Task UpdateAsync(UpdateProfileDto input); + + Task ChangePasswordAsync(string currentPassword, string newPassword); } } diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index 251b429d33..ad87b0041f 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -118,18 +118,6 @@ namespace Volo.Abp.Identity ); } - //TODO: Move this to the profile service! - public async Task ChangePasswordAsync(string currentPassword, string newPassword) - { - if (!CurrentUser.Id.HasValue) - { - throw new AbpException("Current user Id is null!"); - } - - var currentUser = await _userManager.GetByIdAsync(CurrentUser.Id.Value); - (await _userManager.ChangePasswordAsync(currentUser, currentPassword, newPassword)).CheckErrors(); - } - private async Task UpdateUserByInput(IdentityUser user, IdentityUserCreateOrUpdateDtoBase input) { (await _userManager.SetEmailAsync(user, input.Email)).CheckErrors(); diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs index a47734cd0c..64a78b81ca 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/ProfileAppService.cs @@ -49,5 +49,11 @@ namespace Volo.Abp.Identity return ObjectMapper.Map(user); } + + public async Task ChangePasswordAsync(string currentPassword, string newPassword) + { + var currentUser = await _userManager.GetByIdAsync(CurrentUser.GetId()); + (await _userManager.ChangePasswordAsync(currentUser, currentPassword, newPassword)).CheckErrors(); + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs index 2728e16fbd..acbc211b0f 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs @@ -64,10 +64,5 @@ namespace Volo.Abp.Identity { return _userAppService.FindByEmailAsync(email); } - - public Task ChangePasswordAsync(string currentPassword, string newPassword) - { - return _userAppService.ChangePasswordAsync(currentPassword, newPassword); - } } } diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/ProfileController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/ProfileController.cs index b1bb8a744c..4547bbdc1c 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/ProfileController.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/ProfileController.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; @@ -27,5 +24,10 @@ namespace Volo.Abp.Identity { return _profileAppService.UpdateAsync(input); } + + public Task ChangePasswordAsync(string currentPassword, string newPassword) + { + return _profileAppService.ChangePasswordAsync(currentPassword, newPassword); + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Shared/ChangePasswordModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Shared/ChangePasswordModal.cshtml.cs index 0e753edd6c..29dda11426 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Shared/ChangePasswordModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Shared/ChangePasswordModal.cshtml.cs @@ -12,13 +12,14 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Shared [BindProperty] public ChangePasswordInfoModel ChangePasswordInfoModel { get; set; } - private readonly IIdentityUserAppService _userAppService; + private readonly IProfileAppService _profileAppService; private readonly IStringLocalizer _localizer; - public ChangePasswordModal(IIdentityUserAppService userAppService, + public ChangePasswordModal( + IProfileAppService profileAppService, IStringLocalizer localizer) { - _userAppService = userAppService; + _profileAppService = profileAppService; _localizer = localizer; } @@ -31,8 +32,10 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Shared throw new UserFriendlyException(_localizer.GetString("Identity.PasswordConfirmationFailed").Value); } - await _userAppService.ChangePasswordAsync(ChangePasswordInfoModel.CurrentPassword, - ChangePasswordInfoModel.NewPassword); + await _profileAppService.ChangePasswordAsync( + ChangePasswordInfoModel.CurrentPassword, + ChangePasswordInfoModel.NewPassword + ); return NoContent(); } From 8a28f5e3031dc3c96d5f99c2827323cef859b461 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 22 Mar 2019 15:59:00 +0300 Subject: [PATCH 08/43] created feature-management modal & added to tenant management --- .../Volo/Abp/FeatureManagement/FeatureDto.cs | 20 +++++ .../Abp/FeatureManagement/FeatureListDto.cs | 9 +++ .../FeatureManagement/IFeatureAppService.cs | 16 ++++ .../Abp/FeatureManagement/UpdateFeatureDto.cs | 13 ++++ .../FeatureManagement/UpdateFeaturesDto.cs | 9 +++ .../FeatureManagement/FeatureAppService.cs | 78 +++++++++++++++++++ .../FeatureManagementModal.cshtml | 60 ++++++++++++++ .../FeatureManagementModal.cshtml.cs | 75 ++++++++++++++++++ .../feature-management-modal.js | 17 ++++ .../Volo.Abp.FeatureManagement.Web.csproj | 14 ++-- ...antManagement.Application.Contracts.csproj | 3 +- ...antManagementApplicationContractsModule.cs | 2 + ...lo.Abp.TenantManagement.Application.csproj | 5 +- .../AbpTenantManagementApplicationModule.cs | 2 + .../AbpTenantManagementWebModule.cs | 2 + .../TenantManagement/Tenants/Index.cshtml | 5 +- .../Volo.Abp.TenantManagement.Web.csproj | 2 +- .../multi-tenancy/views/tenants/index.js | 13 ++++ 18 files changed, 332 insertions(+), 13 deletions(-) create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/FeatureDto.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/FeatureListDto.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/IFeatureAppService.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/UpdateFeatureDto.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/UpdateFeaturesDto.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/FeatureDto.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/FeatureDto.cs new file mode 100644 index 0000000000..75f5722ee8 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/FeatureDto.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using Volo.Abp.Validation.StringValues; + +namespace Volo.Abp.FeatureManagement +{ + public class FeatureDto + { + public string Name { get; set; } + + public string Value { get; set; } + + public string Description { get; set; } + + public IStringValueType ValueType { get; set; } + + public int Depth { get; set; } + + public string ParentName { get; set; } + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/FeatureListDto.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/FeatureListDto.cs new file mode 100644 index 0000000000..ee7bad8d5c --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/FeatureListDto.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Volo.Abp.FeatureManagement +{ + public class FeatureListDto + { + public List Features { get; set; } + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/IFeatureAppService.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/IFeatureAppService.cs new file mode 100644 index 0000000000..a30b2397fa --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/IFeatureAppService.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp.Application.Services; + +namespace Volo.Abp.FeatureManagement +{ + public interface IFeatureAppService : IApplicationService + { + Task GetAsync([NotNull] string providerName, [NotNull] string providerKey); + + Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdateFeaturesDto input); + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/UpdateFeatureDto.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/UpdateFeatureDto.cs new file mode 100644 index 0000000000..26b351ee9e --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/UpdateFeatureDto.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Volo.Abp.FeatureManagement +{ + public class UpdateFeatureDto + { + public string Name { get; set; } + + public string Value { get; set; } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/UpdateFeaturesDto.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/UpdateFeaturesDto.cs new file mode 100644 index 0000000000..3b8fbd2bd7 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/UpdateFeaturesDto.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Volo.Abp.FeatureManagement +{ + public class UpdateFeaturesDto + { + public List Features { get; set; } + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs new file mode 100644 index 0000000000..555ddbf495 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; +using Volo.Abp.Application.Services; +using Volo.Abp.Features; + +namespace Volo.Abp.FeatureManagement +{ + [Authorize] + public class FeatureAppService : ApplicationService, IFeatureAppService + { + protected FeatureManagementOptions Options { get; } + + private readonly IFeatureManager _featureManager; + private readonly IFeatureDefinitionManager _featureDefinitionManager; + private readonly IStringLocalizerFactory _stringLocalizerFactory; + + public FeatureAppService(IFeatureManager featureManager, + IFeatureDefinitionManager featureDefinitionManager, + IStringLocalizerFactory stringLocalizerFactory, + IOptions options) + { + _featureManager = featureManager; + _featureDefinitionManager = featureDefinitionManager; + _stringLocalizerFactory = stringLocalizerFactory; + Options = options.Value; + } + + public async Task GetAsync([NotNull] string providerName, [NotNull] string providerKey) + { + var featureDefinitions = _featureDefinitionManager.GetAll(); + var features = new List(); + + foreach (var featureDefinition in featureDefinitions) + { + features.Add(new FeatureDto + { + Name = featureDefinition.Name, + ValueType = featureDefinition.ValueType, + Description = featureDefinition.Description.Localize(_stringLocalizerFactory), + ParentName = featureDefinition.Parent?.Name, + Value = await _featureManager.GetOrNullAsync(featureDefinition.Name, providerName, providerKey) + }); + } + + SetFeatureDepth(features, providerName, providerKey); + + return new FeatureListDto { Features = features }; + } + + public async Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdateFeaturesDto input) + { + foreach (var feature in input.Features) + { + await _featureManager.SetAsync(feature.Name, feature.Value, providerName, providerKey); + } + } + + private void SetFeatureDepth(List features, string providerName, string providerKey, + FeatureDto parentFeature = null, int depth = 0) + { + foreach (var feature in features) + { + if ((parentFeature == null && feature.ParentName == null) || (parentFeature != null && parentFeature.Name == feature.ParentName)) + { + feature.Depth = depth; + SetFeatureDepth(features, providerName, providerKey, feature, depth + 1); + } + } + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml new file mode 100644 index 0000000000..b52ea264b4 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml @@ -0,0 +1,60 @@ +@page +@using Microsoft.AspNetCore.Mvc.Localization +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@using Volo.Abp.FeatureManagement.Localization +@using Volo.Abp.Validation.StringValues +@using Volo.Abp.FeatureManagement.Web.Pages.FeatureManagement +@model FeatureManagementModal +@inject IHtmlLocalizer L +@{ + Layout = null; +} +
+ + + + + + @for (var i = 0; i < Model.FeatureListDto.Features.Count; i++) + { + var feature = Model.FeatureListDto.Features[i]; +
+ + @feature.Name + + + @if (feature.ValueType is FreeTextStringValueType) + { + + + } + @if (feature.ValueType is SelectionStringValueType) + { + + + } + @if (feature.ValueType is ToggleStringValueType) + { + + + } +
+ } +
+ +
+
+ diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs new file mode 100644 index 0000000000..23e46de955 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; +using Volo.Abp.Validation.StringValues; + +namespace Volo.Abp.FeatureManagement.Web.Pages.FeatureManagement +{ + public class FeatureManagementModal : AbpPageModel + { + [Required] + [HiddenInput] + [BindProperty(SupportsGet = true)] + public string ProviderName { get; set; } + + [Required] + [HiddenInput] + [BindProperty(SupportsGet = true)] + public string ProviderKey { get; set; } + + [BindProperty] + public List Features { get; set; } + + public FeatureListDto FeatureListDto { get; set; } + + private readonly IFeatureAppService _featureAppService; + + public FeatureManagementModal(IFeatureAppService featureAppService) + { + _featureAppService = featureAppService; + } + + public async Task OnGetAsync() + { + FeatureListDto = await _featureAppService.GetAsync(ProviderName, ProviderKey); + } + + public async Task OnPostAsync() + { + var features = new UpdateFeaturesDto + { + Features = Features.Select(f => new UpdateFeatureDto + { + Name = f.Name, + Value = f.Type == nameof(ToggleStringValueType) ? f.BoolValue.ToString() : f.Value + }).ToList() + }; + + await _featureAppService.UpdateAsync(ProviderName, ProviderKey, features); + + return NoContent(); + } + + + public class ProviderInfoViewModel + { + public string ProviderName { get; set; } + + public string ProviderKey { get; set; } + } + + public class FeatureViewModel + { + public string Name { get; set; } + + public string Value { get; set; } + + public bool BoolValue { get; set; } + + public string Type { get; set; } + } + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js new file mode 100644 index 0000000000..74b66f467d --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js @@ -0,0 +1,17 @@ +var abp = abp || {}; +(function ($) { + abp.modals = abp.modals || {}; + + abp.modals.FeatureManagement = function () { + + $('.FeatureValueCheckbox').change(function () { + if (this.checked) { + $(this).val("true"); + } + else { + $(this).val("false"); + } + }); + + }; +})(jQuery); \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj index 3175e1143a..ffe9acd932 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj @@ -11,19 +11,17 @@ - - + + + - - - - + + - - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj index 393c22258c..1371026493 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj @@ -1,4 +1,4 @@ - + @@ -15,6 +15,7 @@ + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs index 50c6aae024..d7f572aaf1 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Application; using Volo.Abp.Authorization.Permissions; +using Volo.Abp.FeatureManagement; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.TenantManagement.Localization; @@ -10,6 +11,7 @@ namespace Volo.Abp.TenantManagement { [DependsOn(typeof(AbpDddApplicationModule))] [DependsOn(typeof(AbpTenantManagementDomainSharedModule))] + [DependsOn(typeof(AbpFeatureManagementApplicationContractsModule))] public class AbpTenantManagementApplicationContractsModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj index e8e0d54a9e..32b8394e2e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj @@ -1,4 +1,4 @@ - + @@ -16,8 +16,9 @@ - + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationModule.cs index ab00b0dc80..1dbba9efd0 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationModule.cs @@ -1,11 +1,13 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AutoMapper; +using Volo.Abp.FeatureManagement; using Volo.Abp.Modularity; namespace Volo.Abp.TenantManagement { [DependsOn(typeof(AbpTenantManagementDomainModule))] [DependsOn(typeof(AbpTenantManagementApplicationContractsModule))] + [DependsOn(typeof(AbpFeatureManagementApplicationModule))] public class AbpTenantManagementApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs index 2267539b09..8ea03c99f3 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs @@ -4,6 +4,7 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AutoMapper; +using Volo.Abp.FeatureManagement; using Volo.Abp.Localization; using Volo.Abp.Localization.Resources.AbpValidation; using Volo.Abp.Modularity; @@ -16,6 +17,7 @@ namespace Volo.Abp.TenantManagement.Web { [DependsOn(typeof(AbpTenantManagementHttpApiModule))] [DependsOn(typeof(AbpAspNetCoreMvcUiBootstrapModule))] + [DependsOn(typeof(AbpFeatureManagementWebModule))] [DependsOn(typeof(AbpAutoMapperModule))] public class AbpTenantManagementWebModule : AbpModule { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml index a5a7bf4a90..95cd3d8331 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml @@ -13,7 +13,10 @@ PageLayout.Content.MenuItemName = TenantManagementMenuNames.Tenants; } @section scripts { - + + + + } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj index 94071ed59e..c542768e8c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj @@ -29,8 +29,8 @@ + - diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/wwwroot/modules/multi-tenancy/views/tenants/index.js b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/wwwroot/modules/multi-tenancy/views/tenants/index.js index bfb44f0bcc..344cc1963d 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/wwwroot/modules/multi-tenancy/views/tenants/index.js +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/wwwroot/modules/multi-tenancy/views/tenants/index.js @@ -5,6 +5,7 @@ var _editModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/EditModal'); var _createModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/CreateModal'); + var _featuresModal = new abp.ModalManager(abp.appPath + 'FeatureManagement/FeatureManagementModal'); $(function () { @@ -27,6 +28,18 @@ }); } }, + { + text: l('Features'), + visible: function () { + return true; //TODO: Check permission + }, + action: function (data) { + _featuresModal.open({ + providerName: 'Tenant', + providerKey: data.record.id + }); + } + }, { text: l('Delete'), visible: function () { return true; }, //TODO: Check permission From 0ad49763615df79fadb600d5c5a092e0855e62f9 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 22 Mar 2019 16:22:30 +0300 Subject: [PATCH 09/43] Fixes #863. Stop encoding article summary --- .../src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml index f8e71cd5dc..5bc115c115 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml @@ -77,7 +77,7 @@ @post.Title

- @(GetShortContent(post.Content)) + @Html.Raw(GetShortContent(post.Content)))

@L["ContinueReading"] From cc00dfac57dc9fd7c4a3f608733f9c1ae4b59e33 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 22 Mar 2019 16:38:48 +0300 Subject: [PATCH 10/43] removed incorrect JS imports --- .../Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml | 1 - .../Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml | 11 +++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml index d7adf3c196..8dc8845982 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml @@ -15,7 +15,6 @@ @section scripts { - } @section styles { diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml index 5bc115c115..32a8016d38 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Index.cshtml @@ -12,7 +12,6 @@ @section scripts { - } @@ -77,7 +76,7 @@ @post.Title

- @Html.Raw(GetShortContent(post.Content))) + @Html.Raw(GetShortContent(post.Content)))

@L["ContinueReading"] @@ -109,13 +108,13 @@
- - + + @if (await Authorization.IsGrantedAsync(BloggingPermissions.Posts.Create)) { - @L["CreateANewPost"] + @L["CreateANewPost"] } - +
@for (var index = 0; index < Model.Posts.Count && index < 3; index++) { From bdfcb6f6e8c5ab2a701f70b478f6da038502f4c3 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 22 Mar 2019 17:28:31 +0300 Subject: [PATCH 11/43] added AbpFeatureManagementDomainTenantManagementModule And policy --- .../Abp/FeatureManagement/FeatureAppService.cs | 15 +++++++++++++++ .../AbpFeatureManagementDomainModule.cs | 1 - .../FeatureManagementOptions.cs | 6 +++++- .../Volo.Abp.TenantManagement.sln | 13 ++++++++++--- ...reManagement.Domain.TenantManagement.csproj | 12 ++++++++++++ ...reManagementDomainTenantManagementModule.cs | 18 ++++++++++++++++++ .../TenantFeatureManagementProvider.cs | 2 +- ...ntManagementPermissionDefinitionProvider.cs | 11 ++++++----- .../Localization/ApplicationContracts/en.json | 3 ++- .../Localization/ApplicationContracts/tr.json | 3 ++- .../TenantManagementPermissions.cs | 1 + 11 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj create mode 100644 modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs rename modules/{feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement => tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement}/TenantFeatureManagementProvider.cs (94%) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs index 555ddbf495..b8b6c33d7c 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs @@ -34,6 +34,8 @@ namespace Volo.Abp.FeatureManagement public async Task GetAsync([NotNull] string providerName, [NotNull] string providerKey) { + await CheckProviderPolicy(providerName); + var featureDefinitions = _featureDefinitionManager.GetAll(); var features = new List(); @@ -56,6 +58,8 @@ namespace Volo.Abp.FeatureManagement public async Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdateFeaturesDto input) { + await CheckProviderPolicy(providerName); + foreach (var feature in input.Features) { await _featureManager.SetAsync(feature.Name, feature.Value, providerName, providerKey); @@ -74,5 +78,16 @@ namespace Volo.Abp.FeatureManagement } } } + + protected virtual async Task CheckProviderPolicy(string providerName) + { + var policyName = Options.ProviderPolicies.GetOrDefault(providerName); + if (policyName.IsNullOrEmpty()) + { + throw new AbpException($"No policy defined to get/set permissions for the provider '{policyName}'. Use {nameof(FeatureManagementOptions)} to map the policy."); + } + + await AuthorizationService.CheckAsync(policyName); + } } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs index 515db2b03f..54f5364c18 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs @@ -21,7 +21,6 @@ namespace Volo.Abp.FeatureManagement { options.Providers.Add(); options.Providers.Add(); - options.Providers.Add(); }); Configure(options => diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementOptions.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementOptions.cs index 0599c3e4c5..b671c475ec 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementOptions.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementOptions.cs @@ -1,4 +1,5 @@ -using Volo.Abp.Collections; +using System.Collections.Generic; +using Volo.Abp.Collections; namespace Volo.Abp.FeatureManagement { @@ -6,9 +7,12 @@ namespace Volo.Abp.FeatureManagement { public ITypeList Providers { get; } + public Dictionary ProviderPolicies { get; } + public FeatureManagementOptions() { Providers = new TypeList(); + ProviderPolicies = new Dictionary(); } } } \ No newline at end of file diff --git a/modules/tenant-management/Volo.Abp.TenantManagement.sln b/modules/tenant-management/Volo.Abp.TenantManagement.sln index 20fd21a531..9e1f76c980 100644 --- a/modules/tenant-management/Volo.Abp.TenantManagement.sln +++ b/modules/tenant-management/Volo.Abp.TenantManagement.sln @@ -25,14 +25,16 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.W EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.Application.Tests", "test\Volo.Abp.TenantManagement.Application.Tests\Volo.Abp.TenantManagement.Application.Tests.csproj", "{72445B2D-07FA-4A35-A3D6-FF4ACE299BF4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.EntityFrameworkCore.Tests", "test\Volo.Abp.TenantManagement.EntityFrameworkCore.Tests\Volo.Abp.TenantManagement.EntityFrameworkCore.Tests.csproj", "{A2BB8897-EBDB-46BB-B885-F8635B21F376}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.EntityFrameworkCore.Tests", "test\Volo.Abp.TenantManagement.EntityFrameworkCore.Tests\Volo.Abp.TenantManagement.EntityFrameworkCore.Tests.csproj", "{A2BB8897-EBDB-46BB-B885-F8635B21F376}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.MongoDB", "src\Volo.Abp.TenantManagement.MongoDB\Volo.Abp.TenantManagement.MongoDB.csproj", "{ED95242E-3C31-4A89-9C62-93B306EFEB15}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.MongoDB", "src\Volo.Abp.TenantManagement.MongoDB\Volo.Abp.TenantManagement.MongoDB.csproj", "{ED95242E-3C31-4A89-9C62-93B306EFEB15}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.MongoDB.Tests", "test\Volo.Abp.TenantManagement.MongoDB.Tests\Volo.Abp.TenantManagement.MongoDB.Tests.csproj", "{F75B4C54-A5F1-4101-99F5-A5B868A5146B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.MongoDB.Tests", "test\Volo.Abp.TenantManagement.MongoDB.Tests\Volo.Abp.TenantManagement.MongoDB.Tests.csproj", "{F75B4C54-A5F1-4101-99F5-A5B868A5146B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.TestBase", "test\Volo.Abp.TenantManagement.TestBase\Volo.Abp.TenantManagement.TestBase.csproj", "{C3BAD6E8-00CD-4283-9416-64287BB5B265}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.FeatureManagement.Domain.TenantManagement", "src\Volo.Abp.FeatureManagement.Domain.TenantManagement\Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj", "{7A5E7998-62CF-418B-A452-0FCB4CB853CC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -91,6 +93,10 @@ Global {C3BAD6E8-00CD-4283-9416-64287BB5B265}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3BAD6E8-00CD-4283-9416-64287BB5B265}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3BAD6E8-00CD-4283-9416-64287BB5B265}.Release|Any CPU.Build.0 = Release|Any CPU + {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -109,6 +115,7 @@ Global {ED95242E-3C31-4A89-9C62-93B306EFEB15} = {799CA525-4748-421A-9892-05C68BB2FA13} {F75B4C54-A5F1-4101-99F5-A5B868A5146B} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} {C3BAD6E8-00CD-4283-9416-64287BB5B265} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} + {7A5E7998-62CF-418B-A452-0FCB4CB853CC} = {799CA525-4748-421A-9892-05C68BB2FA13} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7C258726-2CE0-44D3-A2D7-71812E8F505C} diff --git a/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj new file mode 100644 index 0000000000..94c6905fec --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj @@ -0,0 +1,12 @@ + + + + netcoreapp2.2 + + + + + + + + diff --git a/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs new file mode 100644 index 0000000000..ac698c913c --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs @@ -0,0 +1,18 @@ +using Volo.Abp.Features; +using Volo.Abp.Modularity; + +namespace Volo.Abp.FeatureManagement.TenantManagement +{ + public class AbpFeatureManagementDomainTenantManagementModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Providers.Add(); + + options.ProviderPolicies[TenantFeatureValueProvider.ProviderName] = "AbpTenantManagement.Tenants.ManageFeatures"; + }); + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/TenantFeatureManagementProvider.cs b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/TenantFeatureManagementProvider.cs similarity index 94% rename from modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/TenantFeatureManagementProvider.cs rename to modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/TenantFeatureManagementProvider.cs index b03fc43d8a..e625e47880 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/TenantFeatureManagementProvider.cs +++ b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/TenantFeatureManagementProvider.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.FeatureManagement protected ICurrentTenant CurrentTenant { get; } public TenantFeatureManagementProvider( - IFeatureManagementStore store, + IFeatureManagementStore store, ICurrentTenant currentTenant) : base(store) { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs index 822de19ad8..32aae64598 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementPermissionDefinitionProvider.cs @@ -8,12 +8,13 @@ namespace Volo.Abp.TenantManagement { public override void Define(IPermissionDefinitionContext context) { - var identityGroup = context.AddGroup(TenantManagementPermissions.GroupName, L("Permission:TenantManagement")); + var tenantManagementGroup = context.AddGroup(TenantManagementPermissions.GroupName, L("Permission:TenantManagement")); - var rolesPermission = identityGroup.AddPermission(TenantManagementPermissions.Tenants.Default, L("Permission:TenantManagement")); - rolesPermission.AddChild(TenantManagementPermissions.Tenants.Create, L("Permission:Create")); - rolesPermission.AddChild(TenantManagementPermissions.Tenants.Update, L("Permission:Edit")); - rolesPermission.AddChild(TenantManagementPermissions.Tenants.Delete, L("Permission:Delete")); + var tenantsPermission = tenantManagementGroup.AddPermission(TenantManagementPermissions.Tenants.Default, L("Permission:TenantManagement")); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Create, L("Permission:Create")); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Update, L("Permission:Edit")); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Delete, L("Permission:Delete")); + tenantsPermission.AddChild(TenantManagementPermissions.Tenants.ManageFeatures, L("Permission:ManageFeatures")); } private static LocalizableString L(string name) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json index 92a555e5a7..c153af5e10 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/en.json @@ -4,6 +4,7 @@ "Permission:TenantManagement": "Tenant management", "Permission:Create": "Create", "Permission:Edit": "Edit", - "Permission:Delete": "Delete" + "Permission:Delete": "Delete", + "Permission:ManageFeatures": "Manage features" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json index a192048e78..8ff9d2c2d5 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/Localization/ApplicationContracts/tr.json @@ -4,6 +4,7 @@ "Permission:TenantManagement": "Müşteri yönetimi", "Permission:Create": "Oluşturma", "Permission:Edit": "Düzenleme", - "Permission:Delete": "Silme" + "Permission:Delete": "Silme", + "Permission:ManageFeatures": "Özellikleri yönet" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantManagementPermissions.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantManagementPermissions.cs index bc30e65e1f..622c52d338 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantManagementPermissions.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantManagementPermissions.cs @@ -10,6 +10,7 @@ public const string Create = Default + ".Create"; public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; + public const string ManageFeatures = Default + ".ManageFeatures"; } } } \ No newline at end of file From 9848b71e1fcb064488bbcca8864697bf7fc4d8d9 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 21:13:54 +0300 Subject: [PATCH 12/43] Mark StringValueTypeBase serializable --- .../Volo/Abp/Validation/StringValues/StringValueTypeBase.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/StringValues/StringValueTypeBase.cs b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/StringValues/StringValueTypeBase.cs index c6fd80fc13..db7e2e5861 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/StringValues/StringValueTypeBase.cs +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/StringValues/StringValueTypeBase.cs @@ -1,7 +1,9 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace Volo.Abp.Validation.StringValues { + [Serializable] public abstract class StringValueTypeBase : IStringValueType { public virtual string Name => ValueValidatorAttribute.GetName(GetType()); From c6f8c17ff805e0dbdc02fe2e1753f5b514f952c1 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 21:23:30 +0300 Subject: [PATCH 13/43] Increment version to 0.15. --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index 380276a7e1..0e6a922473 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 0.14.0 + 0.15.0 $(NoWarn);CS1591 https://abp.io/assets/abp_nupkg.png https://abp.io From c734d991f569f7b3ce8f15d5993302bd9ca5062c Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 21:37:24 +0300 Subject: [PATCH 14/43] Add new packages --- nupkg/common.ps1 | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index 8a166107e1..787b96e07c 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -8,6 +8,7 @@ $solutions = ( "modules/users", "modules/setting-management", "modules/permission-management", + "modules/feature-management", "modules/tenant-management", "modules/identity", "modules/identityserver", @@ -114,6 +115,17 @@ $projects = ( "modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client", "modules/permission-management/src/Volo.Abp.PermissionManagement.Web", + # modules/feature-management + "modules/feature-management/src/Volo.Abp.TenantManagement.Domain.Shared", + "modules/feature-management/src/Volo.Abp.TenantManagement.Domain", + "modules/feature-management/src/Volo.Abp.TenantManagement.Application.Contracts", + "modules/feature-management/src/Volo.Abp.TenantManagement.Application", + "modules/feature-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore", + "modules/feature-management/src/Volo.Abp.TenantManagement.MongoDB", + "modules/feature-management/src/Volo.Abp.TenantManagement.HttpApi", + "modules/feature-management/src/Volo.Abp.TenantManagement.HttpApi.Client", + "modules/feature-management/src/Volo.Abp.TenantManagement.Web", + # modules/tenant-management "modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared", "modules/tenant-management/src/Volo.Abp.TenantManagement.Domain", From 0ebb8c76d7d76740208e3e95aced706877abd91b Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 21:38:20 +0300 Subject: [PATCH 15/43] Move TenantFeatureManagementProvider back to Volo.Abp.FeatureManagement package --- build-all.ps1 | 1 + .../AbpFeatureManagementDomainModule.cs | 4 ++++ .../TenantFeatureManagementProvider.cs | 0 .../Volo.Abp.TenantManagement.sln | 7 ------- ...reManagement.Domain.TenantManagement.csproj | 12 ------------ ...reManagementDomainTenantManagementModule.cs | 18 ------------------ 6 files changed, 5 insertions(+), 37 deletions(-) rename modules/{tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement => feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement}/TenantFeatureManagementProvider.cs (100%) delete mode 100644 modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj delete mode 100644 modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs diff --git a/build-all.ps1 b/build-all.ps1 index 5d800ebdf9..907f6816bf 100644 --- a/build-all.ps1 +++ b/build-all.ps1 @@ -9,6 +9,7 @@ $solutionPaths = ( "modules/users", "modules/permission-management", "modules/setting-management", + "modules/feature-management", "modules/identity", "modules/identityserver", "modules/tenant-management", diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs index 54f5364c18..0958746237 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainModule.cs @@ -21,6 +21,10 @@ namespace Volo.Abp.FeatureManagement { options.Providers.Add(); options.Providers.Add(); + + //TODO: Should be moved to the Tenant Management module + options.Providers.Add(); + options.ProviderPolicies[TenantFeatureValueProvider.ProviderName] = "AbpTenantManagement.Tenants.ManageFeatures"; }); Configure(options => diff --git a/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/TenantFeatureManagementProvider.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/TenantFeatureManagementProvider.cs similarity index 100% rename from modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/TenantFeatureManagementProvider.cs rename to modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/TenantFeatureManagementProvider.cs diff --git a/modules/tenant-management/Volo.Abp.TenantManagement.sln b/modules/tenant-management/Volo.Abp.TenantManagement.sln index 9e1f76c980..82e976220f 100644 --- a/modules/tenant-management/Volo.Abp.TenantManagement.sln +++ b/modules/tenant-management/Volo.Abp.TenantManagement.sln @@ -33,8 +33,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.M EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.TestBase", "test\Volo.Abp.TenantManagement.TestBase\Volo.Abp.TenantManagement.TestBase.csproj", "{C3BAD6E8-00CD-4283-9416-64287BB5B265}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.FeatureManagement.Domain.TenantManagement", "src\Volo.Abp.FeatureManagement.Domain.TenantManagement\Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj", "{7A5E7998-62CF-418B-A452-0FCB4CB853CC}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -93,10 +91,6 @@ Global {C3BAD6E8-00CD-4283-9416-64287BB5B265}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3BAD6E8-00CD-4283-9416-64287BB5B265}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3BAD6E8-00CD-4283-9416-64287BB5B265}.Release|Any CPU.Build.0 = Release|Any CPU - {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7A5E7998-62CF-418B-A452-0FCB4CB853CC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -115,7 +109,6 @@ Global {ED95242E-3C31-4A89-9C62-93B306EFEB15} = {799CA525-4748-421A-9892-05C68BB2FA13} {F75B4C54-A5F1-4101-99F5-A5B868A5146B} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} {C3BAD6E8-00CD-4283-9416-64287BB5B265} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} - {7A5E7998-62CF-418B-A452-0FCB4CB853CC} = {799CA525-4748-421A-9892-05C68BB2FA13} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7C258726-2CE0-44D3-A2D7-71812E8F505C} diff --git a/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj deleted file mode 100644 index 94c6905fec..0000000000 --- a/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo.Abp.FeatureManagement.Domain.TenantManagement.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - netcoreapp2.2 - - - - - - - - diff --git a/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs b/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs deleted file mode 100644 index ac698c913c..0000000000 --- a/modules/tenant-management/src/Volo.Abp.FeatureManagement.Domain.TenantManagement/Volo/Abp/FeatureManagement/TenantManagement/AbpFeatureManagementDomainTenantManagementModule.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Volo.Abp.Features; -using Volo.Abp.Modularity; - -namespace Volo.Abp.FeatureManagement.TenantManagement -{ - public class AbpFeatureManagementDomainTenantManagementModule : AbpModule - { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.Providers.Add(); - - options.ProviderPolicies[TenantFeatureValueProvider.ProviderName] = "AbpTenantManagement.Tenants.ManageFeatures"; - }); - } - } -} From cdeb68b4e984a69e15fce5fcea3652f58b687cb3 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 21:40:39 +0300 Subject: [PATCH 16/43] Remove unnecessary dependencies --- .../Volo.Abp.TenantManagement.Application.Contracts.csproj | 2 -- .../AbpTenantManagementApplicationContractsModule.cs | 6 +----- .../Volo.Abp.TenantManagement.Application.csproj | 2 -- .../AbpTenantManagementApplicationModule.cs | 5 +---- 4 files changed, 2 insertions(+), 13 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj index 1371026493..f99d3f8609 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.csproj @@ -15,8 +15,6 @@ - - diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs index d7f572aaf1..9ca2c82bdb 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/AbpTenantManagementApplicationContractsModule.cs @@ -1,7 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Application; -using Volo.Abp.Authorization.Permissions; -using Volo.Abp.FeatureManagement; +using Volo.Abp.Application; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.TenantManagement.Localization; @@ -11,7 +8,6 @@ namespace Volo.Abp.TenantManagement { [DependsOn(typeof(AbpDddApplicationModule))] [DependsOn(typeof(AbpTenantManagementDomainSharedModule))] - [DependsOn(typeof(AbpFeatureManagementApplicationContractsModule))] public class AbpTenantManagementApplicationContractsModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj index 32b8394e2e..bd5926a785 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj @@ -17,8 +17,6 @@ - - diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationModule.cs index 1dbba9efd0..8bed38c5ec 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationModule.cs @@ -1,13 +1,10 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.AutoMapper; -using Volo.Abp.FeatureManagement; +using Volo.Abp.AutoMapper; using Volo.Abp.Modularity; namespace Volo.Abp.TenantManagement { [DependsOn(typeof(AbpTenantManagementDomainModule))] [DependsOn(typeof(AbpTenantManagementApplicationContractsModule))] - [DependsOn(typeof(AbpFeatureManagementApplicationModule))] public class AbpTenantManagementApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) From 53567bef16bb24634aa0b5232ce12f9b5772c8c4 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 22 Mar 2019 21:43:58 +0300 Subject: [PATCH 17/43] Add FeatureManagement packages --- nupkg/common.ps1 | 18 +++++++++--------- nupkg/common.sh | 12 ++++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index 787b96e07c..d7ce2ce572 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -116,15 +116,15 @@ $projects = ( "modules/permission-management/src/Volo.Abp.PermissionManagement.Web", # modules/feature-management - "modules/feature-management/src/Volo.Abp.TenantManagement.Domain.Shared", - "modules/feature-management/src/Volo.Abp.TenantManagement.Domain", - "modules/feature-management/src/Volo.Abp.TenantManagement.Application.Contracts", - "modules/feature-management/src/Volo.Abp.TenantManagement.Application", - "modules/feature-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore", - "modules/feature-management/src/Volo.Abp.TenantManagement.MongoDB", - "modules/feature-management/src/Volo.Abp.TenantManagement.HttpApi", - "modules/feature-management/src/Volo.Abp.TenantManagement.HttpApi.Client", - "modules/feature-management/src/Volo.Abp.TenantManagement.Web", + "modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared", + "modules/feature-management/src/Volo.Abp.FeatureManagement.Domain", + "modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts", + "modules/feature-management/src/Volo.Abp.FeatureManagement.Application", + "modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore", + "modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB", + "modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi", + "modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client", + "modules/feature-management/src/Volo.Abp.FeatureManagement.Web", # modules/tenant-management "modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared", diff --git a/nupkg/common.sh b/nupkg/common.sh index 1a553f58de..61537b3ec3 100644 --- a/nupkg/common.sh +++ b/nupkg/common.sh @@ -10,6 +10,7 @@ solutions=( "modules/users" "modules/setting-management" "modules/permission-management" + "modules/feature-management" "modules/tenant-management" "modules/identity" "modules/identityserver" @@ -115,6 +116,17 @@ projects=( "modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client" "modules/permission-management/src/Volo.Abp.PermissionManagement.Web" + # modules/feature-management + "modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared" + "modules/feature-management/src/Volo.Abp.FeatureManagement.Domain" + "modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts" + "modules/feature-management/src/Volo.Abp.FeatureManagement.Application" + "modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore" + "modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB" + "modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi" + "modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client" + "modules/feature-management/src/Volo.Abp.FeatureManagement.Web" + # modules/tenant-management "modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared" "modules/tenant-management/src/Volo.Abp.TenantManagement.Domain" From 43456f2df7dfa68405b3a78c20a7885e1495900a Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Sun, 24 Mar 2019 13:02:36 +0300 Subject: [PATCH 18/43] Fix GitHub naming. --- .../Pages/Shared/Components/Header/Default.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abp_io/src/Volo.AbpWebSite.Web/Pages/Shared/Components/Header/Default.cshtml b/abp_io/src/Volo.AbpWebSite.Web/Pages/Shared/Components/Header/Default.cshtml index 8c25d6592b..f5adbc9a07 100644 --- a/abp_io/src/Volo.AbpWebSite.Web/Pages/Shared/Components/Header/Default.cshtml +++ b/abp_io/src/Volo.AbpWebSite.Web/Pages/Shared/Components/Header/Default.cshtml @@ -23,7 +23,7 @@ Blog