*Yr4W_34$GmVIo8OLWjcZK4a0`+Yv-!*}9
zBwKm;DAsA(nDI-`iH@;`=gP+m{lgFLHK3m$W@?)&dGhDA_Z2xOzI0$p(ZJtH$vCxE
zj>+kYNBJzs-TlSx!tSH}%I9fQv)mc!C7X0bKlZv4f&}C3+O-4k7AmVO|KYZ9ydP%(N1^uisV8y;~p`x4qFXD?!_OyN9=w(Od6W;
zGrT?G;l2v@Ob5k^8w<9w%Jbjb^|H}PYKo}I~bobd!XrTbzp2Zp~H8lgJ)I3?l&(bDiWf8gE&6b
z>)9GB=Iu-6%I((+>=jGP>CzD8c0oWITFZGgM!Q7|JrUYq4#^Y(vuDu-a>OWDa4Y4}
z5a_*lW#IL_aVf8L+Ty}c&2VojLEIA-;eQK6Wo?xAuK>i;1VWx3c=!s2;j_*iRHOsb*>6-CgcYP+Ho=L@XLd*j~2ln-;WHg)|cCixksH$K={5rGSD@yB%LI|(NCc8
z1Er8H+QO)~S~K{g?nH|2dB8SKs)BxQ?%G}}o*LV!NG2m*TmR|pWj~g`>)ClJCE#F$
zcj)fBg(dKOKmc$Cy}IRlasngIR>z~kP&WW~9cC951{AKmnZ~ZMsqup6QQf7J0T1;C
zK9*Qd5*(HxW=tl|RfjO>nkoW#AU3t>JkuzWxy4-l?xmTv15_r1X@p@dz^{&j&;{Mq
z$^0$0q&y?kbdZh)kZ+NfXfqLTG}Q^j>qHlUH4VEK`3y^-z6Y<6O88Hf4v^;}!{t-a
zDWg;znYu%6zA1~A5~w?fxO~i8-Ib(^02{c4pXjhDI^2
zXB1LP4dvWuc%PXQ{r!d#6>${rm+M8EJM8yf#!H$Kp8AxwUXm5`7Tu-J$mHeCG>vw|&Ay415}_1w&*9K8+2d3v1N+@a$|820o4u60Tj@u&kI!~q2V9X;
z>tMvQDI|O$#m+m2O**ZHq`_{#8)ry6`&5s~2k{O4Du16Fn0P;&_(0!e5%Bel){nU0
zJX~<8U6hoI%yx}qGY_1Tq7YKDJ)ETOCs&W)TiCrK*1%DE*vXdD-7hwE*LUgjeHRM`
z&@pkhTi>m#Kc+QIK+2Ybn9-sFVKNHyIgfob4H_77yYh))Rq$7Pw|+aD6&yZ|ki9
z8Zb6s{oBt1G+PgfIcxd}{m@~1nzhe;LH)5;!gS8@ddyabpdBc?7JVl?tS+<#bPSMT
z2@0uYdsWN(;Ww)n-PlA-0r+62@bYkEa`k{0s})fJgYZ#5=DmIdEvok7aZJRi{w-|}
zkea&6X}ZA3b7&vbDb7)v8CuI(+zzSf3z&P2eOrPNP?D~
zf
zn0@)0h;~5F&BG5vOFU!=woW&ZSl~nrs{?1w>nWfW_dnpTd
z4qvLDYJ*ft>Sp%M(^_xCZpNBnc66JX}A|ZL9IENM`U>`ph7d<+RQiI}@E8Y)70s
zMC*_&))}GlmR}@{v9*nm)29-=rn`Q$rc^4G)GVQHlTr6BpGxtHuU(8AF7Ffh54?5w
zj+EYT9>x)PWL-iQ@RNmT?R+|c@=FOmj)5Za6_
z@DkVy4l^L>Z3#SI@s_eVwd3D)<^Ivq8a~J{|4mhOL^<7M4D8){ut;GIqqn`oqCk|x
pNh;Wa$C0(mdpqYz&F>xK-uVD=DT5%Jzh8ZT#aXmjr70%*{{RacS`YvL
diff --git a/src/Umbraco.Web.UI/umbraco_client/ui/ui-lightness/images/ui-icons_ffd27a_256x240.png b/src/Umbraco.Web.UI/umbraco_client/ui/ui-lightness/images/ui-icons_ffd27a_256x240.png
deleted file mode 100644
index e117effa3dca24e7978cfc5f8b967f661e81044f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4369
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
diff --git a/src/Umbraco.Web.UI/umbraco_client/ui/ui-lightness/jquery-ui.custom.css b/src/Umbraco.Web.UI/umbraco_client/ui/ui-lightness/jquery-ui.custom.css
deleted file mode 100644
index a84cea6759..0000000000
--- a/src/Umbraco.Web.UI/umbraco_client/ui/ui-lightness/jquery-ui.custom.css
+++ /dev/null
@@ -1,565 +0,0 @@
-/*!
- * jQuery UI CSS Framework 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
-.ui-helper-clearfix:after { clear: both; }
-.ui-helper-clearfix { zoom: 1; }
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*!
- * jQuery UI CSS Framework 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
-.ui-widget-content a { color: #333333; }
-.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
-.ui-widget-header a { color: #ffffff; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
-.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*!
- * jQuery UI Resizable 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!
- * jQuery UI Selectable 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*!
- * jQuery UI Accordion 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*!
- * jQuery UI Autocomplete 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.21
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
- list-style:none;
- padding: 2px;
- margin: 0;
- display:block;
- float: left;
-}
-.ui-menu .ui-menu {
- margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
- margin:0;
- padding: 0;
- zoom: 1;
- float: left;
- clear: left;
- width: 100%;
-}
-.ui-menu .ui-menu-item a {
- text-decoration:none;
- display:block;
- padding:.2em .4em;
- line-height:1.5;
- zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
- font-weight: normal;
- margin: -1px;
-}
-/*!
- * jQuery UI Button 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; }
-button.ui-button-icons-only { width: 3.7em; }
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4; }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*!
- * jQuery UI Dialog 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*!
- * jQuery UI Slider 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*!
- * jQuery UI Tabs 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
-/*!
- * jQuery UI Datepicker 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
- display: none; /*sorry for IE5*/
- display/**/: block; /*sorry for IE5*/
- position: absolute; /*must have*/
- z-index: -1; /*must have*/
- filter: mask(); /*must have*/
- top: -4px; /*must have*/
- left: -4px; /*must have*/
- width: 200px; /*must have*/
- height: 200px; /*must have*/
-}/*!
- * jQuery UI Progressbar 1.8.21
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index df3ffd8f64..032c4fb33c 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -1463,13 +1463,6 @@
assemblyBrowser.aspx
-
- autoDoc.aspx
- ASPXCodeBehind
-
-
- autoDoc.aspx
-
editPackage.aspx
ASPXCodeBehind
@@ -1510,13 +1503,6 @@
notifications.aspx
-
- RegexWs.aspx
- ASPXCodeBehind
-
-
- RegexWs.aspx
-
rollBack.aspx
ASPXCodeBehind
@@ -1538,13 +1524,6 @@
viewAuditTrail.aspx
-
- language.aspx
- ASPXCodeBehind
-
-
- language.aspx
-
EditMemberGroup.aspx
ASPXCodeBehind
@@ -1887,7 +1866,6 @@
ASPXCodeBehind
-
ASPXCodeBehind
@@ -1920,13 +1898,9 @@
-
-
- ASPXCodeBehind
-
Form
@@ -1981,10 +1955,6 @@
ResXFileCodeGenerator
Strings.Designer.cs
-
- language.aspx.cs
- Designer
-
ResXFileCodeGenerator
Resources.Designer.cs
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/autoDoc.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/autoDoc.aspx
deleted file mode 100644
index 5fb02ef834..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/autoDoc.aspx
+++ /dev/null
@@ -1,23 +0,0 @@
-<%@ Page language="c#" Codebehind="autoDoc.aspx.cs" AutoEventWireup="True" Inherits="umbraco.developer.autoDoc" %>
-
-
-
- autoDoc
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/autoDoc.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/autoDoc.aspx.cs
deleted file mode 100644
index 3484a4504e..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/autoDoc.aspx.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Web;
-using System.Web.SessionState;
-using System.Web.UI;
-using System.Web.UI.WebControls;
-using System.Web.UI.HtmlControls;
-using System.Linq;
-using umbraco.BusinessLogic;
-
-namespace umbraco.developer
-{
- ///
- /// Summary description for autoDoc.
- ///
- public partial class autoDoc : BasePages.UmbracoEnsuredPage
- {
- public autoDoc()
- {
- CurrentApp = DefaultApps.developer.ToString();
- }
-
- protected void Page_Load(object sender, EventArgs e)
- {
- // Put user code to initialize the page here
- foreach(var dt in cms.businesslogic.web.DocumentType.GetAllAsList())
- {
- LabelDoc.Text +=
- "" + dt.Text + "
Id: " + dt.Id.ToString() + ", Alias: " + dt.Alias + ")
";
- if (dt.PropertyTypes.Count > 0)
- LabelDoc.Text += "";
- foreach (var pt in dt.PropertyTypes)
- LabelDoc.Text +=
- "
" + pt.Id.ToString() + ", " + pt.Alias + ", " + pt.Name + "
";
- if (dt.getVirtualTabs.Length > 0)
- LabelDoc.Text += "";
- foreach (var t in dt.getVirtualTabs.ToList())
- LabelDoc.Text +=
- "
" + t.Id.ToString() + ", " + t.Caption + "
";
- if (dt.AllowedChildContentTypeIDs.Length > 0)
- LabelDoc.Text += "";
- foreach (var child in dt.AllowedChildContentTypeIDs.ToList())
- {
- var contentType = new cms.businesslogic.ContentType(child);
- LabelDoc.Text +=
- "
" + contentType.Id.ToString() + ", " + contentType.Text + "
";
- }
-
- LabelDoc.Text += "
";
- }
- }
-
- }
-}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/autoDoc.aspx.designer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/autoDoc.aspx.designer.cs
deleted file mode 100644
index 5ace170f12..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/autoDoc.aspx.designer.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.42
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace umbraco.developer {
-
- public partial class autoDoc {
- protected System.Web.UI.HtmlControls.HtmlForm Form1;
- protected System.Web.UI.WebControls.Label LabelDoc;
- }
-}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/RegexWs.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/RegexWs.aspx
deleted file mode 100644
index 6dd0954156..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/RegexWs.aspx
+++ /dev/null
@@ -1,56 +0,0 @@
-<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="../masterpages/umbracoDialog.Master" CodeBehind="RegexWs.aspx.cs" Inherits="umbraco.presentation.dialogs.RegexWs" %>
-<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %>
-<%@ Register TagPrefix="umb" Namespace="ClientDependency.Core.Controls" Assembly="ClientDependency.Core" %>
-
-
-
-
-
-
-
-
- <%= umbraco.ui.Text("defaultdialogs", "regexSearchHelp")%>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/RegexWs.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/RegexWs.aspx.cs
deleted file mode 100644
index 935ffd129c..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/RegexWs.aspx.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System;
-using System.Data;
-using System.Configuration;
-using System.Collections;
-using System.Web;
-using System.Web.Security;
-using System.Web.UI;
-using System.Web.UI.WebControls;
-using System.Web.UI.WebControls.WebParts;
-using System.Web.UI.HtmlControls;
-
-namespace umbraco.presentation.dialogs {
- public partial class RegexWs : BasePages.UmbracoEnsuredPage {
- private DataSet ds = new DataSet();
-
- public RegexWs()
- {
- CurrentApp = BusinessLogic.DefaultApps.settings.ToString();
-
- }
-
- protected void Page_Load(object sender, EventArgs e) {
- pp_search.Text = ui.Text("general", "search");
- bt_search.Text = ui.Text("general", "search");
- }
-
- protected void findRegex(object sender, EventArgs e) {
- regexPanel.Visible = true;
-
- try {
-
- ds.Tables.Clear();
-
- webservices.RegexComWebservice regexLib = new global::umbraco.presentation.webservices.RegexComWebservice();
- ds = regexLib.listRegExp(searchField.Text, "", 0, 10);
-
- results.DataSource = ds;
- results.DataBind();
-
- regexLib.Dispose();
- ds.Clear();
- ds.Dispose();
- } catch{
- Literal err = new Literal();
- err.Text = "" + ui.Text("defaultdialogs", "regexSearchError") + "
";
- regexPanel.Controls.Clear();
- regexPanel.Controls.Add(err);
- }
- }
-
- protected void onRegexBind(object sender, RepeaterItemEventArgs e) {
- if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
- DataRowView drw = (DataRowView)e.Item.DataItem;
-
- Literal _header = (Literal)e.Item.FindControl("header");
- Literal _desc = (Literal)e.Item.FindControl("desc");
- Literal _regex = (Literal)e.Item.FindControl("regex");
-
- _header.Text = "" + drw["Title"].ToString() + "";
- _desc.Text = drw["description"].ToString();
- _regex.Text = drw["expression"].ToString().Trim();
-
- }
- }
-
- }
-}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/RegexWs.aspx.designer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/RegexWs.aspx.designer.cs
deleted file mode 100644
index 8a3748704b..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/RegexWs.aspx.designer.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.4200
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace umbraco.presentation.dialogs {
-
-
- public partial class RegexWs {
-
- ///
- /// JsInclude1 control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::ClientDependency.Core.Controls.JsInclude JsInclude1;
-
- ///
- /// pane1 control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::umbraco.uicontrols.Pane pane1;
-
- ///
- /// pp_search control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::umbraco.uicontrols.PropertyPanel pp_search;
-
- ///
- /// searchField control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.TextBox searchField;
-
- ///
- /// bt_search control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.Button bt_search;
-
- ///
- /// regexPanel control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.Panel regexPanel;
-
- ///
- /// results control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.Repeater results;
- }
-}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx
deleted file mode 100644
index ce4cc6ede9..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ Page language="c#" Codebehind="language.aspx.cs" AutoEventWireup="True" Inherits="umbraco.js.language" %>
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx.cs
deleted file mode 100644
index 3d38d897d3..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System;
-using System.Text;
-using System.Xml;
-using umbraco.BasePages;
-using umbraco.BusinessLogic;
-
-namespace umbraco.js
-{
- [Obsolete("This is no longer used and will be removed from the codebase in future versions")]
- public partial class language : BasePage
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- Response.ContentType = "application/json";
- string lang = "en";
- if(ValidateCurrentUser()){
- lang = UmbracoUser.Language;
- }
-
- XmlDocument all = ui.getLanguageFile(lang);
-
- if(all == null)
- return;
-
- StringBuilder sb = new StringBuilder();
-
- foreach(XmlNode x in all.DocumentElement.ChildNodes)
- {
- if(x == null)
- continue;
-
- for (int i = 0; i < x.ChildNodes.Count; i++)
- {
- sb.Append("\n");
-
- XmlNode key = x.ChildNodes[i];
- if (key.FirstChild == null || string.IsNullOrEmpty(key.FirstChild.Value))
- continue;
-
- XmlNode n1 = x.Attributes.GetNamedItem("alias");
- if (n1 == null)
- continue;
- XmlNode n2 = key.Attributes.GetNamedItem("alias");
- if (n2 == null)
- continue;
- string _tempKey = string.Format("{0}_{1}", n1.Value, n2.Value);
-
- // we need to remove linie breaks as they can't break js
- string tmpStr = key.FirstChild.Value.Replace("\\", "\\\\").Replace("\"", "'").Replace("\t", "").Replace("\r", "").Replace("\n", "");
-
- sb.Append("\"" + _tempKey + "\": \"" + tmpStr + "\",");
-
- }
- }
- var f = "{" + sb.ToString().Trim().Trim(',').Trim() + "}";
- Response.Write(f);
- }
-
- }
-}
\ No newline at end of file
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx.designer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx.designer.cs
deleted file mode 100644
index 41417754ea..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx.designer.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:2.0.50727.42
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace umbraco.js {
-
- public partial class language {
- }
-}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx.resx b/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx.resx
deleted file mode 100644
index dd0ea4d8e3..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/js/language.aspx.resx
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.0.0.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
diff --git a/src/umbraco.cms/helpers/DeepLink.cs b/src/umbraco.cms/helpers/DeepLink.cs
index 9c401ea87a..ac0fdce5b7 100644
--- a/src/umbraco.cms/helpers/DeepLink.cs
+++ b/src/umbraco.cms/helpers/DeepLink.cs
@@ -90,11 +90,7 @@ namespace umbraco.cms.helpers
editorUrl = "settings/editMediaType.aspx";
idKey = "id";
break;
- case DeepLinkType.RazorScript:
- section = Constants.Applications.Developer;
- editorUrl = "developer/python/editPython.aspx";
- idKey = "file";
- break;
+
case DeepLinkType.Template:
section = Constants.Applications.Settings;
editorUrl = "settings/editTemplate.aspx";
From e76ad837b9b1422ce8b6a62fea86f5ab43f66758 Mon Sep 17 00:00:00 2001
From: Shannon
Date: Thu, 20 Jul 2017 19:16:28 +1000
Subject: [PATCH 05/16] Fixes script and partial views trees
---
src/Umbraco.Web/Trees/PartialViewMacrosTreeController.cs | 9 +++++++--
src/Umbraco.Web/Trees/PartialViewsTreeController.cs | 8 +++++++-
src/Umbraco.Web/Trees/ScriptTreeController.cs | 9 ++++++++-
.../umbraco.presentation/umbraco/Trees/loadDLRScripts.cs | 9 +++++----
.../umbraco.presentation/umbraco/Trees/loadScripts.cs | 6 ++++--
5 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/src/Umbraco.Web/Trees/PartialViewMacrosTreeController.cs b/src/Umbraco.Web/Trees/PartialViewMacrosTreeController.cs
index ba4724aead..19c32864d5 100644
--- a/src/Umbraco.Web/Trees/PartialViewMacrosTreeController.cs
+++ b/src/Umbraco.Web/Trees/PartialViewMacrosTreeController.cs
@@ -1,6 +1,8 @@
-using Umbraco.Core;
-using Umbraco.Core.IO;
+using Umbraco.Core.IO;
using Umbraco.Web.Models.Trees;
+using Umbraco.Web.Mvc;
+using Umbraco.Web.WebApi.Filters;
+using Constants = Umbraco.Core.Constants;
namespace Umbraco.Web.Trees
{
@@ -8,6 +10,9 @@ namespace Umbraco.Web.Trees
/// Tree for displaying partial view macros in the developer app
///
[Tree(Constants.Applications.Developer, "partialViewMacros", null, sortOrder: 6)]
+ [UmbracoTreeAuthorize(Constants.Trees.PartialViewMacros)]
+ [PluginController("UmbracoTrees")]
+ [CoreTree]
public class PartialViewMacrosTreeController : FileSystemTreeController2
{
protected override IFileSystem2 FileSystem
diff --git a/src/Umbraco.Web/Trees/PartialViewsTreeController.cs b/src/Umbraco.Web/Trees/PartialViewsTreeController.cs
index bf4ec65a2e..fac173666e 100644
--- a/src/Umbraco.Web/Trees/PartialViewsTreeController.cs
+++ b/src/Umbraco.Web/Trees/PartialViewsTreeController.cs
@@ -1,6 +1,9 @@
-using Umbraco.Core;
+using umbraco;
using Umbraco.Core.IO;
using Umbraco.Web.Models.Trees;
+using Umbraco.Web.Mvc;
+using Umbraco.Web.WebApi.Filters;
+using Constants = Umbraco.Core.Constants;
namespace Umbraco.Web.Trees
{
@@ -8,6 +11,9 @@ namespace Umbraco.Web.Trees
/// Tree for displaying partial views in the settings app
///
[Tree(Constants.Applications.Settings, "partialViews", null, sortOrder: 2)]
+ [UmbracoTreeAuthorize(Constants.Trees.PartialViews)]
+ [PluginController("UmbracoTrees")]
+ [CoreTree]
public class PartialViewsTreeController : FileSystemTreeController2
{
protected override IFileSystem2 FileSystem
diff --git a/src/Umbraco.Web/Trees/ScriptTreeController.cs b/src/Umbraco.Web/Trees/ScriptTreeController.cs
index cb9954019b..191834afc9 100644
--- a/src/Umbraco.Web/Trees/ScriptTreeController.cs
+++ b/src/Umbraco.Web/Trees/ScriptTreeController.cs
@@ -1,10 +1,17 @@
-using Umbraco.Core;
+using umbraco;
using Umbraco.Core.IO;
using Umbraco.Web.Models.Trees;
+using Umbraco.Web.Mvc;
+using Umbraco.Web.WebApi.Filters;
+using Constants = Umbraco.Core.Constants;
namespace Umbraco.Web.Trees
{
+ [UmbracoTreeAuthorize(Constants.Trees.Scripts)]
[Tree(Constants.Applications.Settings, "scripts", null, sortOrder: 4)]
+ [LegacyBaseTree(typeof(loadScripts))]
+ [PluginController("UmbracoTrees")]
+ [CoreTree]
public class ScriptTreeController : FileSystemTreeController2
{
protected override IFileSystem2 FileSystem
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadDLRScripts.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadDLRScripts.cs
index a941772b23..7ab99e93a7 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadDLRScripts.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadDLRScripts.cs
@@ -1,4 +1,6 @@
-using System.Text;
+using System;
+using System.ComponentModel;
+using System.Text;
using umbraco.cms.presentation.Trees;
using Umbraco.Core.IO;
using Umbraco.Core;
@@ -6,9 +8,8 @@ using Umbraco.Core;
namespace umbraco
{
- ///
- /// Handles loading of python items into the developer application tree
- ///
+ [Obsolete("This is no longer used and will be removed in future versions")]
+ [EditorBrowsable(EditorBrowsableState.Never)]
public class loadDLRScripts : FileSystemTree
{
public loadDLRScripts(string application) : base(application) { }
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadScripts.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadScripts.cs
index 563a491ec5..7379c89963 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadScripts.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/Trees/loadScripts.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Data;
using System.IO;
using System.Linq;
@@ -31,8 +32,9 @@ using Umbraco.Core;
namespace umbraco
-{
- [Tree(Constants.Applications.Settings, "scripts", "Scripts", "icon-folder", "icon-folder", sortOrder: 2)]
+{
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ [Obsolete("This is no longer used and will be removed from the codebase in the future")]
public class loadScripts : FileSystemTree
{
public loadScripts(string application) : base(application) { }
From c309e5edaf1881e0ec64e56c4f3153c25a10d513 Mon Sep 17 00:00:00 2001
From: Shannon
Date: Thu, 20 Jul 2017 19:23:46 +1000
Subject: [PATCH 06/16] Removes even more
---
src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 7 -
.../umbraco/settings/scripts/editScript.aspx | 59 -------
.../umbraco/webservices/Developer.asmx | 1 -
.../umbraco/webservices/Settings.asmx | 1 -
.../UltimatePickerAutoCompleteHandler.ashx | 1 -
.../umbraco/webservices/tagService.asmx | 1 -
.../umbraco/webservices/trashcan.asmx | 1 -
.../ultimatePickerAutoSuggest.asmx | 1 -
src/Umbraco.Web/Umbraco.Web.csproj | 32 +---
.../umbraco/settings/scripts/editScript.aspx | 59 -------
.../settings/scripts/editScript.aspx.cs | 149 ----------------
.../umbraco/webservices/Developer.asmx | 1 -
.../umbraco/webservices/Developer.asmx.cs | 81 ---------
.../umbraco/webservices/Settings.asmx | 1 -
.../umbraco/webservices/Settings.asmx.cs | 40 -----
.../UltimatePickerAutoCompleteHandler.ashx | 1 -
.../UltimatePickerAutoCompleteHandler.ashx.cs | 163 ------------------
.../umbraco/webservices/trashcan.asmx | 1 -
.../umbraco/webservices/trashcan.asmx.cs | 73 --------
19 files changed, 3 insertions(+), 670 deletions(-)
delete mode 100644 src/Umbraco.Web.UI/umbraco/settings/scripts/editScript.aspx
delete mode 100644 src/Umbraco.Web.UI/umbraco/webservices/Developer.asmx
delete mode 100644 src/Umbraco.Web.UI/umbraco/webservices/Settings.asmx
delete mode 100644 src/Umbraco.Web.UI/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx
delete mode 100644 src/Umbraco.Web.UI/umbraco/webservices/tagService.asmx
delete mode 100644 src/Umbraco.Web.UI/umbraco/webservices/trashcan.asmx
delete mode 100644 src/Umbraco.Web.UI/umbraco/webservices/ultimatePickerAutoSuggest.asmx
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/settings/scripts/editScript.aspx
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/settings/scripts/editScript.aspx.cs
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Developer.asmx
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Developer.asmx.cs
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Settings.asmx
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Settings.asmx.cs
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx.cs
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/webservices/trashcan.asmx
delete mode 100644 src/Umbraco.Web/umbraco.presentation/umbraco/webservices/trashcan.asmx.cs
diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
index a94a55c075..13141c13cf 100644
--- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
+++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
@@ -882,7 +882,6 @@
-
@@ -932,18 +931,13 @@
-
Form
-
- Form
-
-
@@ -1009,7 +1003,6 @@
-
Designer
diff --git a/src/Umbraco.Web.UI/umbraco/settings/scripts/editScript.aspx b/src/Umbraco.Web.UI/umbraco/settings/scripts/editScript.aspx
deleted file mode 100644
index be0d68d3ba..0000000000
--- a/src/Umbraco.Web.UI/umbraco/settings/scripts/editScript.aspx
+++ /dev/null
@@ -1,59 +0,0 @@
-<%@ Page Language="C#" MasterPageFile="../../masterpages/umbracoPage.Master" AutoEventWireup="true"
- CodeBehind="editScript.aspx.cs" Inherits="umbraco.cms.presentation.settings.scripts.editScript"
- ValidateRequest="False" %>
-<%@ Import Namespace="Umbraco.Core" %>
-
-<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %>
-<%@ Register TagPrefix="umb" Namespace="ClientDependency.Core.Controls" Assembly="ClientDependency.Core" %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Umbraco.Web.UI/umbraco/webservices/Developer.asmx b/src/Umbraco.Web.UI/umbraco/webservices/Developer.asmx
deleted file mode 100644
index 2ca307ed10..0000000000
--- a/src/Umbraco.Web.UI/umbraco/webservices/Developer.asmx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebService Language="c#" Codebehind="Developer.asmx.cs" Class="umbraco.webservices.Developer" %>
diff --git a/src/Umbraco.Web.UI/umbraco/webservices/Settings.asmx b/src/Umbraco.Web.UI/umbraco/webservices/Settings.asmx
deleted file mode 100644
index 0b2a13a854..0000000000
--- a/src/Umbraco.Web.UI/umbraco/webservices/Settings.asmx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebService Language="c#" Codebehind="Settings.asmx.cs" Class="umbraco.webservices.Settings" %>
diff --git a/src/Umbraco.Web.UI/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx b/src/Umbraco.Web.UI/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx
deleted file mode 100644
index 9b5b98a9b8..0000000000
--- a/src/Umbraco.Web.UI/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebHandler Language="C#" CodeBehind="UltimatePickerAutoCompleteHandler.ashx.cs" Class="umbraco.presentation.umbraco.webservices.UltimatePickerAutoCompleteHandler" %>
diff --git a/src/Umbraco.Web.UI/umbraco/webservices/tagService.asmx b/src/Umbraco.Web.UI/umbraco/webservices/tagService.asmx
deleted file mode 100644
index c83c8c7a5c..0000000000
--- a/src/Umbraco.Web.UI/umbraco/webservices/tagService.asmx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebService Language="C#" CodeBehind="tagService.asmx.cs" Class="umbracoTags.webservice.tagService" %>
diff --git a/src/Umbraco.Web.UI/umbraco/webservices/trashcan.asmx b/src/Umbraco.Web.UI/umbraco/webservices/trashcan.asmx
deleted file mode 100644
index f075057517..0000000000
--- a/src/Umbraco.Web.UI/umbraco/webservices/trashcan.asmx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebService Language="C#" CodeBehind="trashcan.asmx.cs" Class="umbraco.presentation.webservices.trashcan" %>
diff --git a/src/Umbraco.Web.UI/umbraco/webservices/ultimatePickerAutoSuggest.asmx b/src/Umbraco.Web.UI/umbraco/webservices/ultimatePickerAutoSuggest.asmx
deleted file mode 100644
index 0d8a23409d..0000000000
--- a/src/Umbraco.Web.UI/umbraco/webservices/ultimatePickerAutoSuggest.asmx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebService Language="C#" CodeBehind="ultimatePickerAutoSuggest.asmx.cs" Class="umbraco.presentation.umbraco.webservices.ultimatePickerAutoSuggest" %>
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 032c4fb33c..e4cab201af 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -1586,10 +1586,6 @@
editLanguage.aspx
-
- editScript.aspx
- ASPXCodeBehind
-
@@ -1717,10 +1713,6 @@
codeEditorSave.asmx
Component
-
- Developer.asmx
- Component
-
legacyAjaxCalls.asmx
Component
@@ -1738,21 +1730,10 @@
Component
-
- Settings.asmx
- Component
-
templates.asmx
Component
-
- trashcan.asmx
- Component
-
-
- UltimatePickerAutoCompleteHandler.ashx
-
ASPXCodeBehind
@@ -1891,9 +1872,6 @@
ASPXCodeBehind
-
- ASPXCodeBehind
-
@@ -1917,18 +1895,13 @@
-
Form
-
- Form
-
-
@@ -1939,7 +1912,6 @@
XmlTree.xsd
-
@@ -2004,7 +1976,9 @@
umbraco_org_umbraco_update_CheckForUpgrade
-
+
+
+
11.0
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/scripts/editScript.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/settings/scripts/editScript.aspx
deleted file mode 100644
index 089f28ea47..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/scripts/editScript.aspx
+++ /dev/null
@@ -1,59 +0,0 @@
-<%@ Page Language="C#" MasterPageFile="../../masterpages/umbracoPage.Master" AutoEventWireup="true"
- CodeBehind="editScript.aspx.cs" Inherits="umbraco.cms.presentation.settings.scripts.editScript"
- ValidateRequest="False" %>
-
-<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/scripts/editScript.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/settings/scripts/editScript.aspx.cs
deleted file mode 100644
index 8cd9082b5b..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/settings/scripts/editScript.aspx.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Web;
-using System.Web.SessionState;
-using System.Web.UI;
-using System.Web.UI.WebControls;
-using System.Web.UI.HtmlControls;
-using System.IO;
-using Umbraco.Core;
-using Umbraco.Core.Configuration;
-using Umbraco.Core.IO;
-using umbraco.cms.presentation.Trees;
-using System.Linq;
-using umbraco.cms.helpers;
-using umbraco.uicontrols;
-
-namespace umbraco.cms.presentation.settings.scripts
-{
- public partial class editScript : BasePages.UmbracoEnsuredPage
- {
- public editScript()
- {
- CurrentApp = BusinessLogic.DefaultApps.settings.ToString();
-
- }
- protected System.Web.UI.HtmlControls.HtmlForm Form1;
- protected uicontrols.TabView Panel1;
- protected System.Web.UI.WebControls.TextBox NameTxt;
- protected uicontrols.Pane Pane7;
- protected uicontrols.Pane Pane8;
-
- protected System.Web.UI.WebControls.Literal lttPath;
- protected System.Web.UI.WebControls.Literal editorJs;
- protected umbraco.uicontrols.CodeArea editorSource;
- protected umbraco.uicontrols.PropertyPanel pp_name;
- protected umbraco.uicontrols.PropertyPanel pp_path;
-
- protected MenuButton SaveButton;
-
- private string filename;
- protected string ScriptTreeSyncPath { get; private set; }
-
- protected override void OnLoad(EventArgs e)
- {
- base.OnLoad(e);
-
- // get the script, ensure it exists (not null) and validate (because
- // the file service ensures that it loads scripts from the proper location
- // but does not seem to validate extensions?) - in case of an error,
- // throw - that's what we did anyways.
-
- // also scrapping the code that added .cshtml and .vbhtml extensions, and
- // ~/Views directory - we're not using editScript.aspx for views anymore.
-
- var svce = ApplicationContext.Current.Services.FileService;
- var script = svce.GetScriptByName(filename);
- if (script == null) // not found
- throw new FileNotFoundException("Could not find file '" + filename + "'.");
-
- lttPath.Text = "" + script.VirtualPath + "";
- editorSource.Text = script.Content;
- ScriptTreeSyncPath = DeepLink.GetTreePathFromFilePath(filename);
-
- // name derives from filename, clean for xss
- NameTxt.Text = filename.CleanForXss('\\', '/');
-
- Panel1.Text = ui.Text("editscript", base.getUser());
- pp_name.Text = ui.Text("name", base.getUser());
- pp_path.Text = ui.Text("path", base.getUser());
-
- if (IsPostBack == false)
- {
- ClientTools
- .SetActiveTreeType(TreeDefinitionCollection.Instance.FindTree().Tree.Alias)
- .SyncTree(ScriptTreeSyncPath, false);
- }
- }
-
- override protected void OnInit(EventArgs e)
- {
- base.OnInit(e);
-
- filename = Request.QueryString["file"].Replace('\\', '/').TrimStart('/');
-
- //need to change the editor type if it is XML
- if (filename.EndsWith("xml"))
- editorSource.CodeBase = uicontrols.CodeArea.EditorType.XML;
- else if (filename.EndsWith("master"))
- editorSource.CodeBase = uicontrols.CodeArea.EditorType.HTML;
-
-
- var editor = Panel1.NewTabPage(ui.Text("settings","script"));
- editor.Controls.Add(Pane7);
-
- var props = Panel1.NewTabPage(ui.Text("properties"));
- props.Controls.Add(Pane8);
-
-
- SaveButton = Panel1.Menu.NewButton();
- SaveButton.Text = ui.Text("save");
- SaveButton.ButtonType = MenuButtonType.Primary;
- SaveButton.ID = "save";
- SaveButton.CssClass = "client-side";
-
- if (editorSource.CodeBase == uicontrols.CodeArea.EditorType.HTML)
- {
- // Editing buttons
- Panel1.Menu.InsertSplitter();
- uicontrols.MenuIconI umbField = Panel1.Menu.NewIcon();
- umbField.ImageURL = UmbracoPath + "/images/editor/insField.gif";
- umbField.OnClickCommand = BasePages.ClientTools.Scripts.OpenModalWindow(IOHelper.ResolveUrl(SystemDirectories.Umbraco) + "/dialogs/umbracoField.aspx?objectId=" + editorSource.ClientID + "&tagName=UMBRACOGETDATA", ui.Text("template", "insertPageField"), 640, 550);
- umbField.AltText = ui.Text("template", "insertPageField");
-
- // TODO: Update icon
- uicontrols.MenuIconI umbDictionary = Panel1.Menu.NewIcon();
- umbDictionary.ImageURL = GlobalSettings.Path + "/images/editor/dictionaryItem.gif";
- umbDictionary.OnClickCommand = BasePages.ClientTools.Scripts.OpenModalWindow(IOHelper.ResolveUrl(SystemDirectories.Umbraco) + "/dialogs/umbracoField.aspx?objectId=" + editorSource.ClientID + "&tagName=UMBRACOGETDICTIONARY", ui.Text("template", "insertDictionaryItem"), 640, 550);
- umbDictionary.AltText = "Insert umbraco dictionary item";
-
- uicontrols.MenuIconI umbMacro = Panel1.Menu.NewIcon();
- umbMacro.ImageURL = UmbracoPath + "/images/editor/insMacro.gif";
- umbMacro.AltText = ui.Text("template", "insertMacro");
- umbMacro.OnClickCommand = BasePages.ClientTools.Scripts.OpenModalWindow(IOHelper.ResolveUrl(SystemDirectories.Umbraco) + "/dialogs/editMacro.aspx?objectId=" + editorSource.ClientID, ui.Text("template", "insertMacro"), 470, 530);
-
- // Help
- Panel1.Menu.InsertSplitter();
-
- uicontrols.MenuIconI helpIcon = Panel1.Menu.NewIcon();
- helpIcon.OnClickCommand = umbraco.BasePages.ClientTools.Scripts.OpenModalWindow(Umbraco.Core.IO.IOHelper.ResolveUrl(Umbraco.Core.IO.SystemDirectories.Umbraco) + "/settings/modals/showumbracotags.aspx?alias=", ui.Text("template", "quickGuide"), 600, 580);
- helpIcon.ImageURL = UmbracoPath + "/images/editor/help.png";
- helpIcon.AltText = ui.Text("template", "quickGuide");
-
- }
-
- }
-
- protected override void OnPreRender(EventArgs e)
- {
- base.OnPreRender(e);
- ScriptManager.GetCurrent(Page).Services.Add(new ServiceReference("../webservices/codeEditorSave.asmx"));
- ScriptManager.GetCurrent(Page).Services.Add(new ServiceReference("../webservices/legacyAjaxCalls.asmx"));
- }
-
- }
-}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Developer.asmx b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Developer.asmx
deleted file mode 100644
index 2ca307ed10..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Developer.asmx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebService Language="c#" Codebehind="Developer.asmx.cs" Class="umbraco.webservices.Developer" %>
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Developer.asmx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Developer.asmx.cs
deleted file mode 100644
index 6d579d6fc9..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Developer.asmx.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System.Globalization;
-using System.Web.Services;
-using System.Xml;
-using Umbraco.Core;
-using Umbraco.Web.WebServices;
-using umbraco.BusinessLogic;
-using umbraco.presentation.webservices;
-
-namespace umbraco.webservices
-{
- ///
- /// Summary description for Developer.
- ///
- [WebService(Namespace="http://umbraco.org/webservices/")]
- public class Developer : UmbracoAuthorizedWebService
- {
-
- [WebMethod]
- public string BootStrapTidy(string html, string ContextID)
- {
- //pretty sure this is legacy and it used to throw an exception so we'll continue to do the same
- //true = throw if invalid
- AuthorizeRequest(true);
-
- return cms.helpers.xhtml.BootstrapTidy(html);
- }
-
- [WebMethod]
- public XmlNode GetMacros(string Login, string Password)
- {
- if (ValidateCredentials(Login, Password)
- && UserHasAppAccess(DefaultApps.developer.ToString(), Login))
- {
- var xmlDoc = new XmlDocument();
- var macros = xmlDoc.CreateElement("macros");
- foreach (var m in cms.businesslogic.macro.Macro.GetAll())
- {
- var mXml = xmlDoc.CreateElement("macro");
- mXml.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "id", m.Id.ToString(CultureInfo.InvariantCulture)));
- mXml.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "alias", m.Alias));
- mXml.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "name", m.Name));
- macros.AppendChild(mXml);
- }
- return macros;
- }
- return null;
- }
-
- [WebMethod]
- public XmlNode GetMacro(int Id, string Login, string Password)
- {
- if (ValidateCredentials(Login, Password)
- && UserHasAppAccess(DefaultApps.developer.ToString(), Login))
- {
- var xmlDoc = new XmlDocument();
- var macro = xmlDoc.CreateElement("macro");
- var m = new cms.businesslogic.macro.Macro(Id);
- macro.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "id", m.Id.ToString(CultureInfo.InvariantCulture)));
- macro.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "refreshRate", m.RefreshRate.ToString(CultureInfo.InvariantCulture)));
- macro.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "useInEditor", m.UseInEditor.ToString()));
- macro.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "alias", m.Alias));
- macro.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "name", m.Name));
- macro.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "assembly", m.Assembly));
- macro.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "type", m.Type));
- macro.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "xslt", m.Xslt));
- var properties = xmlDoc.CreateElement("properties");
- foreach (var mp in m.Properties)
- {
- var pXml = xmlDoc.CreateElement("property");
- pXml.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "alias", mp.Alias));
- pXml.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "name", mp.Name));
- pXml.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "public", true.ToString()));
- properties.AppendChild(pXml);
- }
- macro.AppendChild(properties);
- return macro;
- }
- return null;
- }
- }
-}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Settings.asmx b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Settings.asmx
deleted file mode 100644
index 0b2a13a854..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Settings.asmx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebService Language="c#" Codebehind="Settings.asmx.cs" Class="umbraco.webservices.Settings" %>
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Settings.asmx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Settings.asmx.cs
deleted file mode 100644
index d33e9b842e..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/Settings.asmx.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using System.Collections;
-using System.ComponentModel;
-using System.Data;
-using System.Diagnostics;
-using System.Web;
-using System.Web.Services;
-using System.Linq;
-using System.Xml;
-using Umbraco.Core;
-using Umbraco.Web.WebServices;
-using umbraco.BusinessLogic;
-
-namespace umbraco.webservices
-{
-
- public class Settings : UmbracoAuthorizedWebService
- {
-
- [WebMethod]
- public XmlNode GetTabs(string ContextID, int ContentTypeId)
- {
- if (!AuthorizeRequest(DefaultApps.settings.ToString()))
- {
- var xmlDoc = new XmlDocument();
- var tabs = xmlDoc.CreateElement("tabs");
- foreach (var t in new cms.businesslogic.ContentType(ContentTypeId).getVirtualTabs.ToList())
- {
- var mXml = xmlDoc.CreateElement("tab");
- mXml.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "id", t.Id.ToString()));
- mXml.Attributes.Append(XmlHelper.AddAttribute(xmlDoc, "caption", t.Caption));
- tabs.AppendChild(mXml);
- }
- return tabs;
- }
-
- return null;
- }
- }
-}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx
deleted file mode 100644
index 9b5b98a9b8..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebHandler Language="C#" CodeBehind="UltimatePickerAutoCompleteHandler.ashx.cs" Class="umbraco.presentation.umbraco.webservices.UltimatePickerAutoCompleteHandler" %>
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx.cs
deleted file mode 100644
index 8d2acf4f8f..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/UltimatePickerAutoCompleteHandler.ashx.cs
+++ /dev/null
@@ -1,163 +0,0 @@
-using System;
-using System.Linq;
-using System.Web;
-using System.Web.Services;
-using Umbraco.Web.WebServices;
-using umbraco.BasePages;
-using umbraco.BusinessLogic;
-using umbraco.cms.businesslogic.web;
-using umbraco.cms.businesslogic;
-
-namespace umbraco.presentation.umbraco.webservices
-{
- ///
- /// Summary description for $codebehindclassname$
- ///
- [WebService(Namespace = "http://tempuri.org/")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- public class UltimatePickerAutoCompleteHandler : UmbracoAuthorizedHttpHandler
- {
-
- private int _nodeCount;
- private int _counter;
- private string[] _output;
- private string _prefix;
-
- public override void ProcessRequest(HttpContext context)
- {
- if (BasePage.ValidateUserContextID(BasePage.umbracoUserContextID) == false)
- throw new Exception("Client authorization failed. User is not logged in");
-
- //user must be allowed to see content or media
- if (AuthorizeRequest(DefaultApps.content.ToString()) == false && AuthorizeRequest(DefaultApps.media.ToString()) == false)
- return;
-
- context.Response.ContentType = "text/plain";
-
- _prefix = context.Request.QueryString["q"];
-
- var parentNodeId = Convert.ToInt32(context.Request.QueryString["id"]);
- var showGrandChildren = Convert.ToBoolean(context.Request.QueryString["showchildren"]);
-
- var documentAliasFilter = context.Request.QueryString["filter"];
- var documentAliasFilters = documentAliasFilter.Split(",".ToCharArray());
-
- var parent = new CMSNode(parentNodeId);
-
- _nodeCount = 0;
-
- //store children array here because iterating over an Array property object is very inneficient.
- var children = parent.Children;
- foreach (CMSNode child in children)
- {
- NodeChildrenCount(child, showGrandChildren, documentAliasFilters);
- }
-
- _output = new string[_nodeCount];
- _counter = 0;
- int level = 1;
-
- foreach (CMSNode child in children)
- {
- AddNode(child, level, showGrandChildren, documentAliasFilters);
- }
-
- foreach (var item in _output)
- {
- context.Response.Write(item + Environment.NewLine);
- }
- }
-
- private bool ValidNode(string nodeText)
- {
- return nodeText.Length >= _prefix.Length && nodeText.Substring(0, _prefix.Length).ToLower() == _prefix.ToLower();
- }
-
- private void NodeChildrenCount(CMSNode node, bool countChildren, string[] documentAliasFilters)
- {
- if (documentAliasFilters.Length > 0)
- {
- foreach (var filter in documentAliasFilters)
- {
- var trimmedFilter = filter.TrimStart(" ".ToCharArray());
- trimmedFilter = trimmedFilter.TrimEnd(" ".ToCharArray());
-
- if ((new Document(node.Id).ContentType.Alias == trimmedFilter || trimmedFilter == string.Empty) && ValidNode(node.Text))
- {
- _nodeCount += 1;
- }
- }
- }
- else
- {
- if (ValidNode(node.Text))
- {
- _nodeCount += 1;
- }
- }
-
- if (countChildren)
- {
- //store children array here because iterating over an Array property object is very inneficient.
- var children = node.Children;
- foreach (CMSNode child in children)
- {
- NodeChildrenCount(child, countChildren, documentAliasFilters);
- }
- }
-
- }
-
- private void AddNode(CMSNode node, int level, bool showGrandChildren, string[] documentAliasFilters)
- {
- var preText = string.Empty;
-
- for (var i = 1; i < level; i++)
- {
- preText += "- ";
- }
-
- if (documentAliasFilters.Length > 0)
- {
- foreach (var filter in documentAliasFilters)
- {
- var trimmedFilter = filter.TrimStart(" ".ToCharArray());
- trimmedFilter = trimmedFilter.TrimEnd(" ".ToCharArray());
-
- if ((new Document(node.Id).ContentType.Alias == trimmedFilter || trimmedFilter == string.Empty) && ValidNode(node.Text))
- {
- _output[_counter] = preText + node.Text + " [" + node.Id + "]";
- _counter++;
- }
-
- }
- }
- else
- {
- if (ValidNode(node.Text))
- {
- _output[_counter] = preText + node.Text + " [" + node.Id + "]";
- _counter++;
- }
- }
-
- if (showGrandChildren)
- {
- if (node.HasChildren)
- {
- //store children array here because iterating over an Array property object is very inneficient.
- var children = node.Children;
- foreach (CMSNode child in children)
- {
- AddNode(child, level + 1, showGrandChildren, documentAliasFilters);
- }
- }
- }
- }
-
- public override bool IsReusable
- {
- get { return false; }
- }
- }
-}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/trashcan.asmx b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/trashcan.asmx
deleted file mode 100644
index f075057517..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/trashcan.asmx
+++ /dev/null
@@ -1 +0,0 @@
-<%@ WebService Language="C#" CodeBehind="trashcan.asmx.cs" Class="umbraco.presentation.webservices.trashcan" %>
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/trashcan.asmx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/trashcan.asmx.cs
deleted file mode 100644
index f1bdd6d3d5..0000000000
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/trashcan.asmx.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System;
-using System.Web.Script.Services;
-using System.Web.Services;
-using System.ComponentModel;
-using Umbraco.Web.WebServices;
-using umbraco.BasePages;
-using umbraco.BusinessLogic;
-using umbraco.cms.businesslogic;
-
-namespace umbraco.presentation.webservices
-{
- ///
- /// Summary description for trashcan
- ///
- [WebService(Namespace = "http://umbraco.org/webservices")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- [ToolboxItem(false)]
- [ScriptService]
- public class trashcan : UmbracoAuthorizedWebService
- {
- [WebMethod]
- public void EmptyTrashcan(RecycleBin.RecycleBinType type)
- {
- //validate against the app type!
- switch (type)
- {
- case RecycleBin.RecycleBinType.Content:
- if (!AuthorizeRequest(DefaultApps.content.ToString())) return;
- break;
- case RecycleBin.RecycleBinType.Media:
- if (!AuthorizeRequest(DefaultApps.media.ToString())) return;
- break;
- default:
- throw new ArgumentOutOfRangeException("type");
- }
-
- //TODO: This will never work in LB scenarios
- Application["trashcanEmptyLeft"] = RecycleBin.Count(type).ToString();
- emptyTrashCanDo(type);
- }
-
- [WebMethod]
- public string GetTrashStatus()
- {
- //TODO: This will never work in LB scenarios
-
- if (AuthorizeRequest())
- {
- return Application["trashcanEmptyLeft"] != null
- ? Application["trashcanEmptyLeft"].ToString()
- : "";
- }
-
- return "-";
-
- }
-
- private void emptyTrashCanDo(RecycleBin.RecycleBinType type)
- {
- var trashCan = new RecycleBin(type);
-
- var callback = new Action(x =>
- {
- Application.Lock();
- Application["trashcanEmptyLeft"] = x.ToString();
- Application.UnLock();
- });
-
- trashCan.CallTheGarbageMan(callback);
-
- }
- }
-}
From fedd9e28978c9ef63df0f996e230789b812f9985 Mon Sep 17 00:00:00 2001
From: Stephan
Date: Thu, 20 Jul 2017 16:52:13 +0200
Subject: [PATCH 07/16] Fix User deep-cloning
---
src/Umbraco.Core/Models/Membership/User.cs | 43 +++++++++++++++++-----
src/Umbraco.Core/Models/UserExtensions.cs | 17 +++++----
2 files changed, 43 insertions(+), 17 deletions(-)
diff --git a/src/Umbraco.Core/Models/Membership/User.cs b/src/Umbraco.Core/Models/Membership/User.cs
index b64fd07452..d225e6ad3f 100644
--- a/src/Umbraco.Core/Models/Membership/User.cs
+++ b/src/Umbraco.Core/Models/Membership/User.cs
@@ -116,7 +116,8 @@ namespace Umbraco.Core.Models.Membership
private DateTime _lastLoginDate;
private DateTime _lastLockoutDate;
private bool _defaultToLiveEditing;
- private IDictionary _additionalData;
+ private IDictionary _additionalData;
+ private object _additionalDataLock = new object();
private static readonly Lazy Ps = new Lazy();
@@ -404,13 +405,23 @@ namespace Umbraco.Core.Models.Membership
///
/// This is used as an internal cache for this entity - specifically for calculating start nodes so we don't re-calculated all of the time
///
- [IgnoreDataMember]
+ [IgnoreDataMember]
[DoNotClone]
internal IDictionary AdditionalData
{
- get { return _additionalData ?? (_additionalData = new Dictionary()); }
+ get
+ {
+ lock (_additionalDataLock)
+ {
+ return _additionalData ?? (_additionalData = new Dictionary());
+ }
+ }
}
+ [IgnoreDataMember]
+ [DoNotClone]
+ internal object AdditionalDataLock { get { return _additionalDataLock; } }
+
public override object DeepClone()
{
var clone = (User)base.DeepClone();
@@ -419,15 +430,29 @@ namespace Umbraco.Core.Models.Membership
//manually clone the start node props
clone._startContentIds = _startContentIds.ToArray();
clone._startMediaIds = _startMediaIds.ToArray();
- //This ensures that any value in the dictionary that is deep cloneable is cloned too
- foreach (var key in clone.AdditionalData.Keys.ToArray())
+
+ // this value has been cloned and points to the same object
+ // which obviously is bad - needs to point to a new object
+ clone._additionalDataLock = new object();
+
+ if (_additionalData != null)
{
- var deepCloneable = clone.AdditionalData[key] as IDeepCloneable;
- if (deepCloneable != null)
+ // clone._additionalData points to the same dictionary, which is bad, because
+ // changing one clone impacts all of them - so we need to reset it with a fresh
+ // dictionary that will contain the same values - and, if some values are deep
+ // cloneable, they should be deep-cloned too
+ var cloneAdditionalData = clone._additionalData = new Dictionary();
+
+ lock (_additionalDataLock)
{
- clone.AdditionalData[key] = deepCloneable.DeepClone();
+ foreach (var kvp in _additionalData)
+ {
+ var deepCloneable = kvp.Value as IDeepCloneable;
+ cloneAdditionalData[kvp.Key] = deepCloneable == null ? kvp.Value : deepCloneable.DeepClone();
+ }
}
- }
+ }
+
//need to create new collections otherwise they'll get copied by ref
clone._userGroups = new HashSet(_userGroups);
clone._allowedSections = _allowedSections != null ? new List(_allowedSections) : null;
diff --git a/src/Umbraco.Core/Models/UserExtensions.cs b/src/Umbraco.Core/Models/UserExtensions.cs
index 061fd511b1..223fb37be4 100644
--- a/src/Umbraco.Core/Models/UserExtensions.cs
+++ b/src/Umbraco.Core/Models/UserExtensions.cs
@@ -212,22 +212,23 @@ namespace Umbraco.Core.Models
private static int[] FromUserCache(IUser user, string cacheKey)
{
var entityUser = user as User;
- if (entityUser != null)
+ if (entityUser == null) return null;
+
+ lock (entityUser.AdditionalDataLock)
{
object allContentStartNodes;
- if (entityUser.AdditionalData.TryGetValue(cacheKey, out allContentStartNodes))
- {
- var asArray = allContentStartNodes as int[];
- if (asArray != null) return asArray;
- }
+ return entityUser.AdditionalData.TryGetValue(cacheKey, out allContentStartNodes)
+ ? allContentStartNodes as int[]
+ : null;
}
- return null;
}
private static void ToUserCache(IUser user, string cacheKey, int[] vals)
{
var entityUser = user as User;
- if (entityUser != null)
+ if (entityUser == null) return;
+
+ lock (entityUser.AdditionalDataLock)
{
entityUser.AdditionalData[cacheKey] = vals;
}
From f043a2e4eea1b47d816c719de6e8e71e21e57580 Mon Sep 17 00:00:00 2001
From: Mads Rasmussen
Date: Mon, 24 Jul 2017 14:18:36 +0200
Subject: [PATCH 08/16] fixes: U4-10109 Need to indicate that granular
permission entries can be edited
---
.../directives/components/umbnodepreview.directive.js | 6 +++++-
.../src/less/components/umb-node-preview.less | 4 ++--
.../src/views/components/umb-node-preview.html | 9 +++++----
.../src/views/users/group.controller.js | 7 +++++--
src/Umbraco.Web.UI.Client/src/views/users/group.html | 4 +++-
5 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js
index 9966e94b70..e935557ce9 100644
--- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js
+++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbnodepreview.directive.js
@@ -82,8 +82,10 @@
@param {boolean} sortable (binding): Will add a move cursor on the node preview. Can used in combination with ui-sortable.
@param {boolean} allowRemove (binding): Show/Hide the remove button.
@param {boolean} allowOpen (binding): Show/Hide the open button.
+@param {boolean} allowEdit (binding): Show/Hide the edit button (Added in version 7.7.0).
@param {function} onRemove (expression): Callback function when the remove button is clicked.
@param {function} onOpen (expression): Callback function when the open button is clicked.
+@param {function} onEdit (expression): Callback function when the edit button is clicked (Added in version 7.7.0).
**/
(function () {
@@ -108,8 +110,10 @@
sortable: "=?",
allowOpen: "=?",
allowRemove: "=?",
+ allowEdit: "=?",
onOpen: "&?",
- onRemove: "&?"
+ onRemove: "&?",
+ onEdit: "&?"
},
link: link
};
diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less
index 667754faaa..ed3bd04f8d 100644
--- a/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less
+++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-node-preview.less
@@ -1,8 +1,6 @@
.umb-node-preview {
padding: 7px 0;
- border-radius: 3px;
display: flex;
- align-items: center;
max-width: 66.6%;
box-sizing: border-box;
border-bottom: 1px solid @gray-9;
@@ -37,10 +35,12 @@
.umb-node-preview__content {
flex: 1 1 auto;
+ margin-right: 25px;
}
.umb-node-preview__name {
color: @black;
+ margin-top: 2px;
}
.umb-node-preview__description {
diff --git a/src/Umbraco.Web.UI.Client/src/views/components/umb-node-preview.html b/src/Umbraco.Web.UI.Client/src/views/components/umb-node-preview.html
index a48d522e3b..b03f4b40c8 100644
--- a/src/Umbraco.Web.UI.Client/src/views/components/umb-node-preview.html
+++ b/src/Umbraco.Web.UI.Client/src/views/components/umb-node-preview.html
@@ -1,10 +1,10 @@
-
-
{{ name }}
-
{{ description }}
-
+
+
{{ name }}
+
{{ description }}
+
Permissions:
@@ -13,6 +13,7 @@
+
Edit
Open
Remove
diff --git a/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js b/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js
index 659a1f0c47..9d58e483e4 100644
--- a/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js
@@ -19,6 +19,7 @@
vm.clearStartNode = clearStartNode;
vm.save = save;
vm.openGranularPermissionsPicker = openGranularPermissionsPicker;
+ vm.setPermissionsForNode = setPermissionsForNode;
function init() {
@@ -251,8 +252,10 @@
vm.nodePermissions.show = false;
vm.nodePermissions = null;
// close content picker overlay
- vm.contentPicker.show = false;
- vm.contentPicker = null;
+ if(vm.contentPicker) {
+ vm.contentPicker.show = false;
+ vm.contentPicker = null;
+ }
},
close: function (oldModel) {
vm.nodePermissions.show = false;
diff --git a/src/Umbraco.Web.UI.Client/src/views/users/group.html b/src/Umbraco.Web.UI.Client/src/views/users/group.html
index 62ac90d56f..2110d8f1f0 100644
--- a/src/Umbraco.Web.UI.Client/src/views/users/group.html
+++ b/src/Umbraco.Web.UI.Client/src/views/users/group.html
@@ -115,7 +115,9 @@
name="node.name"
permissions="node.allowedPermissions"
allow-remove="true"
- on-remove="vm.removeSelectedItem($index, vm.userGroup.assignedPermissions)">
+ on-remove="vm.removeSelectedItem($index, vm.userGroup.assignedPermissions)"
+ allow-edit="true"
+ on-edit="vm.setPermissionsForNode(node)">
Date: Wed, 26 Jul 2017 08:35:08 +0200
Subject: [PATCH 09/16] U4-10023 - multiple start nodes
---
src/Umbraco.Core/Models/UserExtensions.cs | 66 ++++++++++++-------
src/Umbraco.Core/Services/EntityService.cs | 8 ++-
.../Models/UserExtensionsTests.cs | 49 ++++++++------
.../linkpicker/linkpicker.controller.js | 2 +-
.../mediaPicker/mediapicker.controller.js | 2 +
.../overlays/mediaPicker/mediapicker.html | 2 +-
.../grid/editors/media.controller.js | 2 +-
.../grid/editors/rte.controller.js | 2 +-
.../mediapicker/mediapicker.controller.js | 4 +-
.../propertyeditors/rte/rte.controller.js | 2 +-
src/Umbraco.Web/Editors/EntityController.cs | 22 +++++--
.../Trees/ContentTreeController.cs | 8 +--
.../Trees/ContentTreeControllerBase.cs | 17 +++--
src/Umbraco.Web/Trees/MediaTreeController.cs | 7 +-
14 files changed, 119 insertions(+), 74 deletions(-)
diff --git a/src/Umbraco.Core/Models/UserExtensions.cs b/src/Umbraco.Core/Models/UserExtensions.cs
index 223fb37be4..b087d6cee1 100644
--- a/src/Umbraco.Core/Models/UserExtensions.cs
+++ b/src/Umbraco.Core/Models/UserExtensions.cs
@@ -141,31 +141,23 @@ namespace Umbraco.Core.Models
{
if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("Value cannot be null or whitespace.", "path");
- var formattedPath = "," + path + ",";
- var formattedRecycleBinId = "," + recycleBinId.ToInvariantString() + ",";
+ // check for no access
+ if (startNodeIds.Length == 0)
+ return false;
- //check for root path access
- //TODO: This logic may change
- if (startNodeIds.Length == 0 || startNodeIds.Contains(Constants.System.Root))
+ // check for root access
+ if (startNodeIds.Contains(Constants.System.Root))
return true;
- //only users with root access have access to the recycle bin so if the above check didn't pass than access is denied
- if (formattedPath.Contains(formattedRecycleBinId))
- {
+ var formattedPath = "," + path + ",";
+
+ // only users with root access have access to the recycle bin,
+ // if the above check didn't pass then access is denied
+ if (formattedPath.Contains("," + recycleBinId + ","))
return false;
- }
- //check for normal paths
- foreach (var startNodeId in startNodeIds)
- {
- var formattedStartNodeId = "," + startNodeId.ToInvariantString() + ",";
-
- var hasAccess = formattedPath.Contains(formattedStartNodeId);
- if (hasAccess)
- return true;
- }
-
- return false;
+ // check for a start node in the path
+ return startNodeIds.Any(x => formattedPath.Contains("," + x + ","));
}
///
@@ -181,6 +173,7 @@ namespace Umbraco.Core.Models
return user.Groups != null && user.Groups.Any(x => x.Alias == Constants.Security.AdminGroupAlias);
}
+ // calc. start nodes, combining groups' and user's, and excluding what's in the bin
public static int[] CalculateContentStartNodeIds(this IUser user, IEntityService entityService)
{
const string cacheKey = "AllContentStartNodes";
@@ -195,6 +188,7 @@ namespace Umbraco.Core.Models
return vals;
}
+ // calc. start nodes, combining groups' and user's, and excluding what's in the bin
public static int[] CalculateMediaStartNodeIds(this IUser user, IEntityService entityService)
{
const string cacheKey = "AllMediaStartNodes";
@@ -239,7 +233,23 @@ namespace Umbraco.Core.Models
return test.StartsWith(path) && test.Length > path.Length && test[path.Length] == ',';
}
- //TODO: Unit test this
+ private static string GetBinPath(UmbracoObjectTypes objectType)
+ {
+ var binPath = Constants.System.Root + ",";
+ switch (objectType)
+ {
+ case UmbracoObjectTypes.Document:
+ binPath += Constants.System.RecycleBinContent;
+ break;
+ case UmbracoObjectTypes.Media:
+ binPath += Constants.System.RecycleBinMedia;
+ break;
+ default:
+ throw new ArgumentOutOfRangeException("objectType");
+ }
+ return binPath;
+ }
+
internal static int[] CombineStartNodes(UmbracoObjectTypes objectType, int[] groupSn, int[] userSn, IEntityService entityService)
{
// assume groupSn and userSn each don't contain duplicates
@@ -247,13 +257,17 @@ namespace Umbraco.Core.Models
var asn = groupSn.Concat(userSn).Distinct().ToArray();
var paths = entityService.GetAllPaths(objectType, asn).ToDictionary(x => x.Id, x => x.Path);
- paths[-1] = "-1"; // entityService does not get that one
+ paths[Constants.System.Root] = Constants.System.Root.ToString(); // entityService does not get that one
+
+ var binPath = GetBinPath(objectType);
var lsn = new List();
foreach (var sn in groupSn)
{
string snp;
- if (paths.TryGetValue(sn, out snp) == false) continue; // ignore
+ if (paths.TryGetValue(sn, out snp) == false) continue; // ignore rogue node (no path)
+
+ if (StartsWithPath(snp, binPath)) continue; // ignore bin
if (lsn.Any(x => StartsWithPath(snp, paths[x]))) continue; // skip if something above this sn
lsn.RemoveAll(x => StartsWithPath(paths[x], snp)); // remove anything below this sn
@@ -263,10 +277,12 @@ namespace Umbraco.Core.Models
var usn = new List();
foreach (var sn in userSn)
{
- if (groupSn.Contains(sn)) continue;
+ if (groupSn.Contains(sn)) continue; // ignore, already there
string snp;
- if (paths.TryGetValue(sn, out snp) == false) continue; // ignore
+ if (paths.TryGetValue(sn, out snp) == false) continue; // ignore rogue node (no path)
+
+ if (StartsWithPath(snp, binPath)) continue; // ignore bin
if (usn.Any(x => StartsWithPath(paths[x], snp))) continue; // skip if something below this sn
usn.RemoveAll(x => StartsWithPath(snp, paths[x])); // remove anything above this sn
diff --git a/src/Umbraco.Core/Services/EntityService.cs b/src/Umbraco.Core/Services/EntityService.cs
index a47d552ba5..6e4b5ef17c 100644
--- a/src/Umbraco.Core/Services/EntityService.cs
+++ b/src/Umbraco.Core/Services/EntityService.cs
@@ -370,13 +370,19 @@ namespace Umbraco.Core.Services
public IEnumerable GetPagedDescendants(IEnumerable ids, UmbracoObjectTypes umbracoObjectType, long pageIndex, int pageSize, out long totalRecords,
string orderBy = "path", Direction orderDirection = Direction.Ascending, string filter = "")
{
+ totalRecords = 0;
+
+ var idsA = ids.ToArray();
+ if (idsA.Length == 0)
+ return Enumerable.Empty();
+
var objectTypeId = umbracoObjectType.GetGuid();
+
using (var uow = UowProvider.GetUnitOfWork(readOnly: true))
{
var repository = RepositoryFactory.CreateEntityRepository(uow);
var query = Query.Builder;
- var idsA = ids.ToArray();
if (idsA.All(x => x != Constants.System.Root))
{
var clauses = new List>>();
diff --git a/src/Umbraco.Tests/Models/UserExtensionsTests.cs b/src/Umbraco.Tests/Models/UserExtensionsTests.cs
index 2b1f6c9e37..1e6c7664de 100644
--- a/src/Umbraco.Tests/Models/UserExtensionsTests.cs
+++ b/src/Umbraco.Tests/Models/UserExtensionsTests.cs
@@ -14,12 +14,15 @@ namespace Umbraco.Tests.Models
[TestFixture]
public class UserExtensionsTests
{
- [TestCase(2, "-1,1,2", "-1,1,2,3,4,5", true)]
- [TestCase(6, "-1,1,2,3,4,5,6", "-1,1,2,3,4,5", false)]
- [TestCase(-1, "-1", "-1,1,2,3,4,5", true)]
- [TestCase(5, "-1,1,2,3,4,5", "-1,1,2,3,4,5", true)]
- [TestCase(-1, "-1", "-1,-20,1,2,3,4,5", true)]
- [TestCase(1, "-1,-20,1", "-1,-20,1,2,3,4,5", false)]
+ [TestCase(-1, "-1", "-1,1,2,3,4,5", true)] // below root start node
+ [TestCase(2, "-1,1,2", "-1,1,2,3,4,5", true)] // below start node
+ [TestCase(5, "-1,1,2,3,4,5", "-1,1,2,3,4,5", true)] // at start node
+
+ [TestCase(6, "-1,1,2,3,4,5,6", "-1,1,2,3,4,5", false)] // above start node
+
+ [TestCase(-1, "-1", "-1,-20,1,2,3,4,5", true)] // below root start node, bin
+ [TestCase(1, "-1,-20,1", "-1,-20,1,2,3,4,5", false)] // below bin start node
+
public void Determines_Path_Based_Access_To_Content(int startNodeId, string startNodePath, string contentPath, bool outcome)
{
var userMock = new Mock();
@@ -27,15 +30,12 @@ namespace Umbraco.Tests.Models
var user = userMock.Object;
var content = Mock.Of(c => c.Path == contentPath && c.Id == 5);
- var entityServiceMock = new Mock();
- entityServiceMock.Setup(x => x.GetAll(It.IsAny(), It.IsAny()))
- .Returns(new[]
- {
- Mock.Of(entity => entity.Id == startNodeId && entity.Path == startNodePath)
- });
- var entityService = entityServiceMock.Object;
+ var esmock = new Mock();
+ esmock
+ .Setup(x => x.GetAllPaths(It.IsAny(), It.IsAny()))
+ .Returns((type, ids) => new [] { new EntityPath { Id = startNodeId, Path = startNodePath } });
- Assert.AreEqual(outcome, user.HasPathAccess(content, entityService));
+ Assert.AreEqual(outcome, user.HasPathAccess(content, esmock.Object));
}
[TestCase("", "1", "1")] // single user start, top level
@@ -52,6 +52,9 @@ namespace Umbraco.Tests.Models
[TestCase("3", "2,5", "2,5")] // user and group start, restrict
[TestCase("3", "2,1", "2,1")] // user and group start, expand
+ [TestCase("3,8", "2,6", "3,2")] // exclude bin
+ [TestCase("", "6", "")] // exclude bin
+
public void CombineStartNodes(string groupSn, string userSn, string expected)
{
// 1
@@ -59,15 +62,23 @@ namespace Umbraco.Tests.Models
// 5
// 2
// 4
+ // bin
+ // 6
+ // 7
+ // 8
var paths = new Dictionary
{
- { 1, "-1, 1" },
- { 2, "-1, 2" },
- { 3, "-1, 1, 3" },
- { 4, "-1, 2, 4" },
- { 5, "-1, 1, 3, 5" },
+ { 1, "-1,1" },
+ { 2, "-1,2" },
+ { 3, "-1,1,3" },
+ { 4, "-1,2,4" },
+ { 5, "-1,1,3,5" },
+ { 6, "-1,-20,6" },
+ { 7, "-1,-20,7" },
+ { 8, "-1,-20,7,8" },
};
+
var esmock = new Mock();
esmock
.Setup(x => x.GetAllPaths(It.IsAny(), It.IsAny()))
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js
index 9c5a2b888c..d58234b493 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js
@@ -91,7 +91,7 @@ angular.module("umbraco").controller("Umbraco.Overlays.LinkPickerController",
userService.getCurrentUser().then(function (userData) {
$scope.mediaPickerOverlay = {
view: "mediapicker",
- startNodeId: userData.startMediaIds.length == 0 ? -1 : userData.startMediaIds[0],
+ startNodeId: userData.startMediaIds.length !== 1 ? -1 : userData.startMediaIds[0],
show: true,
submit: function(model) {
var media = model.selectedImages[0];
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js
index fb38581eac..59118b9b8f 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js
@@ -17,6 +17,8 @@ angular.module("umbraco")
$scope.cropSize = dialogOptions.cropSize;
$scope.lastOpenedNode = localStorageService.get("umbLastOpenedMediaNodeId");
+ $scope.canFolderInput = true; // FIXME only if ... ?
+
var umbracoSettings = Umbraco.Sys.ServerVariables.umbracoSettings;
var allowedUploadFiles = mediaHelper.formatFileTypes(umbracoSettings.allowedUploadFiles);
if ($scope.onlyImages) {
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.html b/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.html
index ab745f0f75..4fd8bff7d9 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.html
+++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.html
@@ -48,7 +48,7 @@
/
-
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/editors/media.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/editors/media.controller.js
index 57f7d06f80..062762cf17 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/editors/media.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/editors/media.controller.js
@@ -4,7 +4,7 @@ angular.module("umbraco")
if (!$scope.model.config.startNodeId) {
userService.getCurrentUser().then(function (userData) {
- $scope.model.config.startNodeId = userData.startMediaIds.length === 0 ? -1 : userData.startMediaIds[0];
+ $scope.model.config.startNodeId = userData.startMediaIds.length !== 1 ? -1 : userData.startMediaIds[0];
});
}
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/editors/rte.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/editors/rte.controller.js
index 6ec9e74fa4..99c3fd80ff 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/editors/rte.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/editors/rte.controller.js
@@ -28,7 +28,7 @@
currentTarget: currentTarget,
onlyImages: true,
showDetails: true,
- startNodeId: userData.startMediaIds.length === 0 ? -1 : userData.startMediaIds[0],
+ startNodeId: userData.startMediaIds.length !== 1 ? -1 : userData.startMediaIds[0],
view: "mediapicker",
show: true,
submit: function(model) {
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js
index d09c89c445..6cde701c1b 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js
@@ -10,7 +10,7 @@ angular.module('umbraco').controller("Umbraco.PropertyEditors.MediaPickerControl
if (!$scope.model.config.startNodeId) {
userService.getCurrentUser().then(function (userData) {
- $scope.model.config.startNodeId = userData.startMediaIds.length === 0 ? -1 : userData.startMediaIds[0];
+ $scope.model.config.startNodeId = userData.startMediaIds.length !== 1 ? -1 : userData.startMediaIds[0];
});
}
@@ -45,7 +45,7 @@ angular.module('umbraco').controller("Umbraco.PropertyEditors.MediaPickerControl
$scope.ids.push(media.udi);
}
else {
- $scope.ids.push(media.id);
+ $scope.ids.push(media.id);
}
}
});
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js
index 485b674594..b050e22f2d 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js
@@ -286,7 +286,7 @@ angular.module("umbraco")
onlyImages: true,
showDetails: true,
disableFolderSelect: true,
- startNodeId: userData.startMediaIds.length === 0 ? -1 : userData.startMediaIds[0],
+ startNodeId: userData.startMediaIds.length !== 1 ? -1 : userData.startMediaIds[0],
view: "mediapicker",
show: true,
submit: function(model) {
diff --git a/src/Umbraco.Web/Editors/EntityController.cs b/src/Umbraco.Web/Editors/EntityController.cs
index b22ce81784..e3e9abfaf7 100644
--- a/src/Umbraco.Web/Editors/EntityController.cs
+++ b/src/Umbraco.Web/Editors/EntityController.cs
@@ -547,6 +547,8 @@ namespace Umbraco.Web.Editors
if (id == Constants.System.Root)
{
+ // root is special: we reduce it to start nodes
+
int[] aids = null;
switch (type)
{
@@ -558,9 +560,9 @@ namespace Umbraco.Web.Editors
break;
}
- entities = aids != null && aids.Length > 0
- ? Services.EntityService.GetPagedDescendants(aids, objectType.Value, pageNumber - 1, pageSize, out totalRecords, orderBy, orderDirection, filter)
- : Services.EntityService.GetPagedDescendantsFromRoot(objectType.Value, pageNumber - 1, pageSize, out totalRecords, orderBy, orderDirection, filter, includeTrashed: false);
+ entities = aids == null || aids.Contains(Constants.System.Root)
+ ? Services.EntityService.GetPagedDescendantsFromRoot(objectType.Value, pageNumber - 1, pageSize, out totalRecords, orderBy, orderDirection, filter, includeTrashed: false)
+ : Services.EntityService.GetPagedDescendants(aids, objectType.Value, pageNumber - 1, pageSize, out totalRecords, orderBy, orderDirection, filter);
}
else
{
@@ -676,6 +678,8 @@ namespace Umbraco.Web.Editors
string type;
var searcher = Constants.Examine.InternalSearcher;
var fields = new[] { "id", "__NodeId" };
+
+ totalFound = 0;
//TODO: WE should really just allow passing in a lucene raw query
switch (entityType)
@@ -694,15 +698,21 @@ namespace Umbraco.Web.Editors
case UmbracoEntityTypes.Media:
type = "media";
+ var mediaStartNodeIds = Security.CurrentUser.CalculateMediaStartNodeIds(Services.EntityService);
+ if (mediaStartNodeIds.Length == 0) return Enumerable.Empty();
+
AddExamineSearchFrom(searchFrom, sb);
- AddExamineUserStartNode(Security.CurrentUser.CalculateMediaStartNodeIds(Services.EntityService), sb);
+ AddExamineUserStartNode(mediaStartNodeIds, sb);
break;
case UmbracoEntityTypes.Document:
type = "content";
+ var contentStartNodeIds = Security.CurrentUser.CalculateContentStartNodeIds(Services.EntityService);
+ if (contentStartNodeIds.Length == 0) return Enumerable.Empty();
+
AddExamineSearchFrom(searchFrom, sb);
- AddExamineUserStartNode(Security.CurrentUser.CalculateContentStartNodeIds(Services.EntityService), sb);
+ AddExamineUserStartNode(contentStartNodeIds, sb);
break;
default:
@@ -957,7 +967,7 @@ namespace Umbraco.Web.Editors
break;
}
- if (aids != null && aids.Length > 0)
+ if (aids != null)
{
var lids = new List();
var ok = false;
diff --git a/src/Umbraco.Web/Trees/ContentTreeController.cs b/src/Umbraco.Web/Trees/ContentTreeController.cs
index 2dde698a28..c3eab40300 100644
--- a/src/Umbraco.Web/Trees/ContentTreeController.cs
+++ b/src/Umbraco.Web/Trees/ContentTreeController.cs
@@ -43,8 +43,8 @@ namespace Umbraco.Web.Trees
{
var node = base.CreateRootNode(queryStrings);
- //if the user's start node is not default, then ensure the root doesn't have a menu
- if (UserStartNodes.Length > 0 && UserStartNodes.Contains(Constants.System.Root) == false)
+ // if the user's start node is not default, then ensure the root doesn't have a menu
+ if (UserStartNodes.Contains(Constants.System.Root) == false)
{
node.MenuUrl = "";
}
@@ -123,8 +123,8 @@ namespace Umbraco.Web.Trees
{
var menu = new MenuItemCollection();
- //if the user's start node is not the root then ensure the root menu is empty/doesn't exist
- if (UserStartNodes.Length > 0 && UserStartNodes.Contains(Constants.System.Root) == false)
+ // if the user's start node is not the root then ensure the root menu is empty/doesn't exist
+ if (UserStartNodes.Contains(Constants.System.Root) == false)
{
return menu;
}
diff --git a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
index f8e8bec293..fa18e703bd 100644
--- a/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
+++ b/src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
@@ -105,7 +105,7 @@ namespace Umbraco.Web.Trees
// Therefore, in the latter case, we want to change the id to -1 since we want to render the current user's root node
// and the GetChildEntities method will take care of rendering the correct root node.
// If it is in dialog mode, then we don't need to change anything and the children will just render as per normal.
- if (IsDialog(queryStrings) == false && UserStartNodes.Length > 0 && UserStartNodes.Contains(Constants.System.Root) == false)
+ if (IsDialog(queryStrings) == false && UserStartNodes.Contains(Constants.System.Root) == false)
{
id = Constants.System.Root.ToString(CultureInfo.InvariantCulture);
}
@@ -128,7 +128,6 @@ namespace Umbraco.Web.Trees
// look up from GUID if it's not an integer
if (int.TryParse(id, out iid) == false)
{
-
var idEntity = GetEntityFromId(id);
if (idEntity == null)
{
@@ -137,13 +136,13 @@ namespace Umbraco.Web.Trees
iid = idEntity.Id;
}
-
- //if a request is made for the root node data but the user's start node is not the default, then
- // we need to return their start nodes
- if (iid == Constants.System.Root && UserStartNodes.Length > 0 && UserStartNodes.Contains(Constants.System.Root) == false)
+ // if a request is made for the root node but user has no access to
+ // root node, return start nodes instead
+ if (iid == Constants.System.Root && UserStartNodes.Contains(Constants.System.Root) == false)
{
- var nodes = Services.EntityService.GetAll(UmbracoObjectType, UserStartNodes);
- return nodes;
+ return UserStartNodes.Length > 0
+ ? Services.EntityService.GetAll(UmbracoObjectType, UserStartNodes)
+ : Enumerable.Empty();
}
return Services.EntityService.GetChildren(iid, UmbracoObjectType).ToArray();
@@ -169,7 +168,7 @@ namespace Umbraco.Web.Trees
protected sealed override TreeNodeCollection GetTreeNodes(string id, FormDataCollection queryStrings)
{
//check if we're rendering the root
- if (id == Constants.System.Root.ToInvariantString() && (UserStartNodes.Length == 0 || UserStartNodes.Contains(Constants.System.Root)))
+ if (id == Constants.System.Root.ToInvariantString() && UserStartNodes.Contains(Constants.System.Root))
{
var altStartId = string.Empty;
diff --git a/src/Umbraco.Web/Trees/MediaTreeController.cs b/src/Umbraco.Web/Trees/MediaTreeController.cs
index f3d583f1e3..82925cf445 100644
--- a/src/Umbraco.Web/Trees/MediaTreeController.cs
+++ b/src/Umbraco.Web/Trees/MediaTreeController.cs
@@ -34,8 +34,9 @@ namespace Umbraco.Web.Trees
protected override TreeNode CreateRootNode(FormDataCollection queryStrings)
{
var node = base.CreateRootNode(queryStrings);
- //if the user's start node is not default, then ensure the root doesn't have a menu
- if (UserStartNodes.Length > 0 && UserStartNodes.Contains(Constants.System.Root) == false)
+
+ // if the user's start node is not default, then ensure the root doesn't have a menu
+ if (UserStartNodes.Contains(Constants.System.Root) == false)
{
node.MenuUrl = "";
}
@@ -101,7 +102,7 @@ namespace Umbraco.Web.Trees
if (id == Constants.System.Root.ToInvariantString())
{
//if the user's start node is not the root then ensure the root menu is empty/doesn't exist
- if (UserStartNodes.Length > 0 && UserStartNodes.Contains(Constants.System.Root) == false)
+ if (UserStartNodes.Contains(Constants.System.Root) == false)
{
return menu;
}
From ff87d8b4142c05e0398c26fa3f64572c09db0a6e Mon Sep 17 00:00:00 2001
From: Shannon
Date: Wed, 26 Jul 2017 17:18:05 +1000
Subject: [PATCH 10/16] Make sure the migration explicitly specifies that -1 is
that start node for all built in groups
---
.../TargetVersionSevenSevenZero/AddUserGroupTables.cs | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs
index 127e1baca5..60865afbfd 100644
--- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs
@@ -94,8 +94,14 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZe
WHERE u.id = 0");
// Rename some groups for consistency (plural form)
- Execute.Sql("UPDATE umbracoUserGroup SET userGroupName = 'Writers' WHERE userGroupName = 'Writer'");
- Execute.Sql("UPDATE umbracoUserGroup SET userGroupName = 'Translators' WHERE userGroupName = 'Translator'");
+ Execute.Sql("UPDATE umbracoUserGroup SET userGroupName = 'Writers' WHERE userGroupAlias = 'writer'");
+ Execute.Sql("UPDATE umbracoUserGroup SET userGroupName = 'Translators' WHERE userGroupAlias = 'translator'");
+
+ //Ensure all built in groups have a start node of -1
+ Execute.Sql("UPDATE umbracoUserGroup SET startContentId = -1 WHERE userGroupAlias = 'editor'");
+ Execute.Sql("UPDATE umbracoUserGroup SET startContentId = -1 WHERE userGroupAlias = 'writer'");
+ Execute.Sql("UPDATE umbracoUserGroup SET startContentId = -1 WHERE userGroupAlias = 'translator'");
+ Execute.Sql("UPDATE umbracoUserGroup SET startContentId = -1 WHERE userGroupAlias = 'admin'");
}
private void MigrateUserPermissions()
From 6d9190bdb3bcae2e8aede3a3640744a5664af294 Mon Sep 17 00:00:00 2001
From: Shannon
Date: Wed, 26 Jul 2017 17:24:26 +1000
Subject: [PATCH 11/16] ensures all built in groups have -1 as start nodes for
media, fixes automapper tests
---
.../TargetVersionSevenSevenZero/AddUserGroupTables.cs | 4 ++++
src/Umbraco.Web/Models/Mapping/UserModelMapper.cs | 2 ++
2 files changed, 6 insertions(+)
diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs
index 60865afbfd..d1cf0a40d9 100644
--- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs
+++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenSevenZero/AddUserGroupTables.cs
@@ -99,9 +99,13 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSevenZe
//Ensure all built in groups have a start node of -1
Execute.Sql("UPDATE umbracoUserGroup SET startContentId = -1 WHERE userGroupAlias = 'editor'");
+ Execute.Sql("UPDATE umbracoUserGroup SET startMediaId = -1 WHERE userGroupAlias = 'editor'");
Execute.Sql("UPDATE umbracoUserGroup SET startContentId = -1 WHERE userGroupAlias = 'writer'");
+ Execute.Sql("UPDATE umbracoUserGroup SET startMediaId = -1 WHERE userGroupAlias = 'writer'");
Execute.Sql("UPDATE umbracoUserGroup SET startContentId = -1 WHERE userGroupAlias = 'translator'");
+ Execute.Sql("UPDATE umbracoUserGroup SET startMediaId = -1 WHERE userGroupAlias = 'translator'");
Execute.Sql("UPDATE umbracoUserGroup SET startContentId = -1 WHERE userGroupAlias = 'admin'");
+ Execute.Sql("UPDATE umbracoUserGroup SET startMediaId = -1 WHERE userGroupAlias = 'admin'");
}
private void MigrateUserPermissions()
diff --git a/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs b/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs
index 6dcd88eae4..f9379d7407 100644
--- a/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs
+++ b/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs
@@ -44,6 +44,7 @@ namespace Umbraco.Web.Models.Mapping
.ForMember(dest => dest.Id, map => map.Condition(source => GetIntId(source.Id) > 0))
.ForMember(detail => detail.SessionTimeout, opt => opt.Ignore())
.ForMember(detail => detail.EmailConfirmedDate, opt => opt.Ignore())
+ .ForMember(detail => detail.UserType, opt => opt.Ignore())
.ForMember(detail => detail.InvitedDate, opt => opt.Ignore())
.ForMember(detail => detail.SecurityStamp, opt => opt.Ignore())
.ForMember(detail => detail.Avatar, opt => opt.Ignore())
@@ -74,6 +75,7 @@ namespace Umbraco.Web.Models.Mapping
.ForMember(detail => detail.Id, opt => opt.Ignore())
.ForMember(detail => detail.StartContentIds, opt => opt.Ignore())
.ForMember(detail => detail.StartMediaIds, opt => opt.Ignore())
+ .ForMember(detail => detail.UserType, opt => opt.Ignore())
.ForMember(detail => detail.Language, opt => opt.Ignore())
.ForMember(detail => detail.Username, opt => opt.Ignore())
.ForMember(detail => detail.PasswordQuestion, opt => opt.Ignore())
From b8e2e49a440d6692c82ac203031b660d2be5f78b Mon Sep 17 00:00:00 2001
From: Shannon
Date: Wed, 26 Jul 2017 17:50:58 +1000
Subject: [PATCH 12/16] Updates to latest Katana libs
---
src/SQLCE4Umbraco/app.config | 8 +++---
src/Umbraco.Core/Umbraco.Core.csproj | 20 ++++++---------
src/Umbraco.Core/app.config | 8 +++---
src/Umbraco.Core/packages.config | 8 +++---
src/Umbraco.Tests.Benchmarks/App.config | 8 +++---
src/Umbraco.Tests/App.config | 4 +--
src/Umbraco.Web.UI.Client/bower.json | 2 +-
src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 25 ++++++++-----------
src/Umbraco.Web.UI/packages.config | 10 ++++----
src/Umbraco.Web.UI/web.Template.Debug.config | 8 +++---
src/Umbraco.Web.UI/web.Template.config | 8 +++---
src/Umbraco.Web/Umbraco.Web.csproj | 25 ++++++++-----------
src/Umbraco.Web/app.config | 8 +++---
src/Umbraco.Web/packages.config | 10 ++++----
src/UmbracoExamine/app.config | 8 +++---
src/umbraco.MacroEngines/app.config | 8 +++---
src/umbraco.businesslogic/app.config | 8 +++---
src/umbraco.businesslogic/packages.config | 2 +-
.../umbraco.businesslogic.csproj | 5 ++--
src/umbraco.cms/app.config | 8 +++---
src/umbraco.controls/app.config | 8 +++---
src/umbraco.datalayer/app.config | 8 +++---
src/umbraco.editorControls/app.config | 8 +++---
src/umbraco.providers/app.config | 8 +++---
24 files changed, 104 insertions(+), 119 deletions(-)
diff --git a/src/SQLCE4Umbraco/app.config b/src/SQLCE4Umbraco/app.config
index fb4b506207..95a7e73c9e 100644
--- a/src/SQLCE4Umbraco/app.config
+++ b/src/SQLCE4Umbraco/app.config
@@ -16,19 +16,19 @@