Compare commits

...

755 Commits

Author SHA1 Message Date
Stephan 9a06c3a5ff Implement ILocalizationService.GetDictionaryItemKeyMap 2017-09-04 11:31:20 +02:00
Sebastiaan Janssen 44102df36f Merge pull request #2167 from umbraco/temp-U4-10370
U4-10370 Culture and hostnames with "æøå" after /
2017-09-04 11:25:55 +02:00
Sebastiaan Janssen 617a91c57e Merge pull request #2119 from umbraco/temp-U4-10274
U4-10274 Umbraco.MemberHasAccess isn't cached
2017-09-01 15:45:55 +02:00
Sebastiaan Janssen cb0e5414b9 Merge pull request #2155 from umbraco/temp-U4-10361
U4-10361 Creating new member when `AllowManuallyChangingPassword="fal…
2017-09-01 14:46:58 +02:00
Claus 22cef52261 removing using. 2017-09-01 13:50:51 +02:00
Claus 41e419a49e U4-10370 Culture and hostnames with "æøå" after / 2017-09-01 13:48:39 +02:00
Stephan efbe97a01d Merge pull request #2149 from umbraco/temp-deploy-358
Updates the underlying event args base class's AdditionalData diction…
2017-08-31 18:25:07 +02:00
Stephan 0babb7f28a deploy-358 - reduce allocations in CancellableEventArgs 2017-08-31 18:03:34 +02:00
Stephan 5ba801386c Merge branch 'dev-v7' into temp-deploy-358 2017-08-31 18:03:19 +02:00
Shannon 8c998fd4e6 Creates a virtual ConfigureUmbracoUserManager in UmbracoDefaultOwinStartup so inheritors can just override that if they want to simplify the startup owin code process 2017-08-30 11:02:58 +10:00
Shannon Deminick 88f332f5c7 Merge pull request #2157 from umbraco/temp-U4-10367
U4-10367 417 missing token error due to cookie being overwritten
2017-08-30 10:54:29 +10:00
Sebastiaan Janssen a1b9842215 Merge pull request #2131 from bjarnef/dev-v7-U4-10281
U4-10281 - Fix maxchars javascript errors on macro parameter editors
2017-08-29 11:23:16 +02:00
Sebastiaan Janssen d300bf8d6d U4-10367 417 missing token error due to cookie being overwritten
Changes the cookie and header names to be Umbraco specific
2017-08-29 11:17:52 +02:00
Shannon 78e66ce25f ok, hope this fixes tests 2017-08-29 16:34:30 +10:00
Shannon dcc0374464 trying to fix unit tests 2017-08-29 15:18:16 +10:00
Shannon a95afa610f updates unit test config to work with new unit tests 2017-08-29 12:01:32 +10:00
Shannon 13e2112c3c U4-10361 Creating new member when AllowManuallyChangingPassword="false" - can't set a password 2017-08-29 11:56:38 +10:00
Shannon Deminick cf10f5f0ee Merge pull request #2154 from umbraco/temp-U4-10363
U4-10363 417 missing token error due to invalid cookie name
2017-08-29 11:11:35 +10:00
Shannon ca00246236 another update to perform a little better again (cookies are read VERY often) 2017-08-29 11:10:28 +10:00
Shannon d71b8a139f Moves GetCookieValue to an extension method, cleans up code, adds unit tests 2017-08-29 10:50:20 +10:00
Sebastiaan Janssen 6bf0d6e175 U4-10363 417 missing token error due to invalid cookie name
Manually parse the cookie header instead of using the buggy extension method
2017-08-28 20:36:56 +02:00
Sebastiaan Janssen 7a0c6ab975 Merge pull request #2135 from umbraco/temp-U4-10301
U4-10301 Change the PluginManager hash to use more reliable and consi…
2017-08-28 11:44:40 +02:00
Stephan 49d5005453 Merge pull request #2151 from umbraco/temp-U4-10358
U4-10358 Upgrade error from 7.1.8 to 7.6.5: The index 'IX_umbracoNode…
2017-08-26 15:26:41 +02:00
Sebastiaan Janssen f2db0fe80e U4-10358 Upgrade error from 7.1.8 to 7.6.5: The index 'IX_umbracoNodeUniqueID' is dependent on column 'uniqueID'
Removes migration that would add wrongly named index to a table, only to immediately be removed again in 7.3.0
2017-08-25 22:00:41 +02:00
Sebastiaan Janssen 9917fb20ca U4-10356 Update default Config/Lang after each update
Also makes sure UserExtensions returns the correct language
2017-08-25 16:13:04 +02:00
Shannon e71e9d7efb U4-10249 FolderAndFilePermissions HealthCheck causes the application to restart
(cherry picked from commit bdb991f6dc)
2017-08-24 18:51:53 +02:00
Shannon 93cd03da28 minor code cleanup 2017-08-24 18:38:40 +10:00
Shannon 1dade7bfd2 fixes tests 2017-08-24 17:22:33 +10:00
Shannon c3b1aa36b8 Updates remaining services with one event arg instance for both event pairs to flow the EventState 2017-08-24 17:19:57 +10:00
Shannon 9cc466775d Updates more services to only have one event arg instance per event pair to flow through EventState 2017-08-24 16:50:12 +10:00
Shannon d0a91bf98b Updates ContentTypeService to ensure a single event args instance is created per event pair so that EventState flows. 2017-08-24 16:35:09 +10:00
Shannon 085c06e043 Adds EventState to the event args instead of trying to change the AdditionalData which is a breaking change. Updates FileService and ContentService to use one event arg insteance for both before/after events so that the EventState flows and so we are allocating less objects. 2017-08-24 16:22:50 +10:00
Shannon 1e45f85f7c Updates the underlying event args base class's AdditionalData dictionary to be IDictionary instead of ReadOnlyDictionary. Ensures the same args are used for both events when Deleting Templates. 2017-08-24 15:21:54 +10:00
Shannon a0785f2e0d backports U4-10349 Optimize EnsureUniqueNodeName 2017-08-23 16:22:01 +10:00
Mads Rasmussen 583302faa2 Merge pull request #2077 from abryukhov/temp-U4-10200
U4-10200 Listview layouts - empty state not localized
2017-08-21 21:37:01 +02:00
Sebastiaan Janssen 4404ce94c5 Merge pull request #2142 from abjerner/patch-17
Typo
2017-08-21 14:24:52 +02:00
Anders Bjerner 86bc701511 Typo
Very minor typo, but still ;)
2017-08-21 14:16:01 +02:00
Stephan a86902bd91 Merge pull request #2128 from umbraco/temp-U4-10289
U4-10289 IdkMap cache can cause the entity service to return invalid …
2017-08-18 21:45:35 +02:00
Mads Rasmussen 7bdf76ffa7 Merge pull request #2098 from bjarnef/dev-v7-U4-10242
U4-10242 - Remove bottom margin of subtitle paragraph
2017-08-18 14:21:08 +02:00
Claus 528656a337 using val.value directly. 2017-08-18 11:44:44 +02:00
Mads Rasmussen 5ef46ad8df Merge pull request #2048 from umbraco/temp-U4-7497
Pressing Enter/Backspace in repeatable text strings now adds/removes text boxes
2017-08-18 11:34:52 +02:00
Mads Rasmussen 168dc0e5da small UX refinements 2017-08-18 11:24:51 +02:00
Claus 5a1fc91f3e simplified it a bit. 2017-08-17 12:50:15 +02:00
Robert 5e6b5a5cc1 Added a check so it's not possibile to delete the texboxes that are set as minimum 2017-08-17 12:09:20 +02:00
Robert 7213e3a6a0 Adding and removing text boxes should work properly now
Thanks Mads :)
2017-08-17 12:06:32 +02:00
Mads Rasmussen 217ca62ea0 Merge pull request #2099 from bjarnef/dev-v7-U4-10152
U4-10152 - Fix typo in localization of placeholder text
2017-08-17 11:09:40 +02:00
Mads Rasmussen d216d5755c Merge pull request #2094 from skttl/patch-6
U4-10225: Notification banner floats above context menu
2017-08-17 10:55:37 +02:00
Claus 8db748b738 Merge pull request #2123 from umbraco/temp-U4-7382-2
U4-7382 Text Properties Containing JSON Are Corrupted on Publish
2017-08-17 10:43:51 +02:00
Shannon 300c9aa258 fix test 2017-08-17 12:10:34 +10:00
Shannon f7097d571c U4-10301 Change the PluginManager hash to use more reliable and consistent hashes 2017-08-17 11:38:57 +10:00
Mads Rasmussen b151c39c3b Merge pull request #2097 from skttl/patch-9
U4-10232 Unsaved changes alert overlaps borders
2017-08-16 16:15:49 +02:00
Claus 542406c402 Merge pull request #2130 from umbraco/temp-U4-10136
U4-10136 Broken link to package action documentation
2017-08-15 11:02:52 +02:00
Claus c44b903261 changed to private structs and made immutable. 2017-08-15 10:10:40 +02:00
Bjarne Fyrstenborg c68d7a33ca Fix maxchars javascript errors on macro parameter editors 2017-08-14 19:57:28 +02:00
Robert 2773102441 Fixed tag 2017-08-14 14:58:48 +02:00
Claus ef0d6eff2c Merge pull request #2124 from umbraco/mikecp-U4-8967
U4-8967 Linkpicker localization issue
2017-08-14 14:58:31 +02:00
Robert 1efad78214 Package-actions link updated 2017-08-14 14:58:05 +02:00
Claus 46b2d8a4aa implement equality comparison to prevent duplicates in when used in dictionaries. 2017-08-14 13:34:47 +02:00
Claus 7a5cb7058b U4-10289 IdkMap cache can cause the entity service to return invalid results 2017-08-14 11:38:13 +02:00
Robert c1c2339827 U4-8967 Linkpicker localization issue
Did a few modifications to the PR - reverted back the default translations for "content_nodeName" and "content_urls" as they are being used in other places.
To fix this, I have created two new keys that are used only in the linkpicker :)
2017-08-11 10:31:04 +02:00
Shannon 0e273d1a08 U4-7382 Text Properties Containing JSON Are Corrupted on Publish 2017-08-11 15:11:53 +10:00
Mads Rasmussen 125c378274 fixes: U4-4848 If "Save and Publish" is clicked before page finishes loading, data is lost from MNTP 2017-08-10 14:11:48 +02:00
mikkelhm ca80a0cddc Bump version to 7.6.6 2017-08-10 08:41:06 +02:00
Shannon 21707f9e08 Updates the GetMemberGroupsForMember with a username to be a single query 2017-08-10 14:22:30 +10:00
Shannon d8cfd8f12e U4-10274 Umbraco.MemberHasAccess isn't cached 2017-08-10 13:46:18 +10:00
Mads Rasmussen 08150c05e9 Merge pull request #1971 from Bitmapped/U4-9977
Fix U4-9977
2017-08-09 13:28:04 +02:00
Mads Rasmussen 688f8c4170 Merge pull request #2053 from bjarnef/dev-v7-U4-10161
U4-10161 - Update localization of email
2017-08-09 11:51:05 +02:00
Mads Rasmussen 31cbb79ede Translate zip-code 2017-08-09 11:48:15 +02:00
Shannon Deminick 305ce84ef5 Merge pull request #2111 from umbraco/temp-U4-10266
U4-10266 Package installer need to handle files before handling entities
2017-08-09 19:47:45 +10:00
Shannon c6d7056a64 Updated to return nulls as opposed to the ex being caught with a meaningful message 2017-08-09 19:44:37 +10:00
Bitmapped 7db1055a0d Remove JSON files, which appear to be unnecessary. 2017-08-08 13:54:36 -04:00
Claus d625388786 U4-10266 Package installer need to handle files before handling entities 2017-08-08 13:10:33 +02:00
Claus fa1663ed51 Fixes build script to work with VS 2017 (only) and fixes BuildBelle since it didn't work and is missing tools 2017-08-08 13:08:29 +02:00
mikkelhm ca0de5acd3 Fix more xml format issues in pl.xml 2017-08-07 21:58:45 +02:00
mikkelhm 27168722ab fix xml in pl.xml 2017-08-07 20:33:49 +02:00
Sebastiaan Janssen 6dbeba0763 Merge pull request #2103 from ronaldbarendse/U4-10252
U4-10252: Slider property editor initial values not used when equal (range enabled)
2017-08-07 08:10:49 +02:00
Ronald Barendse 00e0f83c8e Fixed U4-10252
Umbraco.Slider property editor did not use the correct initial values
when range was enabled and both values were equal.
2017-08-06 22:41:20 +02:00
Bjarne Fyrstenborg 68ba0ca1e2 Fix typo in localization of placeholder text 2017-08-03 21:45:01 +02:00
Bjarne Fyrstenborg b22e9d0911 Remove bottom margin of subtitle paragraph 2017-08-03 21:35:03 +02:00
Søren Kottal 6a59a90964 Moves .alert-form.-no-border slightly
Moves .alert-form.-no-border slightly, so borders beneath are visible
2017-08-02 20:49:20 +02:00
Søren Kottal 26a042f291 U4-10225: Bumps z-index of #leftcolumn
http://issues.umbraco.org/issue/U4-10225

This bumps the z-index of #leftcolumn, so the notifications don't get in the way.
2017-08-02 19:41:55 +02:00
Sebastiaan Janssen 136b3db098 Merge pull request #2071 from umbraco/temp-U4-10123
U4-10123 Make sure the backoffice login is not susceptible to DOS att…
2017-08-01 17:16:31 +02:00
Sebastiaan Janssen 21f46d0a3c Adds debug level logging for failed attempts to get filestream 2017-08-01 09:16:39 +02:00
Sebastiaan Janssen 7fafea2370 Merge pull request #2087 from umbraco/temp-u4-10213
PluginManager - implement retries on list file
2017-07-31 17:03:55 +02:00
Stephan 86c37c7f6d PluginManager - fix 2017-07-31 16:38:39 +02:00
Stephan 7dd9f3e766 PluginManager - implement retries on list file 2017-07-31 16:24:22 +02:00
Alexander Bryukhov 6c91d54372 U4-10200 Listview layouts - empty state not localized 2017-07-26 10:24:03 +07:00
Shannon 1ccc8cc161 U4-10123 Make sure the backoffice login is not susceptible to DOS attacks 2017-07-25 19:40:30 +10:00
Stephan c5e7e1e39e U4-10144 - dont break again 2017-07-24 14:05:04 +02:00
Shannon db2a35dbce fixes a localized key that doesn't exist 2017-07-24 20:23:54 +10:00
Sebastiaan Janssen 3d006f1e08 Merge pull request #2065 from akierczynska/patch-2
Update pl.xml to match en.xml
2017-07-24 09:30:33 +02:00
akierczynska e0c891719f Update pl.xml to match en.xml
Updating pl.xml with new keys to match en.xml
2017-07-24 00:04:11 +01:00
Sebastiaan Janssen 89a14c13e5 Merge pull request #2060 from soreng/patch-4
Changed name of argument in validation
2017-07-21 15:14:33 +02:00
Sebastiaan Janssen ca9aa21c7b Merge pull request #2064 from pijemcolu/temp-U4-10187
U4-10187 - Fix link to training in Backoffice -> Settings->Dashboard
2017-07-21 14:42:49 +02:00
Stephan c0eaeb3168 Fix tests with issues 2017-07-21 13:06:23 +02:00
pijemcolu 74e16c0f8d fix link to training in Settings->Dashboard 2017-07-21 10:14:07 +02:00
Stephan f8fac9f84e U4-9430 - fix 2017-07-20 10:21:21 +02:00
Stephan 83ce359234 Merge pull request #1992 from Bitmapped/U4-9430
U4-9430 Fix
2017-07-20 10:20:06 +02:00
Søren Gregersen 2c64f91b25 Changed name of argument in validation
Minor change... :)
2017-07-19 22:23:22 +02:00
Sebastiaan Janssen e702fe2877 Merge pull request #2055 from dawoe/patch-2
Fix value converter work for legacy media picker
2017-07-19 12:31:46 +02:00
Sebastiaan Janssen 9d55656ae9 Merge pull request #2058 from umbraco/temp-u4-10128
U4-10128 - GetKey unwraps
2017-07-19 12:26:12 +02:00
Stephan d57de05453 U4-10128 - super improve 2017-07-19 12:24:00 +02:00
Stephan 11e4bf5de8 U4-10128 - improve 2017-07-19 12:08:31 +02:00
Stephan 82661d9af4 U4-10128 - GetKey unwraps 2017-07-19 11:51:46 +02:00
Dave Woestenborghs 56cff6bba8 implemented suggestions from @jeavon 2017-07-18 17:11:49 +02:00
Dave Woestenborghs 6b289e1a7d Fix value converter work for legacy media picker
Fix for issue http://issues.umbraco.org/issue/U4-10178
2017-07-18 14:44:57 +02:00
Bjarne Fyrstenborg 50d7114209 Update localization of email 2017-07-18 00:07:22 +02:00
Sebastiaan Janssen 91fa583f62 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2017-07-17 22:15:24 +02:00
Sebastiaan Janssen 23d91fd350 Adds removed method back in case someone is using it (would be breaking otherwise) 2017-07-17 22:14:59 +02:00
Sebastiaan Janssen d4714e1580 Merge pull request #2052 from umbraco/dev-v7.6
Oops was targeting old branch :)
2017-07-17 22:12:47 +02:00
Sebastiaan Janssen 2b22e6a784 Merge pull request #1940 from AndyButland/u4-9892
U4-9892 - ordered media types when returned for create dialog
2017-07-17 22:09:00 +02:00
Sebastiaan Janssen 59840926c8 Merge pull request #1952 from callumbwhyte/U4-9934
U4 9934: Fixes deleting members in list view using custom membership provider
2017-07-17 22:01:33 +02:00
Sebastiaan Janssen 338c7cc5a6 Merge branch 'callumbwhyte-U4-9934' into dev-v7 2017-07-17 21:31:43 +02:00
Sebastiaan Janssen 77850aea18 Merge branch 'U4-9934' of https://github.com/callumbwhyte/Umbraco-CMS into callumbwhyte-U4-9934 2017-07-17 21:31:25 +02:00
Sebastiaan Janssen 895f0a9dfe Merge pull request #1982 from AndyButland/u4-9987
Extended HttpsCheck healthcheck to check for expiring SSL certificate
2017-07-17 21:26:03 +02:00
Sebastiaan Janssen ec03a3dc42 Merge pull request #1989 from HarveyWilliams/patch-2
Fix for `IsDocumentTypeRecursive` - U4-9997
2017-07-17 21:23:18 +02:00
Sebastiaan Janssen 5a4dbba21b Merge pull request #1998 from Jeavon/temp-U4-10013
U4-10013 Umbraco.MediaPicker value converter does not understand ints
2017-07-17 20:40:24 +02:00
Sebastiaan Janssen 04546dd827 Merge pull request #2035 from bjarnef/dev-v7-U4-9945
U4-9945 - Fix vertical separator color and height of icon in custom section
2017-07-17 20:22:43 +02:00
Sebastiaan Janssen 4ecf1f919e Merge pull request #2038 from bjarnef/dev-v7-U4-4079
U4-4079 - Open context menu in member section, when clicking "do something else" button
2017-07-17 20:18:37 +02:00
Sebastiaan Janssen bdc4e1ae6a Merge pull request #2041 from blueboxes/dev-v7
U4-10143 - Improved error messages when we retrieve current xml node
2017-07-17 19:51:49 +02:00
Sebastiaan Janssen 3cb05870af Merge pull request #2051 from mistyn8/U4-10171
Update treepicker.html [U4-10171] add ability to remove picker item
2017-07-17 18:15:23 +02:00
Sebastiaan Janssen 95b0c342bb Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2017-07-17 17:51:39 +02:00
Sebastiaan Janssen 3a5584a1c1 Some updates to description and code style 2017-07-17 17:50:38 +02:00
Sebastiaan Janssen b425edbb45 Merge branch 'srmooney-U4-10088' into dev-v7 2017-07-17 17:30:56 +02:00
Sebastiaan Janssen b403283368 Merge branch 'U4-10088' of https://github.com/srmooney/Umbraco-CMS into srmooney-U4-10088 2017-07-17 17:30:32 +02:00
Mike Chambers cb1d347769 Update treepicker.html
resolves U4-10171 can't click remove icon, to remove picker item.
2017-07-17 15:54:11 +01:00
Warren Buckley 4d0a2c85b7 Merge pull request #2049 from umbraco/temp-U4-5672
U4-5672 Properties and Tabs moving/incorrect when Enable list view se…
2017-07-17 09:41:37 +01:00
Sebastiaan Janssen e1957b895f U4-5672 Properties and Tabs moving/incorrect when Enable list view selected 2017-07-17 09:46:30 +02:00
Robert 84de083d52 Merge remote-tracking branch 'origin/temp-U4-7497' into temp-U4-7497 2017-07-14 13:57:36 +02:00
Robert 6ccb822cb5 On textbox delete the next in line gets focused
umbfocusbackwards.directive.js file added
2017-07-14 13:56:11 +02:00
Robert c94338d2b6 Newly added text box now get's focused. 2017-07-14 13:56:11 +02:00
Robert 3ba001164f Changed to keyup 2017-07-14 13:56:11 +02:00
Robert a8c0367492 Add/Remove functionality on key press added 2017-07-14 13:56:11 +02:00
Robert 91646212fd add/remove functionality on keyDown added 2017-07-14 13:56:11 +02:00
Robert 4c9b2f552a On textbox delete the next in line gets focused
umbfocusbackwards.directive.js file added
2017-07-14 13:30:28 +02:00
Stephan c696c62185 More fsTreeController cleanup 2017-07-13 15:12:14 +02:00
Warren Buckley 0dfbb95033 Merge branch 'madjor5-U4-4413_-_maxlength' into dev-v7 2017-07-13 13:39:20 +01:00
Warren Buckley 17969e4537 Merge branch 'U4-4413_-_maxlength' of https://github.com/madjor5/Umbraco-CMS into madjor5-U4-4413_-_maxlength
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/textarea/textarea.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/textbox/textbox.html
#	src/Umbraco.Web.UI/umbraco/config/lang/da.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
2017-07-13 13:09:06 +01:00
Robert 3395445d7c Newly added text box now get's focused. 2017-07-13 14:05:50 +02:00
mikkelhm 374fdcf29e Bumps version to 7.6.5 2017-07-13 12:14:32 +02:00
Claus bcb19eea35 Merge pull request #1678 from PeteDuncanson/patch-2
Fixed error label showing when you do a retry
2017-07-12 15:47:32 +02:00
Claus da00ad1444 Merge branch 'abryukhov-temp-U4-10139' into dev-v7 2017-07-12 15:10:51 +02:00
Claus 7bc52b3948 localization fixes. 2017-07-12 15:06:29 +02:00
Claus a77aec4156 Merge branch 'temp-U4-10139' of git://github.com/abryukhov/Umbraco-CMS into abryukhov-temp-U4-10139 2017-07-12 14:36:47 +02:00
Claus f7f3dccfc8 Merge pull request #2042 from umbraco/temp-fsTreeController
filesystem controller compatibility
2017-07-12 14:27:00 +02:00
Claus ab3469d703 cleanup. 2017-07-12 14:26:44 +02:00
Claus c78ea90cf5 cleaning up a bit. 2017-07-12 14:24:09 +02:00
Sebastiaan Janssen 3de0b85ae3 Merge pull request #2001 from umbraco/temp-u4-9993
U4-9993 - fix upgrade issues
2017-07-12 12:59:19 +02:00
Stephan 87b51d1418 Merge branch dev-v7 into temp-fsTreeController 2017-07-11 19:06:01 +02:00
John Kilmister 8ea1af56ab U4-10143 - Improved error messages when we retrieve current xml node 2017-07-11 16:22:21 +01:00
Stephan 219eb61194 Merge branch 'dev-v7' into temp-u4-9993 2017-07-11 14:47:54 +02:00
Robert 1d3279fe07 Merge pull request #2036 from bjarnef/dev-v7-U4-10130
U4-10130 - Equal height of input and button
2017-07-11 10:48:23 +02:00
Robert 88bb796f4d Merge branch 'dev-v7' into dev-v7-U4-10130 2017-07-11 10:41:58 +02:00
Robert 97878ac25a Merge pull request #2037 from bjarnef/dev-v7-U4-9933
U4-9933 - Update datepicker styles
2017-07-11 09:56:48 +02:00
Alexander Bryukhov c87e880b64 Minor localization issues U4-10139 2017-07-11 14:15:07 +07:00
Bjarne Fyrstenborg e28ba446a0 Open context menu when clicking "Do something else" 2017-07-08 01:20:26 +02:00
Bjarne Fyrstenborg c645a2cf15 Update styles of datepicker 2017-07-08 00:45:18 +02:00
Bjarne Fyrstenborg 5fb8d990f8 Include original missing changes 2017-07-07 23:52:20 +02:00
Bjarne Fyrstenborg 8626e4337f Adjust search icon position 2017-07-07 23:40:02 +02:00
Bjarne Fyrstenborg 0f22c41eee Update height of input in header 2017-07-07 23:21:19 +02:00
Bjarne Fyrstenborg e73fda14b5 Adjust height of input fields 2017-07-07 23:16:11 +02:00
Bjarne Fyrstenborg a04df8070a Revert "Make examine search input and button more consistent with UI"
This reverts commit 60c1052db1.
2017-07-07 22:51:32 +02:00
Bjarne Fyrstenborg 60c1052db1 Make examine search input and button more consistent with UI 2017-07-07 22:12:27 +02:00
Bjarne Fyrstenborg dd041a6f09 Ensure it override injected styles from custom font icon 2017-07-07 19:16:42 +02:00
Bjarne Fyrstenborg 733aab6eb5 Fix vertical separator color and height of icon in custom section 2017-07-07 18:57:57 +02:00
srmooney 1e6d50a86b Add option for Listview to change the tab name 2017-07-06 10:50:19 -04:00
Sebastiaan Janssen 0445588c6b Merge pull request #2033 from umbraco/temp-revert-newstarterkitdefault
Reverts the change for the installer screen which needs to be ready f…
2017-07-06 15:31:45 +02:00
mikkelhm 4d316cf0ce Reverts the change for the installer screen which needs to be ready for the new starterkit and Lessons 2017-07-06 15:06:55 +02:00
Mikkel Holck Madsen 864650193a Merge pull request #2032 from umbraco/temp-U4-10124
U4-10124 Update IFileService to handle MacroScripts and UserControls
2017-07-06 12:58:17 +02:00
Claus cfa7b0a092 U4-10124 Update IFileService to handle MacroScripts and UserControls 2017-07-06 10:44:51 +02:00
Mikkel Holck Madsen 5726420848 Merge pull request #2030 from umbraco/temp-U4-10098
U4-10098 Update FileService to support legacy MacroScript and UserCon…
2017-07-06 09:15:18 +02:00
Robert cc57cd6eb7 Changed to keyup 2017-07-05 12:57:29 +02:00
Robert 193eb259a6 Add/Remove functionality on key press added 2017-07-05 12:54:59 +02:00
Robert 6db18d83be add/remove functionality on keyDown added 2017-07-05 10:15:23 +02:00
Claus ca752f74bc updating array length. 2017-07-04 17:29:32 +02:00
Claus b840a0992c adding shadow filesystems. 2017-07-04 14:47:29 +02:00
Claus 51997d0651 U4-10098 Update FileService to support legacy MacroScript and UserControl folders 2017-07-04 14:28:15 +02:00
Shannon Deminick 9482104ec5 Merge pull request #2028 from umbraco/temp-U4-4905
Removed "remove paragraph tags" field
2017-07-04 12:33:25 +10:00
Robert 7053c175f8 Removed "remove paragraph tags" field 2017-07-03 13:44:37 +02:00
Claus b2116480fc fix formatting. 2017-07-03 11:17:05 +02:00
Claus caef6cc623 Merge pull request #2026 from wanddy/dev-v7
Improve Chinese translation
2017-07-03 08:32:47 +02:00
wanddy 280ad246ab Merge remote-tracking branch 'remotes/origin/dev-v7' into dev-v7 2017-06-30 19:46:09 +08:00
Stephan 43e0ef2472 Merge branch 'dev-v7' into temp-u4-9993 2017-06-30 11:02:43 +02:00
Claus 44cfe5da84 missing nullcheck. 2017-06-30 10:46:44 +02:00
Claus d5fd266b19 missing semicolon. 2017-06-30 10:34:58 +02:00
wanddy 5768992ccc Improve Chinese translation to match the newest version based on en.xml file.
Signed-off-by: wanddy <wanddy@163.com>
2017-06-30 12:10:59 +08:00
Mads Rasmussen 81aae79b42 Merge pull request #2015 from umbraco/temp-U4-9839
U4-9839 Media Picker: If I only upload one photo then select it as a …
2017-06-29 14:54:49 +02:00
Claus 9edbb3fc26 Merge pull request #1634 from soreng/patch-2
use already defined variable, instead of mapping the path twice
2017-06-29 14:47:21 +02:00
Claus 7fdd2bcdfc Merge pull request #2018 from AndyButland/u4-4090
Fixes U4-4090 - by preserved line breaks in property descriptions...
2017-06-29 14:43:13 +02:00
Claus ba90fdeb56 Merge pull request #1778 from bjarnef/dev-v7-U4-9585
Allow leading whitespace in textstring prevalue editor
2017-06-29 14:40:10 +02:00
Claus d6bae1b58f Merge pull request #1958 from poornimanayar/U4-9661
U4-9661 Remove "move" button in member section
2017-06-29 14:37:00 +02:00
Claus ef53db52f7 Merge pull request #1850 from pijemcolu/temp-U4-9710
U4-9710 ImageCropDataSet.HasImage returns wrong value
2017-06-29 14:07:59 +02:00
Claus 863b97039c Merge pull request #1632 from bjarnef/dev-v7-U4-9181
U4-9181 - Fix sorting of grid editor config
2017-06-29 13:55:12 +02:00
Claus 1a1adbf647 Merge pull request #2024 from greystate/drobar-partialviews
Updates to partialviews
2017-06-29 13:47:54 +02:00
Claus 5c745565da Merge pull request #2025 from umbraco/temp-U4-8970
U4-8988 Adding translations for Chinese (Taiwan)
2017-06-29 13:28:06 +02:00
Claus 5dec54badb U4-8988 Adding translations for Chinese (Taiwan) 2017-06-29 13:27:31 +02:00
Claus e5e725b376 Merge pull request #2022 from umbraco/temp-U4-5454
Temp u4 5454
2017-06-29 12:32:57 +02:00
Claus f0f25c67c6 refactoring method signatures to prevent breaking changes. 2017-06-29 10:00:16 +02:00
Claus da8c0726b1 Merge branch 'U4-5454' of git://github.com/trt/Umbraco-CMS into temp-U4-5454 2017-06-29 08:59:45 +02:00
Claus 2fbb9721fa updating language files. 2017-06-29 08:53:22 +02:00
Claus de6ffd456c Merge pull request #1972 from wanddy/dev-v7-chnfixnew
Fix translation didn't work in some tree node
2017-06-29 08:47:37 +02:00
Claus 5b3ff58ad8 Merge pull request #1964 from esn303/patch-2
Update "Element hinzufügen" (Add grid element)
2017-06-29 08:14:08 +02:00
Claus 9a4c1972b2 Merge pull request #2020 from umbraco/revert-2008-temp-old-client-files-clean-up
Revert "Removing unused v6 images"
2017-06-28 14:49:05 +02:00
Claus b993ce953b Revert "Removing unused v6 images" 2017-06-28 14:48:41 +02:00
Claus dde0f1aa36 Merge pull request #2008 from umbraco/temp-old-client-files-clean-up
Removing unused v6 images
2017-06-28 13:07:19 +02:00
Stephan 3fd6754057 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2017-06-28 12:46:46 +02:00
Stephan 8fbb459233 fix and annotate some tests 2017-06-28 12:46:40 +02:00
Shannon cb6f934792 fixes cache bust value 2017-06-27 19:40:24 +10:00
Shannon Deminick 7adbecf9a1 Merge pull request #2019 from lars-erik/U4-6695-internalsvisibleto-unittesting-adapter
U4-6695 Adds InternalsVisibleTo("Umbraco.UnitTesting.Adapter")
2017-06-27 10:06:36 +10:00
Claus 2fdf148610 localizing text https://github.com/umbraco/Umbraco-CMS/pull/1250 2017-06-26 15:41:17 +02:00
Claus 9d9e5e8274 Merge branch 'rodyvansambeek-patch-1' into dev-v7 2017-06-26 15:33:27 +02:00
Claus 89895dd592 Merge branch 'patch-1' of git://github.com/rodyvansambeek/Umbraco-CMS into rodyvansambeek-patch-1
# Conflicts:
#	src/Umbraco.Web.UI/umbraco/config/lang/nl.xml
2017-06-26 15:32:47 +02:00
Lars-Erik Aabech f9252372ea Adds InternalsVisibleTo("Umbraco.UnitTesting.Adapter") for more imperative exposure to custom unit test adapters. 2017-06-26 12:39:57 +02:00
Claus 02a2178029 Merge branch 'benjaminketron-temp-U4-9464' into dev-v7 2017-06-26 11:33:27 +02:00
Claus ee775a2fde adding a few more tests. 2017-06-26 11:31:46 +02:00
Claus 22af206626 Merge branch 'temp-U4-9464' of git://github.com/benjaminketron/Umbraco-CMS into benjaminketron-temp-U4-9464 2017-06-26 11:23:24 +02:00
AndyButland 67e109c0e6 Preserved line breaks in property descriptions when rendering in content area 2017-06-23 11:40:43 +02:00
Sebastiaan Janssen 8a4d85771b Merge pull request #2016 from mikecp/U4-10047
U4 10047
2017-06-23 11:14:49 +02:00
Sebastiaan Janssen 4688ac104e Merge pull request #1494 from AndyButland/u4-8999
U4-8999 - health check, debug compilation mode is being reported in error when config missing
2017-06-23 08:31:29 +02:00
Michael Latouche 032dbe5bf5 Update fr.xml 2017-06-23 00:52:10 +02:00
Michael Latouche a7695163b9 Update fr.xml 2017-06-23 00:21:33 +02:00
Michael Latouche cb4569677e Update fr.xml 2017-06-23 00:10:22 +02:00
Michael Latouche 4be704b968 Update fr.xml 2017-06-23 00:09:52 +02:00
Michael Latouche b7a5cb046a Update fr.xml 2017-06-22 23:56:33 +02:00
Claus eb52dafb33 U4-9839 Media Picker: If I only upload one photo then select it as a part of the upload process 2017-06-22 13:01:29 +02:00
Sebastiaan Janssen af382c171b Merge pull request #2009 from umbraco/temp-U4-10034
U4-10034 Package install may not wait for app domain restart in all cases
2017-06-22 11:22:18 +02:00
Claus 54fdfdd639 adding grunt watch interval to prevent insane cpu load. 2017-06-22 11:05:42 +02:00
Claus c4c99ef0b8 Merge pull request #2014 from umbraco/temp-deploy-348
deploy-348 - add support for languages
2017-06-22 10:53:31 +02:00
Stephan 0bd233815e deploy-348 - add support for languages 2017-06-22 10:04:48 +02:00
Michael Latouche 4c9fd4029f Merge pull request #3 from umbraco/dev-v7
Resync
2017-06-22 00:32:36 +02:00
Claus 3d65afabbf Merge branch 'temp-U4-10043' into dev-v7 2017-06-21 14:27:34 +02:00
Claus ef9bf155ef typo. 2017-06-21 14:21:39 +02:00
Sebastiaan Janssen e947f661a9 Merge pull request #2011 from akierczynska/patch-1
Updating pl.xml language version to cover en.xml
2017-06-21 14:20:19 +02:00
Claus 0eb8ebd82e fixing up translations. 2017-06-21 14:04:15 +02:00
Claus bc76fa8687 Merge branch 'localization-v764' of git://github.com/abryukhov/Umbraco-CMS into temp-U4-10043 2017-06-21 12:03:25 +02:00
Sebastiaan Janssen 8681d535f2 Merge pull request #2010 from umbraco/temp-U4-10035
Turns out when we empty the recycle bin we weren't removing associate…
2017-06-21 11:51:47 +02:00
Shannon 6d81705ece fixes the restart check 2017-06-21 18:34:22 +10:00
Sebastiaan Janssen b433af8611 Merge pull request #2013 from umbraco/temp-U4-10046
U4-10046 Stop resolving TreeController from the PluginManager for eve…
2017-06-21 10:15:07 +02:00
Shannon b0f4d0e16b U4-10046 Stop resolving TreeController from the PluginManager for every back office request 2017-06-21 18:11:03 +10:00
Shannon 2f24dfb8f0 changes name from versionHash to cacheBuster
(cherry picked from commit 439c30e2fd)
2017-06-21 08:26:44 +02:00
Shannon ad63050078 Fixes issue of rendering the umb version in the html markup
(cherry picked from commit c13b2fae4b)
2017-06-21 08:26:20 +02:00
Alexander Bryukhov 552c2ed4dc Localizing hardcoded strings 2017-06-21 02:45:18 +07:00
Alexander Bryukhov d7e522132e Localizing hardcoded strings 2017-06-21 02:45:12 +07:00
Alexander Bryukhov ca7c43d944 Localizing hardcoded strings 2017-06-21 02:45:05 +07:00
Alexander Bryukhov c35e842391 Localizing hardcoded strings 2017-06-21 02:44:59 +07:00
Alexander Bryukhov dae20cc986 Localizing hardcoded strings 2017-06-21 02:44:52 +07:00
Alexander Bryukhov c466514e7f Localizing hardcoded strings 2017-06-21 02:44:45 +07:00
Alexander Bryukhov 5e2aa7fa68 Localizing hardcoded strings 2017-06-21 02:44:39 +07:00
Alexander Bryukhov 11ccc88bc8 Localizing hardcoded strings 2017-06-21 02:44:33 +07:00
Alexander Bryukhov c83009c879 Localizing hardcoded strings 2017-06-21 02:44:26 +07:00
Alexander Bryukhov d6b9b41776 Localizing hardcoded strings 2017-06-21 02:44:19 +07:00
Alexander Bryukhov 508a4c32b4 Localizing hardcoded strings 2017-06-21 02:44:12 +07:00
Alexander Bryukhov dbf2538aae Localizing hardcoded strings 2017-06-21 02:44:06 +07:00
Alexander Bryukhov 5293b3bcc7 Localizing hardcoded strings 2017-06-21 02:44:00 +07:00
Alexander Bryukhov 940caba2c4 Localizing hardcoded strings 2017-06-21 02:43:53 +07:00
Alexander Bryukhov e31daef4fa Localizing hardcoded strings 2017-06-21 02:43:47 +07:00
Alexander Bryukhov 7984626433 Localizing hardcoded strings 2017-06-21 02:43:40 +07:00
Alexander Bryukhov ffa557b097 Localizing hardcoded strings 2017-06-21 02:43:33 +07:00
Alexander Bryukhov 9236bcbcd8 Localizing hardcoded strings 2017-06-21 02:43:26 +07:00
Alexander Bryukhov 1b875b0c67 Localizing hardcoded strings 2017-06-21 02:43:19 +07:00
Alexander Bryukhov ecce68da0a Localizing hardcoded strings 2017-06-21 02:43:12 +07:00
Alexander Bryukhov e27a882d2b Localizing hardcoded strings 2017-06-21 02:43:06 +07:00
Alexander Bryukhov c7ae379fd1 Localizing hardcoded strings 2017-06-21 02:42:59 +07:00
Alexander Bryukhov 8ad13f6853 Localizing hardcoded strings 2017-06-21 02:42:52 +07:00
Alexander Bryukhov e4ae40c2fe Localizing hardcoded strings 2017-06-21 02:42:45 +07:00
Alexander Bryukhov be61270e42 Localizing hardcoded strings 2017-06-21 02:42:38 +07:00
Alexander Bryukhov bd00b532eb Localizing hardcoded strings 2017-06-21 02:42:32 +07:00
Alexander Bryukhov ebc9478f2d Localizing hardcoded strings 2017-06-21 02:42:25 +07:00
Alexander Bryukhov ab72808a10 Localizing hardcoded strings 2017-06-21 02:42:18 +07:00
Alexander Bryukhov 068e82172a Localizing hardcoded strings 2017-06-21 02:42:10 +07:00
Alexander Bryukhov 45988d4f0c Localizing hardcoded strings 2017-06-21 02:42:02 +07:00
Alexander Bryukhov db330b3223 Localizing hardcoded strings 2017-06-21 02:41:54 +07:00
Alexander Bryukhov 03fd06cfa7 Localizing hardcoded strings 2017-06-21 02:41:45 +07:00
Alexander Bryukhov 775148d241 Localizing hardcoded strings 2017-06-21 02:41:37 +07:00
Alexander Bryukhov 8e65ecdc4a Localizing hardcoded strings 2017-06-21 02:41:27 +07:00
Alexander Bryukhov 6a43dd41c6 Localizing hardcoded strings 2017-06-21 02:41:19 +07:00
Alexander Bryukhov 82ae6a1aef Added localizationService
and localized two hardcoded strings
2017-06-21 02:41:04 +07:00
Alexander Bryukhov a127683d92 Adding & changing keys
for the views localization check
2017-06-21 02:40:47 +07:00
Alexander Bryukhov 06f3f4b191 Adding & changing keys
for the views localization check
2017-06-21 02:40:31 +07:00
Alexander Bryukhov a2f45a38f7 Adding & changing keys
for the views localization check
2017-06-21 02:40:05 +07:00
akierczynska 4b966ebe91 Update pl.xml 2017-06-20 17:31:18 +01:00
akierczynska da9e87d0ab Update pl.xml 2017-06-20 17:18:58 +01:00
akierczynska 84a206ce5e Update pl.xml 2017-06-20 16:12:12 +01:00
akierczynska 3c3c31c36e Update pl.xml 2017-06-20 16:08:17 +01:00
akierczynska 585f8e07f7 Update pl.xml 2017-06-20 16:03:46 +01:00
akierczynska f7c0e02bfd Update pl.xml 2017-06-20 16:00:47 +01:00
akierczynska e767eaa08b Update pl.xml
Update pl.xml to match en.xml and complete the translation
2017-06-20 15:57:50 +01:00
Claus ef32eda874 Merge branch 'temp-U4-8664' into dev-v7
fixing language selection.
2017-06-20 14:09:43 +02:00
Claus 01ccf8a6a6 Merge branch 'U4-8664' of https://github.com/DoctaJonez/Umbraco-CMS into temp-U4-8664 2017-06-20 12:59:28 +02:00
Sebastiaan Janssen c27ca1fb0d U4-9724 Tiny MCE error when adding a link "Cannot read property 'href' of undefined" 2017-06-20 10:16:00 +02:00
Shannon 68e287cf12 fixes $q reference 2017-06-20 18:11:26 +10:00
Shannon ad6946aa26 fixes error handler reference 2017-06-20 18:07:17 +10:00
Shannon Deminick 42d7c83a6d Merge pull request #2004 from umbraco/temp-u4-10026
U4-10026 - use id-key map for getting by guid
2017-06-20 17:01:35 +10:00
Stephan 1a435148d8 U4-10026 - inject idkmap 2017-06-20 08:55:08 +02:00
Stephan de348a9946 Merge remote-tracking branch 'origin/dev-v7' into temp-u4-10026 2017-06-20 08:41:04 +02:00
akierczynska 791e6a5f92 Update pl.xml 2017-06-19 18:19:35 +01:00
Shannon 1f6f8df5b5 Turns out when we empty the recycle bin we weren't removing associated cmsTask info. This also adds a null check since a SingleOrDefault call can return null. I've only seen this cause a problem when there is corrupt data but it should still be checked. 2017-06-19 23:48:18 +10:00
Niels Hartvig 7f5eff6e53 Fixes build, removes more unused client files 2017-06-19 15:43:53 +02:00
Shannon d885265818 Changes restart tracking to use code we used to have in there which is an in memory marker for the app domain, this is a little cleaner 2017-06-19 23:40:51 +10:00
Niels Hartvig be6140a38b Revert "More client files clean-up (including a duplicate tinymce)"
This reverts commit 8ee05063a2.
2017-06-19 15:27:36 +02:00
Niels Hartvig 8ee05063a2 More client files clean-up (including a duplicate tinymce) 2017-06-19 15:05:02 +02:00
Shannon 7920383904 U4-10034 Package install may not wait for app domain restart in all cases 2017-06-19 23:02:06 +10:00
Niels Hartvig 1a3d9e27f4 Removing unused v6 images 2017-06-19 14:46:21 +02:00
Shannon Deminick 2654f9189f Merge pull request #1973 from marcemarc/marcemarc-u4-9480
Revised fix for issue: U4-9489 - Just fix logResource.js parameters
2017-06-19 20:33:37 +10:00
Sebastiaan Janssen d7453b5a6e Updating the CG link so we can modify it without releasing a new version
Updated links to our/tv to be https
2017-06-19 09:49:15 +02:00
Sebastiaan Janssen 5ed8ceb85e Merge pull request #2000 from umbraco/updates-installer-764
Update installer photo + tlc on starter kit install screen
2017-06-19 09:34:40 +02:00
Mikkel Holck Madsen b7ea0840a9 Merge pull request #2007 from abryukhov/patch-6
Update ru.xml UI resources
2017-06-19 09:29:45 +02:00
Shannon Deminick 6b65f1c197 Merge pull request #1970 from Sam7/dev-v7
U4-9973 Remove sealed modifier from ExternalSignInAutoLinkOptions class
2017-06-19 17:27:24 +10:00
Alexander Bryukhov bc7dc8629e Update ru.xml UI resources
Couple of translation corrections
2017-06-18 18:35:48 +07:00
Michael Latouche d3c2b0a247 Merge pull request #2 from umbraco/dev-v7
Merge dev-v7 into my fork
2017-06-17 01:16:26 +02:00
Stephan 464711d3c8 U4-10026 - use id-key map for getting by guid 2017-06-16 14:09:20 +02:00
Mikkel Holck Madsen b15fd4496a Merge pull request #1699 from richarth/patch-2
Spelling and Grammar changes
2017-06-15 15:24:56 +02:00
Mikkel Holck Madsen b3ea0c83f9 Merge pull request #1832 from leekelleher/issue/U4-8098
Fixes U4-8900 - XPath: "$current" on Multinodetreepicker gives error in Document Type editor
2017-06-15 15:02:14 +02:00
Shannon Deminick c1aefe0686 Merge pull request #2002 from rmorrin/obsolete-namespace-errors
Fix incorrect namespace in deprecated class messages
2017-06-15 14:16:30 +02:00
Ryan Morrin 907dd8092a Fix incorrect namespace in deprecated class messages 2017-06-15 13:04:30 +01:00
Sebastiaan Janssen 7b5568ecb4 Merge pull request #1993 from AndersBrohus/U4-10008
U4-10008 - New danish translation for "Preview" - button
2017-06-15 12:43:25 +02:00
Shannon Deminick 2fd383960d Merge pull request #1997 from umbraco/temp-U4-10014
U4-10014 Making package install events public
2017-06-14 22:41:11 +02:00
Stephan 33f76d25f7 U4-9993 - fix upgrade issues 2017-06-14 15:04:56 +02:00
Niels Hartvig a2c5c35394 Update installer photo + tlc on starter kit install screen 2017-06-14 11:45:03 +02:00
Mikkel Holck Madsen c0616a37bf Merge pull request #1999 from umbraco/temp-tryAscii
Enable trying to convert urls to ascii
2017-06-14 10:12:58 +02:00
Mikkel Holck Madsen da4be3be65 Merge pull request #1995 from umbraco/temp-backofficeguids
Adds hoverstates for metadata(documenttypes, datatypes etc), making it possible to see their guids in the backoffice
2017-06-14 08:27:41 +02:00
Shannon Deminick 08c4a75af7 Merge pull request #1945 from protherj/U4-9792-fips-support
U4-9792 -- Update Umbraco to be FIPS compliant
2017-06-13 15:05:21 +02:00
Jeavon 047eb893eb Switches Umbraco.MediaPicker (double legacy) to being converted by MultipleMediaPickerPropertyConverter so that it actually works
Renames MultipleMediaPickerPropertyConverter to LegacyMediaPickerPropertyConverter (delete for v8)
2017-06-13 12:28:59 +01:00
Claus 308c381e17 U4-10014 Making package install events public 2017-06-13 13:28:23 +02:00
Jason Prothero e99309aa2f Merge pull request #3 from protherj/fips-refactoring
Added RFC 4122 compliant GUID support to StrringExtensions ToGuid()
2017-06-12 13:47:26 -07:00
Jason Prothero 917a2b78dd Added RFC 4122 compliant GUID support to the ToGuid() method on StrringExtensions.cs. Verified the SHA1 hash works with the ToGuid() method via unit tests. 2017-06-12 13:44:42 -07:00
Mads Rasmussen e559a6d485 add key as hover on name 2017-06-12 14:55:12 +02:00
Claus 160518e977 adding guids to backoffice. 2017-06-12 12:12:14 +02:00
Anders Brohus f985725118 Create da.xml 2017-06-11 22:01:57 +02:00
Brian Powell 5ec67ab3fd Apply Tom Fulton's fix for U4-9430 from https://github.com/tomfulton/Umbraco-CMS/commit/ba670586eba14092e6f1d20ee5e9aceb93e05f23 2017-06-09 11:40:38 -04:00
Harvey Williams 993513b138 Fix for IsDocumentTypeRecursive - U4-9997
Potential fix to issue logged on: http://issues.umbraco.org/issue/U4-9997
2017-06-08 15:17:34 +01:00
= 7f75802e4e allow DecimalValueConverter to understand signs in the front of the number. wonder if this could be more configurable as there are many other options avaialble." 2017-06-06 22:18:12 -06:00
Jeavon Leopold 5eb330b7d7 Add GetAbsoluteMediaUrl method to UrlHelper for the Open Graph starter kit lesson 2017-06-05 17:32:05 +02:00
AndyButland ce618d289b Extended HttpsCheck healthcheck to check for expiring SSL certificate 2017-06-05 16:43:17 +02:00
Sebastiaan Janssen 2191d33844 Bumps version 2017-06-05 16:33:47 +02:00
Sebastiaan Janssen 92a507bc87 New CG year 2017-06-05 16:02:04 +02:00
Niels Hartvig 1b844421fc Updates to installer to use the new starter kit (and updates core version) 2017-06-04 20:47:33 +02:00
Niels Hartvig df9c6baed7 Updates a few numbers in the installer 2017-06-04 18:10:29 +02:00
Sebastiaan Janssen 53357b0582 Merge pull request #1976 from umbraco/temp-U4-9980
Temp u4 9980
2017-06-04 14:55:23 +02:00
Sebastiaan Janssen 1164f1cdbb Merge branch 'dev-v7' into temp-U4-9980 2017-06-04 14:55:03 +02:00
Niels Hartvig 7f05b80a22 Make Seb happy 2017-06-04 14:02:05 +02:00
Niels Hartvig 20239a9b71 Adds a null check to avoid breaking tests (and to comform to coding standards) 2017-06-04 14:00:51 +02:00
Brian Powell 70a0bbbe61 Change font references: icomoon -> tinymce 2017-06-03 12:49:42 -04:00
Sebastiaan Janssen c4b07cc3ae Merge pull request #1974 from umbraco/temp-U4-9980
Adds support for keys in package content
2017-06-03 18:36:28 +02:00
Sebastiaan Janssen 771935b8a5 Update PackagingService.cs 2017-06-03 18:36:00 +02:00
Niels Hartvig 73bb401f81 Updating to TryParse to make Sir Janssen happy :-) 2017-06-03 18:34:09 +02:00
Niels Hartvig 8ccbe4c1e4 Adds support for keys in package content 2017-06-03 17:34:31 +02:00
Marc Goodson cf3343749f Revert fix to umbrequesthelper.service it was NEVER meant to be able to receive an array of a single dictionary item - actual fix is to change logResource to not pass params in this way 2017-06-02 21:04:12 +01:00
Marc Goodson 079df4a8b7 Pass logType and SinceDate as an array of key value pairs and not an array of a single dictionary - the logapi was never meant to be able to receive a dictionary... see comments on http://issues.umbraco.org/issue/U4-9489 for details 2017-06-02 21:02:46 +01:00
wanddy 7612884705 revert MediaService.cs 2017-06-02 23:41:19 +08:00
wanddy 74dc2d80fd Merge remote-tracking branch 'remotes/origin/dev-v7.6-chnfix' into dev-v7-chnfixnew
# Conflicts:
#	src/Umbraco.Core/Services/MediaService.cs
2017-06-02 23:33:16 +08:00
Wanddy Huang(黄仁祥) 647ebee34d Merge pull request #1 from umbraco/master-v7
merger umbraco/dev-v7  to my dev-v7
2017-06-02 22:43:44 +08:00
wanddy bc444847f4 Merge branch 'dev-v7.6' of https://github.com/umbraco/Umbraco-CMS into dev-v7.6-chnfix 2017-06-02 21:47:03 +08:00
Brian Powell 24d9c60bdf Update fonts and stylesheet to include table icons missing per U4-9977 2017-06-01 21:59:31 -04:00
Sam Sperling b5c2fc82bb U4-9973 Remove sealed modifier from ExternalSignInAutoLinkOptions class 2017-06-02 11:43:06 +10:00
Stephan a50256d381 Enable trying to convert urls to ascii 2017-06-01 17:58:22 +02:00
Stephan 290f34f034 FileSystemTreeController compatibility 2017-06-01 17:24:10 +02:00
Sebastiaan Janssen 92f609ff71 Merge pull request #1969 from umbraco/temp-U4-9974
U4-9974 EnablePropertyValueConverter does the opposite
2017-06-01 13:32:51 +02:00
Sebastiaan Janssen 7e6f7f8a2b Bumps version 2017-06-01 13:04:31 +02:00
Claus c5419e700b the legacy converter should not be associated to RelatedLinks2Alias and should only be enabled if EnablePropertyValueConverters is false, otherwise the other converter should be used. 2017-06-01 13:03:56 +02:00
Sebastiaan Janssen cb09094632 U4-9974 EnablePropertyValueConverter does the opposite 2017-06-01 10:57:15 +02:00
Sebastiaan Janssen 72404e68a0 Merge pull request #1968 from umbraco/temp-u4-9927
U4-9927 - fix migration
2017-05-31 16:36:42 +02:00
Sebastiaan Janssen 2c451c5cfe Remove debug tracing 2017-05-31 16:29:26 +02:00
Stephan af7f83f0f6 U4-9927 - fix migration 2017-05-31 15:49:15 +02:00
Shannon 5b3c2178a2 Revert "Merge pull request #1729 from marcemarc/marcemarc-U4-9480"
This reverts commit 145f789631, reversing
changes made to 78bc38fe1b.
2017-05-31 15:26:22 +02:00
Shannon Deminick 145f789631 Merge pull request #1729 from marcemarc/marcemarc-U4-9480
U4-9489 - dictonaryToQueryString only returns first dictionary item
2017-05-31 15:17:11 +02:00
Sebastiaan Janssen e27e95cb1a U4-9952 Can not save XSLT files in 7.6 2017-05-31 11:11:56 +02:00
Mikkel Holck Madsen cdbc3fa8cd Merge pull request #1967 from umbraco/temp-U4-9971
U4-9971 Special "square bracket" notation in Umbraco.Field not working
2017-05-31 10:55:17 +02:00
Sebastiaan Janssen 6feb7b222f U4-9971 Special "square bracket" notation in Umbraco.Field not working 2017-05-31 10:18:10 +02:00
mikkelhm b0a739b4ac Bump version to 7.6.2 2017-05-29 15:07:37 +02:00
Sebastiaan Janssen 728dee070f Merge pull request #1965 from umbraco/temp-U4-9894-2
U4-9894 UDI Pickers and all 'v2' property editors shouldn't observe t…
2017-05-29 14:27:18 +02:00
Claus 4a735770e2 Merge pull request #1961 from umbraco/temp-U4-9937
fixes: U4-9937 RTE Media Picker - Cannot add image to RTE after searching
2017-05-29 11:42:05 +02:00
Shannon d54b3a0cc3 U4-9894 UDI Pickers and all 'v2' property editors shouldn't observe the EnablePropertyValueConverters setting 2017-05-29 09:38:16 +02:00
Claus f962a3db20 Merge pull request #1953 from umbraco/temp-U4-9935
U4-9935 UmbracoHelper doesn't have querying methods for handling UDI
2017-05-29 09:34:29 +02:00
mikkelhm 39851d2475 Ignoring the StringEncodingTest2 as AppVeyors framework settings is doing weird things, that makes it fail 2017-05-26 13:31:29 +02:00
Mikkel Holck Madsen 28adbc17ef Merge pull request #1963 from umbraco/temp-deploy-324
deploy-324 - fix udi encoding
2017-05-26 13:14:29 +02:00
Shannon Deminick 4b9a13078e Merge pull request #1957 from umbraco/temp-U4-9940
U4-9940 Make it easy to get the integer Id of an item from it's Udi
2017-05-25 23:58:23 +10:00
Sebastiaan Janssen 17cce9a666 Make EntityService private 2017-05-25 15:40:26 +02:00
Sebastiaan Janssen 39da34e1c7 Attempt to force .NET 4.5 for tests 2017-05-25 13:14:56 +02:00
Sebastiaan Janssen 55dc927c8b Does this help get the StringEncodingTest2 to run? Doubt it. 2017-05-25 12:07:20 +02:00
Sebastiaan Janssen 6e3ff59dfb Adds GetIdForUdi to UmbracoHelper 2017-05-25 11:04:40 +02:00
Sebastiaan Janssen 08eab00627 Adds GetIdForUdi method to IEntityService 2017-05-25 10:48:28 +02:00
Sebastiaan Janssen c4fae9b272 Remove extension method 2017-05-25 10:47:15 +02:00
Marc Stöcker 8b299a070f Update "Element hinzufügen" (Add grid element)
Key no longer used for first element exclusively for ages. New label just hints the (+) as button to add an element (being it the first one or not) -- very generic and thus hopefully future proof.
2017-05-24 12:16:46 +02:00
Stephan 51186bea24 deploy-324 - fix udi encoding 2017-05-24 11:20:01 +02:00
Shannon Deminick 5c5bacaab4 Merge pull request #1962 from bjarnef/dev-v7-U4-9571
Fix overwriting background repeat and position on legacy tree icons
2017-05-24 18:00:18 +10:00
Bjarne Fyrstenborg 5a4e6df99c Merge remote-tracking branch 'upstream/dev-v7' into dev-v7-U4-9571
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/less/tree.less
2017-05-24 09:40:14 +02:00
Bjarne Fyrstenborg 22f8a4c5dd Fix overwriting background repeat and position on legacy tree icons 2017-05-24 09:24:26 +02:00
Shannon Deminick aaf7ae0331 Merge pull request #1960 from umbraco/temp-u4-9936
U4-9936 - fix xml cache refresh in lb
2017-05-24 16:15:03 +10:00
Shannon Deminick 8459a058c6 Merge pull request #1956 from umbraco/temp-U4-9898
U4-9898 Reset password should unlock a locked account
2017-05-24 15:36:33 +10:00
Mads Rasmussen dc5089a9d6 fix svg preview 2017-05-23 14:38:52 +02:00
Mads Rasmussen 45a246d8b6 handle entity and full media objects in media grid 2017-05-23 14:38:34 +02:00
Mads Rasmussen 65bcd78872 add helper to get file extension 2017-05-23 14:37:51 +02:00
Mads Rasmussen a0fd7001e9 fixes image select in details overlay 2017-05-23 14:37:26 +02:00
Stephan 09ceb15d08 U4-9936 - fix xml cache refresh 2017-05-23 14:19:32 +02:00
Sebastiaan Janssen 25335446d0 Merge pull request #1959 from umbraco/temp-U4-9907
U4-9907 Translations Section : Getting "open datareader" Issue : Rela…
2017-05-23 14:11:23 +02:00
Stephan 63d8ef7560 U4-9936 - fix xml cache refresh in lb 2017-05-23 11:21:18 +02:00
Shannon 27428bf545 U4-9907 Translations Section : Getting "open datareader" Issue : Relates to (U4-9201) 2017-05-23 16:23:40 +10:00
Poornima Nayar 782193b17a U4-9661 Remove "move" button in member section 2017-05-22 23:17:17 +01:00
Sebastiaan Janssen b9c418e458 Fix updating the actual lockout 2017-05-22 08:36:02 +02:00
Sebastiaan Janssen c843e634ba Merge pull request #1954 from aburok/dev-v7.6-ScheduledPublishing_RequestLogging
add log if request to ScheduledPublishController fails without exception
2017-05-21 13:40:29 +02:00
Sebastiaan Janssen 8eb0d254da U4-9940 Make it easy to get the integer Id of an item from it's Udi 2017-05-21 13:35:29 +02:00
Sebastiaan Janssen 70921e88f6 Okay, I give up.. disabling failing tests 2017-05-21 12:59:53 +02:00
Sebastiaan Janssen d9b71995e1 Try to make sure TestingDefaults is set to false else IsFileAllowedForUpload_WithWhitelist fails 2017-05-21 12:42:54 +02:00
Sebastiaan Janssen f517e750b9 Some more debugging to see if we are actually testing the correct config 2017-05-21 12:16:45 +02:00
Sebastiaan Janssen 07d91ce9ac Removes some code duplication by using parameterized test
Add some debugging to unit test to figure out what's wrong with it
2017-05-21 11:34:21 +02:00
dkoruba ac8ee92bb8 fix typo 2017-05-20 20:55:40 +02:00
Sebastiaan Janssen aee06c4574 U4-9898 Reset password should unlock a locked account 2017-05-20 14:33:33 +02:00
Sebastiaan Janssen d0f69907db Ignore one test for now that only seems to fail on build server 2017-05-20 13:08:48 +02:00
Sebastiaan Janssen 71db33f4cd Merge pull request #1955 from umbraco/dev-v7.6
Oops, wrong branch was targetted for U4-9908
2017-05-20 12:30:56 +02:00
Sebastiaan Janssen cec6322a84 Merge pull request #1948 from umbraco/temp-u4-9908
U4-9908 - fix scope-related issues
2017-05-20 12:21:40 +02:00
Sebastiaan Janssen eb85e8cd78 Merge branch 'AndyButland-u4-9558' into dev-v7 2017-05-20 12:13:47 +02:00
Sebastiaan Janssen cf7c0dffb0 Merge branch 'u4-9558' of https://github.com/AndyButland/Umbraco-CMS into AndyButland-u4-9558 2017-05-20 11:48:47 +02:00
Sebastiaan Janssen 78d91a353a Merge branch 'jamescoxhead-U4-9872' into dev-v7 2017-05-20 11:35:02 +02:00
Sebastiaan Janssen 22d778ed28 Adds UDI redirect for FollowExternalRedirect
Checks if the redirect property exists before trying to get it's value
Simplified conversions by asking for the property value by type
2017-05-20 11:34:03 +02:00
Sebastiaan Janssen a3a2b6499e Merge branch 'U4-9872' of https://github.com/jamescoxhead/Umbraco-CMS into jamescoxhead-U4-9872 2017-05-20 09:49:12 +02:00
dkoruba 65ed69cf06 add log if request to ScheduledPublishController fails without exception 2017-05-19 22:14:10 +02:00
Shannon Deminick c09cd95eb6 Merge pull request #1951 from umbraco/temp-U4-9919
U4-9919 Updated media files are deleted
2017-05-19 13:17:35 +10:00
Shannon Deminick 1d3490eb82 Merge pull request #1950 from umbraco/temp-U4-9646
U4-9646 RTE Link dialog should auto focus on url
2017-05-19 12:05:05 +10:00
Shannon b78c334589 Merge remote-tracking branch 'origin/master-v7' into dev-v7 2017-05-19 12:04:27 +10:00
Shannon Deminick b41de9b623 Merge pull request #1944 from umbraco/temp-U4-9848
U4-9848 Make sure NuGet version 3.4.4+ is installed in NuGet to prevent update errors
2017-05-19 12:02:11 +10:00
Shannon Deminick c51d29da52 Merge pull request #1947 from umbraco/temp-U4-9896
U4-9896 SqlCEconnection Type A originates from Version=4.0.0.0, Type B originates from 4.0.0.1
2017-05-19 11:54:40 +10:00
Shannon 54967e0150 U4-9935 UmbracoHelper doesn't have querying methods for handling UDI 2017-05-19 11:42:58 +10:00
Shannon 73e47402cb Fixes docs build 2017-05-19 10:20:00 +10:00
Callum Whyte 4b945f355a Modifying Members list view to use key instead of Id 2017-05-18 22:54:44 +01:00
Callum Whyte 3cf8ef9513 Including key property in model when selecting items in list view 2017-05-18 22:54:19 +01:00
Claus 79844154fb U4-9919 Updated media files are deleted 2017-05-18 11:30:11 +02:00
Claus 067a1ba8e6 U4-9646 RTE Link dialog should auto focus on url 2017-05-18 10:02:46 +02:00
Warren Buckley 120cb964a5 Merge pull request #1949 from umbraco/temp-u4-9926
U4-9926 - fix partial view macro udis
2017-05-17 13:39:48 +01:00
Stephan 147a1daf6d U4-9926 - fix partial view macro udis 2017-05-17 12:09:28 +02:00
Shannon 9badb35c05 fix merge issue 2017-05-17 20:08:53 +10:00
Shannon 765decf3b1 Merge remote-tracking branch 'origin/dev-v7.6' into dev-v7
# Conflicts:
#	build/UmbracoVersion.txt
#	src/SolutionInfo.cs
#	src/Umbraco.Core/Configuration/UmbracoVersion.cs
#	src/Umbraco.Core/Services/MediaService.cs
#	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
#	src/Umbraco.Web/Trees/PartialViewMacrosTree.cs
#	src/Umbraco.Web/Trees/PartialViewsTree.cs
2017-05-17 20:00:29 +10:00
AndyButland eb35791003 Reverted media picker behaviour when selecting images to use just configured image types 2017-05-16 21:16:11 +01:00
Jason Prothero 65654de06a Merge pull request #2 from protherj/fips-refactoring
Update Unit Tests to check for the correct version of Examine
2017-05-16 11:10:55 -07:00
Jason Prothero 2334596bf3 Update Unit Tests to check for the correct version of Examine 2017-05-16 11:06:00 -07:00
Jason Prothero 1d664bce52 Merge pull request #1 from protherj/fips-refactoring
Updated Examine Nuget to latest version 1.8.3
2017-05-16 09:14:02 -07:00
Jason Prothero 9a515de43f Updated Examine Nuget to latest version 1.8.3 2017-05-16 09:12:50 -07:00
mikkelhm 69775c369a Bump version to 7.5.14 2017-05-16 08:33:19 +02:00
mikkelhm 3f25d3637a Bump version to 7.5.14 2017-05-16 08:32:33 +02:00
Stephan 02136d3060 U4-9908 - fix scope-related issues 2017-05-16 08:09:11 +02:00
Sebastiaan Janssen 99d4b13bb0 Adds SQLCE assembly redirect on fresh installs and upgrades 2017-05-15 22:54:46 +02:00
Sebastiaan Janssen e7b007386a U4-9848 Make sure NuGet version 3.4.4+ is installed in NuGet to prevent update errors 2017-05-15 19:00:05 +02:00
Claus 5dc3e0a3fc Merge pull request #1880 from marcemarc/temp-U4-9765
debug logging when there is a distributed calls config issue
2017-05-15 10:28:26 +02:00
Claus d146df43e6 Merge pull request #1903 from HarveyWilliams/dev-v7
U4-9806 Media Picker media hover should show full title
2017-05-15 10:19:04 +02:00
James Coxhead 451826a329 Fixes umbracoInternalRedirectId property to work with UDI IDs 2017-05-14 21:52:45 +01:00
Jason Prothero b55d065d45 Update to mark some methods as Obsolete and not seen by the VS editor 2017-05-11 09:17:56 -07:00
wanddy 83db63c5a8 Merge branch 'dev-v7.6-chnfix' of https://github.com/wanddy/Umbraco-CMS into dev-v7.6-chnfix 2017-05-11 16:29:10 +08:00
wanddy 1fb0b95428 Fix translation didn't work in some tree node. 2017-05-11 16:25:02 +08:00
wanddy 53e23f09dc Fix translation didn't work in some tree node. 2017-05-11 10:10:13 +08:00
wanddy 9e781173fc Merge branch 'dev-v7-chnfix' into dev-v7.6-chnfix 2017-05-11 09:25:02 +08:00
Jason Prothero fead30db38 Removed commented code for hash algorithm refactoring 2017-05-10 15:49:03 -07:00
Jason Prothero d8811d6b46 Refactored code for FIPS compliance support. Added/converted to using a more generic Hash() method instead of directly using MD5. 2017-05-10 13:35:28 -07:00
Mikkel Holck Madsen 080150baa3 Merge pull request #1924 from wanddy/dev-v7
Fix missing translation for some menu tree item
2017-05-10 21:18:58 +02:00
AndyButland dd40dd964c Ordered media types when returned for create dialog 2017-05-10 17:44:30 +02:00
wanddy bc51a98cfd Merge branch 'dev-v7-chnfix' into dev-v7.6-chnfix
# Conflicts:
#	src/Umbraco.Core/Services/MediaService.cs
#	src/Umbraco.Web/Trees/PartialViewMacrosTree.cs
#	src/Umbraco.Web/Trees/PartialViewsTree.cs
Fix some menu tree header won't be translated.
This may be caused by the explicit definition of tree node name.
Add missing translation item for en.xml and zh.xml
2017-05-10 23:25:03 +08:00
wanddy c6bc5ae6aa Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2017-05-10 22:37:47 +08:00
Shannon Deminick f84d3b435b Merge pull request #1898 from DaveLong/U4-9799
Fixed Serialization issue in ValidatePasswordResetCodeModel
2017-05-10 14:59:04 +10:00
Shannon Deminick 99855bce11 Adds AppVeyor build badge 2017-05-10 14:51:40 +10:00
Shannon d0b2f10a8c U4-9836 CreatorId on a media is overwritten on save 2017-05-10 14:32:09 +10:00
Shannon Deminick 70507501bd Merge pull request #1937 from AndyButland/u4-9836
U4-9836 - retains original media creator when media is updated
2017-05-10 14:31:34 +10:00
Shannon Deminick bbfd570b8a Merge pull request #1938 from suedeapple/U4-9886
U4 9886 - automaticly - > automatically (typo fix up)
2017-05-10 14:24:36 +10:00
AndyButland 4a593a0814 Reverted to empty whitelist for default. 2017-05-09 23:59:43 +02:00
AndyButland 3cc0df0273 Fixed media picker calculation of intersection of allowed whitelist and images list 2017-05-09 23:44:31 +02:00
AndyButland 712cd29fea Upload checks to utilise whitelist. Refactored check on white and black list to common extension method. 2017-05-09 23:29:30 +02:00
AndyButland 3d21448f89 Validated file uploads using white list if provided, before falling back to blacklist 2017-05-09 18:12:51 +02:00
suedeapple 7b4912b1e7 automaticly - > automatically 2017-05-09 16:47:36 +01:00
suedeapple 8c6362d947 automaticly - > automatically 2017-05-09 16:40:59 +01:00
AndyButland 01dd28fc61 Retains original media creator when media is updated 2017-05-09 16:01:06 +02:00
mikkelhm 67e2c911f7 Re adds the umbraco.presentation.targets for Umbraco.Web.UI as it handles default transormations for confg files 2017-05-09 00:26:40 +02:00
mikkelhm 36e60c774f Bump version to 7.6.1 2017-05-08 14:06:03 +02:00
mikkelhm 745252341f Merge branch 'dev-v7' into dev-v7.6
# Conflicts:
#	src/Umbraco.Core/Persistence/Migrations/MigrationBase.cs
#	src/Umbraco.Web.UI.Client/src/common/directives/components/imaging/umbimagegravity.directive.js
2017-05-08 13:58:08 +02:00
Mikkel Holck Madsen a2df4c5232 Merge pull request #1933 from umbraco/temp-U4-9864
U4-9864 Missing import and xss check in other PermissionEditor.aspx
2017-05-08 10:29:03 +02:00
Shannon Deminick d012d8e8b6 Merge pull request #1925 from SaDa1337/dev-v7
fixed console error on media picker
2017-05-08 17:11:28 +10:00
Mikkel Holck Madsen 9318da2883 Merge pull request #1931 from umbraco/temp-U4-9849-2
U4-9849 Query Builder not working in template editor. Always returns …
2017-05-08 09:05:29 +02:00
Shannon Deminick a08849f60a Merge pull request #1935 from jamescoxhead/U4-9869
Fix typo error in upgrade installer
2017-05-08 13:40:36 +10:00
Shannon Deminick 9792d8df25 Merge pull request #1930 from TomSteer/U4-9852
Change Context to be public on MigrationBase
2017-05-08 13:39:06 +10:00
Shannon Deminick 635cfe6b20 Merge pull request #1932 from dawoe/patch-1
Return empty string when e-mail is not filled
2017-05-08 13:37:48 +10:00
James Coxhead 9ccf7bdbab Fix typo error in upgrade installer
Changed "your" to "you're"
2017-05-07 16:22:54 +01:00
Chriztian Steinmeier 75e375ff54 Minor edits to the comments
Mainly "Id's" => "Ids" and "html" => "HTML" 👀
2017-05-05 23:55:23 +02:00
Chriztian Steinmeier 1a29a3237d Add files from Douglas Robar 2017-05-05 23:20:37 +02:00
Sebastiaan Janssen 0c520f2b43 Merge branch 'dev-v7' into dev-v7.6
# Conflicts:
#	build/Build.bat
2017-05-05 16:19:54 +02:00
Sebastiaan Janssen 85d10014c2 Make new build work when there's spaces in the current path 2017-05-05 16:14:59 +02:00
Claus 3c4b3f44c7 U4-9864 Missing import and xss check in other PermissionEditor.aspx 2017-05-05 14:52:01 +02:00
Sebastiaan Janssen c6956b5e98 Merge branch 'dev-v7' into dev-v7.6
# Conflicts:
#	.gitignore
#	build/Build.bat
2017-05-05 14:30:08 +02:00
Sebastiaan Janssen fcf5ecc166 Uses vswhere to figure out where VS17 is installed (if needed)
Removes targets file that was almost unused, moved the relevant bits to the main csproj
Updates BuildBelle.bat to be completely independent of installed version of node & npm on the machine
2017-05-05 14:14:37 +02:00
Dave Woestenborghs c5c87ff50d Return empty string when e-mail is not filled
Fix for http://issues.umbraco.org/issue/U4-9862
2017-05-05 13:27:32 +02:00
Stephan eb949e2cbc Fix UdiString to escape paths 2017-05-05 12:46:20 +02:00
Claus 8a096cd826 Merge pull request #1794 from TheBekker/fix-U4-9038
[fix-U4-9038] get and set media start node for mediaPickerOverlay in …
2017-05-05 10:51:31 +02:00
Claus 3b236ba724 Merge pull request #1794 from TheBekker/fix-U4-9038
[fix-U4-9038] get and set media start node for mediaPickerOverlay in …
2017-05-05 10:47:52 +02:00
Claus e7eaf6959f U4-9849 Query Builder not working in template editor. Always returns Model.Content.Site().Children()
adding missing nullchecks in the endpoint action.
ensuring promise returns before setting init data - the unresolved promise was being used on the query model instead of the actual text string the promise returns - causing the endpoint to fail to bind the model.
2017-05-04 15:08:37 +02:00
Tom Steer 3e294e290b Change Context to be public on MigrationBase 2017-05-04 09:10:35 +01:00
Shannon Deminick 751dc8df23 Merge pull request #1926 from avatart0ph/dev-v7.6
fix Add basic xss prevention logic
2017-05-04 11:05:49 +10:00
Morten Christensen 91047182fa Merge pull request #1929 from umbraco/temp-U4-9704
U4-9704 Sorting UDI media picker items, makes it store Int's
2017-05-03 13:20:25 +02:00
Claus 1030fd5294 U4-9704 Sorting UDI media picker items, makes it store Int's 2017-05-03 10:21:00 +02:00
Denise Michelle del Bando be2eb3f555 fix Add basic xss prevention logic
missing import on CleanForXss
2017-05-02 23:16:32 -04:00
Maciej Sadowski 0eafa14246 fixed console error on media picker 2017-05-02 15:36:39 +02:00
wanddy b807b84466 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2017-05-02 14:23:36 +08:00
wanddy ab551b2c96 Fix some menu tree header won't be translated.
This may be caused by the explicit definition of tree node name.

Signed-off-by: wanddy <wanddy@163.com>
2017-05-02 14:20:44 +08:00
wanddy 1520fa77d5 Add missing translation item for en.xml and zh.xml
Signed-off-by: wanddy <wanddy@163.com>
2017-05-02 14:12:58 +08:00
Shannon c1853e8c51 bumps version to 7.6.0 rtm 2017-05-02 13:42:20 +10:00
Shannon 31c965ae42 Merge remote-tracking branch 'origin/dev-v7' into dev-v7.6 2017-05-02 13:41:03 +10:00
Shannon Deminick d91fc6ce60 Merge pull request #1887 from umbraco/temp-U4-9775
U4-9775 AlreadyClosedException is thrown when retrieving media if the…
2017-05-02 13:40:28 +10:00
Shannon d5124e9739 Ensures that an UmbracoContext exist before emitting the cache handler events 2017-05-01 21:10:22 +10:00
Shannon d9b507c947 bumps version to RC4 so we can build new dependencies against forms/deploy 2017-04-30 23:26:04 +10:00
Shannon d3fcdfb176 updates nuget semver ref in nuspec 2017-04-30 23:24:26 +10:00
Shannon 2479c5a272 updates other nuget refs that shouldnt be there 2017-04-30 23:21:19 +10:00
Shannon fee071db22 Merge branch 'dev-v7.6' of https://github.com/umbraco/Umbraco-CMS into dev-v7.6 2017-04-30 23:20:16 +10:00
Shannon 004e00599d Fixing nuget package issues , semver 2 is only for 452+ which we dont have, we shouldnt be using it and it adds more dependencies that we don't need right now 2017-04-30 23:19:45 +10:00
Morten Christensen 2e2e8b43b0 Merge pull request #1917 from Frozire/patch-1
Edit DA with minor spelling and compound word changes
2017-04-30 14:05:14 +02:00
Morten Christensen e77c5f8667 Keep the Concierge Product name 2017-04-30 14:04:00 +02:00
Shannon Deminick 3509a2c40f Merge pull request #1908 from umbraco/temp-scope-events-stale-entities
POC to normalize all event entities when we track events so that all …
2017-04-30 19:28:19 +10:00
Shannon 378d0f7939 chagnes test params to be slightly less hacky 2017-04-30 19:21:13 +10:00
Shannon d64fa7f92d Fixes tests, ensures we null check when generating hashes for items in a collection 2017-04-30 19:14:36 +10:00
Stephan ea14170272 minor cleanup 2017-04-30 10:14:48 +02:00
Shannon 73209d7e2c Merge branch 'dev-v7' into dev-v7.6 2017-04-30 17:13:14 +10:00
Shannon Deminick cf8ead62ac Merge pull request #1904 from jwoods1/patch-2
Fixed issue on line 216
2017-04-30 17:11:44 +10:00
Shannon Deminick 8461aea7d8 Merge pull request #1907 from wanddy/dev-v7
Improve Chinese translation.
2017-04-30 17:10:58 +10:00
Shannon Deminick 034de1651b Merge pull request #1910 from abryukhov/patch-9
ru.xml - Missing newest area & key from en.xml
2017-04-30 17:09:30 +10:00
Shannon Deminick dcb8aa7e56 Merge pull request #1909 from abryukhov/patch-8
en_us.xml - Missing newest area & key from en.xml
2017-04-30 17:09:15 +10:00
Shannon Deminick e8a52a95da Merge pull request #1914 from dawoe/patch-1
Added dutch translation for usernameHint
2017-04-30 17:08:42 +10:00
Shannon Deminick 42c99e0f07 Merge pull request #1916 from stelim/patch-1
Adding login hint to German language file
2017-04-30 17:08:29 +10:00
Shannon Deminick a31b368b60 Merge pull request #1919 from NathalieLarsson/patch-1
Adding login hint to Swedish language file
2017-04-30 17:05:29 +10:00
Shannon Deminick 77f6d28a74 Merge pull request #1920 from camaya/patch-1
Add Spanish translation for usernameHint
2017-04-30 17:04:56 +10:00
Shannon Deminick 0b8d3ef214 Merge pull request #1921 from mikecp/patch-1
Adding login hint to French language file
2017-04-30 17:04:44 +10:00
Shannon Deminick a4f83f9c00 Merge pull request #1922 from abryukhov/patch-10
Adding 'usernameHint' key to ru.xml lang file
2017-04-30 17:04:30 +10:00
Shannon Deminick 85467976ad Merge pull request #1913 from umbraco/temp-U4-9824-v76
Change username to email in login dialog
2017-04-30 17:04:16 +10:00
Alexander Bryukhov d7e93fe466 Adding 'usernameHint' key to ru.xml lang file 2017-04-30 11:56:47 +07:00
Sebastiaan Janssen 660f048b4f U4-9812 FailedLoginAttempts should be reset to 0 after a successfull login attempt
(cherry picked from commit 3242b31a8a)
2017-04-29 10:22:57 +02:00
Sebastiaan Janssen 9fa76a0133 Merge pull request #1911 from umbraco/temp-U4-9812
U4-9812 FailedLoginAttempts should be reset to 0 after a successfull …
2017-04-29 10:19:26 +02:00
Michael Latouche 444c444f0e Adding login hint to French language file 2017-04-29 00:03:57 +02:00
Cristhian Amaya 383bbbe7e0 Add Spanish translation for usernameHint 2017-04-28 15:19:27 -05:00
Stephan 72eddca3c6 Merge branch 'dev-v7.6' into temp-scope-events-stale-entities 2017-04-28 19:19:36 +02:00
Nicklas Kevin Frank 7c2ddde311 Fixed typo in Dokumenttype 2017-04-28 17:24:43 +02:00
Nathalie Festin c6229e4fcb Adding login hint to Swedish language file
Added usernamehint to placeholders
2017-04-28 15:44:46 +02:00
Nicklas Kevin Frank fbac0aba8b Update da.xml with translation for concierge 2017-04-28 14:56:57 +02:00
Nicklas Kevin Frank f01511c592 Edit DA with minor spelling and compound word changes 2017-04-28 14:48:32 +02:00
Stefan Limbacher 187354f0bd Adding login hint to German language file 2017-04-28 14:29:13 +02:00
Dave Woestenborghs 2f540b1bfa Translated the usually part 2017-04-28 14:25:21 +02:00
Dave Woestenborghs b1f104d1de Changed it to be more consisten
Changed to be more consistent with other dutch translations
2017-04-28 14:24:10 +02:00
Dave Woestenborghs ba5fcad09a Added dutch translation for usernameHint 2017-04-28 14:17:51 +02:00
Niels Hartvig d553eb2978 Change it back to username and then with a hint for email (for backwards compat.) 2017-04-28 13:57:29 +02:00
Niels Hartvig d1e6c0e835 Change username to email in login dialog 2017-04-28 13:37:19 +02:00
Stephan 244977dc95 packages - trace errors 2017-04-28 13:34:35 +02:00
Sebastiaan Janssen 3242b31a8a U4-9812 FailedLoginAttempts should be reset to 0 after a successfull login attempt 2017-04-28 12:46:58 +02:00
Stephan efc3261163 scope - dont break 2017-04-28 11:43:48 +02:00
Stephan 8c6aa9875d scope - dont rename 2017-04-28 11:26:41 +02:00
Stephan f89ce1ff26 scope - cleanup 2017-04-28 10:58:57 +02:00
Shannon 1274fbaefd Fixes up the equality members for the event args types to include Gethash code and sequence equal checking, this is done by a base class used by event args that deal with collections. 2017-04-28 18:14:50 +10:00
Shannon 8140dfdc04 ads notes 2017-04-28 16:57:13 +10:00
Shannon a69eba61c8 Fixes detecting enumerable and ensures that the event is added to the result if we can't cast to IEntity 2017-04-28 14:54:08 +10:00
Alexander Bryukhov 46078a841c Missing newest area & key from en.xml 2017-04-28 11:43:50 +07:00
Alexander Bryukhov 0eb5e5f6e4 Missing newest area & key from en.xml 2017-04-28 11:41:20 +07:00
Shannon ec9020f63e Fixes mappings 2017-04-28 13:34:32 +10:00
Shannon 0b61685fc8 Adds ability to supersede events so we don't have an issue of saved event being raised for an entity after it's been deleted. 2017-04-28 13:26:56 +10:00
Shannon 3779b3c782 Updates base entities to contain a DeletedDate if the entity gets deleted 2017-04-28 11:15:19 +10:00
Shannon 5b0e824301 Merge branch 'dev-v7.6' into temp-scope-events-stale-entities 2017-04-28 10:32:01 +10:00
Shannon d24b0aa9eb oops undeletes a couple files that are still needed for the custom package ascx page 2017-04-28 10:30:47 +10:00
Shannon 9cd7e09986 POC to normalize all event entities when we track events so that all args contain the latest (non stale) entity 2017-04-28 10:04:43 +10:00
Shannon 9f505a7976 bumps to rc3 version 2017-04-28 08:27:31 +10:00
Jason Woods f737004544 Removed space before svalue 2017-04-27 16:13:41 -06:00
Jason Woods 850e354b11 wrapped all values in double quotes
Wrapped image src and crop values in double quotes to keep consistent across all saves and updates.
2017-04-27 16:03:45 -06:00
Shannon 1b27114014 Merge branch 'temp-CON-1267' into dev-v7.6 2017-04-28 07:53:16 +10:00
Shannon Deminick d8b235ad62 Merge pull request #1906 from umbraco/temp-CON-1267
CON-1267 Update Our to not offer v6 to people on < 7.6.0
2017-04-28 07:52:19 +10:00
Shannon 56581478c8 Merge remote-tracking branch 'origin/dev-v7' into temp-CON-1267 2017-04-28 07:48:04 +10:00
Shannon 2be330d237 adds notes, changes to protected 2017-04-28 07:45:01 +10:00
Shannon 4381a700ba Updates UmbracoVirtualNodeRouteHandler to have a new protected GetUmbracoContext method used to get the umb context used in the rest of the code 2017-04-28 07:38:03 +10:00
Shannon 99821954f1 adds notes 2017-04-28 07:31:44 +10:00
Shannon Deminick 10a15be8ad Merge pull request #1901 from tompipe/U4-9384-StaleVariableFix
Quick/simple fix for the stale variable
2017-04-28 07:28:00 +10:00
wanddy 0a2830aece Improve Chinese translation.
Signed-off-by: wanddy <wanddy@163.com>
2017-04-27 22:59:17 +08:00
Stephan d1094eea7a Merge pull request #1905 from umbraco/temp-tasks
Publicize more IBackgroundTask plumbing
2017-04-27 14:46:33 +02:00
Shannon c629a50f39 Fixes entity service and figuring out which GUID to go with which object type 2017-04-27 13:29:31 +10:00
Shannon 430f906ae6 Merge remote-tracking branch 'origin/dev-v7.6' into temp-CON-1267 2017-04-27 13:28:34 +10:00
Shannon 736798c769 Merge remote-tracking branch 'origin/dev-v7' into temp-CON-1267
# Conflicts:
#	src/Umbraco.Core/Exceptions/ConnectionException.cs
#	src/Umbraco.Core/Services/PackagingService.cs
#	src/Umbraco.Web/Editors/PackageInstallController.cs
2017-04-27 13:27:23 +10:00
Shannon e913034d93 Changes PackagingService to not have a different base class since it was not needed 2017-04-27 13:21:56 +10:00
Shannon bed5f8a03b backports updates from 7.6 so that the packages.umbraco.org endpoint is not used for fetching package files any longer 2017-04-27 13:21:07 +10:00
Stephan 0291ab615d Fix shadow wrapper cleanup 2017-04-26 17:38:06 +02:00
Stephan ceeea7827e Fix shadow wrapper cleanup 2017-04-26 14:44:48 +02:00
Shannon 756b4d24c0 Updates endpoint to include hidden package files 2017-04-26 22:10:34 +10:00
Stephan ffe3fc9257 deploy-293 - fix normalization 2017-04-26 13:25:54 +02:00
Shannon 26bd3c7c0b removes unneeded closing of stream since it's disposed 2017-04-26 19:42:58 +10:00
Shannon 944b3dcaac New method for IPackagingService to fetch a package from the repo, removes usages of the old repo endpoint, removes ability to push a package from the back office to Our since that would require a different endpoint. 2017-04-26 19:02:36 +10:00
Stephan ba489afe9a Publicize more IBackgroundTask plumbing 2017-04-26 09:07:48 +02:00
Shannon 968d52e490 Removes old packager files that should absolutely never be used 2017-04-26 15:46:07 +10:00
Shannon ebbe9f6ed0 Removes old packager files that should absolutely never be used 2017-04-26 15:45:37 +10:00
Shannon ba32636fe7 Merge remote-tracking branch 'origin/dev-v7' into temp-CON-1267 2017-04-26 14:18:27 +10:00
Shannon a6f9d14a1b Merge remote-tracking branch 'origin/dev-v7.6' into temp-CON-1267 2017-04-26 14:18:05 +10:00
Shannon 7cd385dd6b disables ssl by default 2017-04-26 14:17:24 +10:00
Shannon 5d4a97591a Cherry picks changes for package fetching for Our to use the new endpoint and passes in the current version 2017-04-26 14:08:37 +10:00
Shannon bfb81f6362 Allows for the umb pckage repo rest api endpoint to be configurable - for testing 2017-04-26 14:04:47 +10:00
Jason Woods 23816665f3 Fixed issue on line 216
Found that when uploading media from the folder browser caused an issue of invalid JSON object being stored in the database.  Added quotes around the property values.
2017-04-25 08:21:02 -06:00
Warren Buckley ca3dc030bc Merge pull request #1893 from umbraco/temp-u4-9764
U4-9764 - add FirstChild with predicate extension
2017-04-25 11:37:37 +01:00
mikkelhm 4775aff749 Bump version to RC2 2017-04-25 11:15:51 +02:00
Warren Buckley 9d20ee293b Merge pull request #1889 from umbraco/temp-U4-9758
U4-9758 New index can't be applied when CmsMember table has very long login names
2017-04-25 10:01:35 +01:00
Warren Buckley a9b820de31 Merge branch 'dev-v7.6' into temp-U4-9758 2017-04-25 09:58:20 +01:00
Stephan 3813653852 deploy-293 - only if not already 7.6 2017-04-25 10:46:37 +02:00
Warren Buckley a4720a2221 Adds null check - So that we still add the index if we don't have any member entries as of yet 2017-04-25 09:13:48 +01:00
Harvey Williams 81354cea3c U4-9806 Media Picker media hover should show full title
Added title to all media items in the media picker rather than just SVG and normal images.

Solving an issue where whole titles could not be visible if the title was too long.
2017-04-24 16:29:35 +01:00
Warren Buckley 728b71c4bd Merge pull request #1902 from umbraco/temp-deploy-293
temp-deploy-293
2017-04-24 16:08:01 +01:00
Stephan 9d7975d970 deploy-293 - fix 2017-04-24 16:52:31 +02:00
Emil Wangaa 7505401511 Merge pull request #1896 from umbraco/temp-U4-9760
U4-9760 - Master Templates & Tree Bug
2017-04-24 16:04:00 +02:00
Warren Buckley 7ee0a278f7 Adss null check 2017-04-24 14:57:57 +01:00
Stephan 1adbe9ddcb deploy-293 - normalize template guids on upgrade to 7.6 2017-04-24 15:52:44 +02:00
Tom Pipe 67e3ec2ae0 Quick/simple fix for the stale variable
The umbracoContext variable can hold a null reference to UmbracoContext.Current. 

If a request containing a file extension is passed through an UmbracoVirtualNodeRouteHandler, the UmbracoContext will be null, because a context is never created for urls containing extensions due to https://github.com/umbraco/Umbraco-CMS/blob/5397f2c53acbdeb0805e1fe39fda938f571d295a/src/Umbraco.Core/UriExtensions.cs#L143

A call can be made to EnsureContext in the overridden FindContent method, but the fresh context would never get picked up, instead the variable always contains a null reference, and an exception is then thrown on line 23
2017-04-24 13:23:12 +01:00
Warren Buckley d6272b0cdb Merge branch 'temp-U4-9760' of https://github.com/umbraco/Umbraco-CMS into temp-U4-9760 2017-04-24 13:19:36 +01:00
Warren Buckley ce7dd19a8f Updates the template controller save method - to take into account if the master you are updating to is a sub master that has children that there path's need updating too 2017-04-24 13:19:30 +01:00
Shannon d295174e53 Updates JS to include the current umbraco version when requesting a package's details, updates the c# to use a new endpoint on OUR to ensure that the correct file is downloaded based on the umb version passed in. 2017-04-24 21:31:35 +10:00
Mads Rasmussen 55022e2aaf fix removeNode check to only be for the root node 2017-04-24 12:46:45 +02:00
Warren Buckley 4ffca2e4bf Merge pull request #1900 from umbraco/temp-deploy-103
deploy-103 - fix PublicAccessRepository
2017-04-24 09:53:52 +01:00
Stephan 4a38b8acd1 Fix broken refs to some libs 2017-04-24 10:50:25 +02:00
Stephan d93b8b869e deploy-103 - fix PublicAccessRepository 2017-04-21 16:02:29 +02:00
Shannon bec4e442fb bumps to RC1 2017-04-21 17:45:27 +10:00
Dave Long b88e714050 Fixed Serialization issue in Password Reset Validate Model 2017-04-21 08:33:21 +02:00
Shannon Deminick da8c46e426 Merge pull request #1859 from alexxn/dev-v7
Add basic xss prevention logic
2017-04-21 13:05:40 +10:00
Shannon 72cc5ce88b Moves binding redirects to pre app startup 2017-04-21 12:15:36 +10:00
Shannon Deminick 63763d025e Merge pull request #1897 from umbraco/temp-u4-9798
u4-9798 - Moves LockTable and LockObject Migrations to 7.6
2017-04-21 11:28:37 +10:00
mikkelhm f76fa6bde6 Moves LockTable and LockObject Migrations to 7.6 2017-04-20 23:42:15 +02:00
Warren Buckley c34a1060f7 When we create a brand new template & set a master template we were removing the entire tree for templates - this adds in a check to not do the remove of the old node if its a brand new template we are creating 2017-04-20 15:49:49 +01:00
Warren Buckley a231cedd8e Merge pull request #1895 from umbraco/temp-U4-9795
fixes: U4-9795 Update alert in public access dialog to follow same conventions as other alerts
2017-04-20 15:12:12 +01:00
Mads Rasmussen 20526b40bf fixes: U4-9789 Email input type is not same height as text input type 2017-04-20 12:03:29 +02:00
Mads Rasmussen 5008a2be7f update class on notification 2017-04-20 11:29:16 +02:00
Mads Rasmussen 03a395d1f9 remove unnecessary break from language file 2017-04-20 11:02:49 +02:00
Mads Rasmussen 734df8685d update notification to use alert class instead of custom error class 2017-04-20 10:57:57 +02:00
Claus 92dad1af1c Merge branch 'AndyButland-u4-9652' into dev-v7.6 2017-04-20 10:25:36 +02:00
Claus d897e78b27 Merge branch 'u4-9652' of git://github.com/AndyButland/Umbraco-CMS into AndyButland-u4-9652
# Conflicts:
#	src/Umbraco.Core/Services/EntityService.cs
2017-04-20 10:23:54 +02:00
Shannon Deminick d79115fcdf Merge pull request #1892 from umbraco/temp-deploy-103
deploy-103 - support member groups in entity service
2017-04-20 11:35:13 +10:00
Shannon Deminick 992073ab4e Merge pull request #1888 from umbraco/temp-U4-9717
fixes: U4-9717 7.6 "Do something else"-button
2017-04-20 11:00:49 +10:00
Shannon 3c9b144927 updates log4net binding redirect to disregard the signing token so it can be null or can be any token and it will redirect 2017-04-20 10:50:16 +10:00
AndyButland b7e4f58503 Ensured EntityService GetKeyById and GetIdByKey respect passed object type 2017-04-19 18:38:24 +01:00
Stephan 5880df3859 U4-9764 - add FirstChild with predicate extension 2017-04-19 18:56:12 +02:00
Stephan c11dce7b6e deploy-103 - support member groups in entity service 2017-04-19 17:20:44 +02:00
Mads Rasmussen 004a3e2808 Merge pull request #1882 from umbraco/temp-U4-9769
U4-9769 - BG Color change for installer to purple hue
2017-04-19 14:42:43 +02:00
Mads Rasmussen d05bfc8983 use same purple as the login screen 2017-04-19 14:39:38 +02:00
Shannon Deminick 5bb7223a79 Merge pull request #1890 from umbraco/temp-u4-9782
u4-9782 - Adds assemblyRedirect for log4net in the nuget upgrade transform
2017-04-19 20:29:22 +10:00
mikkelhm c9a816f25e Adds assemblyRedirect for log4net in the nuget upgrade transform 2017-04-19 12:21:49 +02:00
Shannon 13cfb42287 Resizes LoginName column so that it can be indexed but only if the data in the column doesn't exceed a max size 2017-04-19 20:16:43 +10:00
Mads Rasmussen 334fcf38ec fixes: U4-9780 Use email input type for password reset 2017-04-19 11:25:14 +02:00
Mads Rasmussen 8873d0f79d fixes: U4-9717 7.6 "Do something else"-button 2017-04-19 10:04:55 +02:00
Shannon b499b45a5c fixes test 2017-04-19 16:09:59 +10:00
Shannon d5a71ec1da Adds important note for 7.6 upgrades to the nuget upgrade doc 2017-04-19 16:05:24 +10:00
Shannon 1402494e47 Reverts changes made for U4-8963 2017-04-19 15:41:26 +10:00
Shannon 7c491c1fc1 U4-9768 Examine Management dashboard indexers and searchers not in same order 2017-04-19 14:53:46 +10:00
Shannon 460dd69884 updates the is multiple check to check for default pre-values since those won't be persisted 2017-04-19 14:38:48 +10:00
Shannon beda99963e Merge remote-tracking branch 'origin/dev-v7.6' into dev-v7.6 2017-04-19 14:36:28 +10:00
Shannon b06f16f5f7 Fixes issues with U4-7318 2017-04-19 14:36:23 +10:00
Shannon Deminick f9d79871b4 Merge pull request #1837 from Jeavon/U4-9684
U4-9684 UDI Media Picker Value Converter should cache prevalues
2017-04-19 14:35:29 +10:00
Shannon 777b02b84c Merge remote-tracking branch 'origin/dev-v7' into dev-v7.6
# Conflicts:
#	build/NuSpecs/UmbracoCms.nuspec
#	build/UmbracoVersion.txt
#	src/SolutionInfo.cs
#	src/Umbraco.Core/Configuration/UmbracoVersion.cs
#	src/Umbraco.Core/IO/IFileSystem.cs
#	src/Umbraco.Core/Media/ImageHelper.cs
#	src/Umbraco.Core/Models/ContentExtensions.cs
#	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
#	src/Umbraco.Web.UI/packages.config
2017-04-18 20:17:59 +10:00
Shannon Deminick e322ab6f75 Merge pull request #1879 from umbraco/temp-U4-7009
U4-7009 Changing passwords design oversight
2017-04-18 20:15:33 +10:00
Shannon d19bebc404 Merge branch 'dev-v7.6' into temp-U4-7009 2017-04-18 20:10:27 +10:00
Shannon 46dd86c745 Moves logic for checking if the current user (based on the current thread) is an admin and in which case can reset the password to an extension method 2017-04-18 20:09:27 +10:00
Shannon Deminick 62af834176 Merge pull request #1876 from jwoods1/patch-1
The form closing tag
2017-04-18 13:17:12 +10:00
Shannon 2dac1b3cf5 Merge branch 'normalize-stream-seek' of https://github.com/JimBobSquarePants/Umbraco-CMS into JimBobSquarePants-normalize-stream-seek
# Conflicts:
#	src/Umbraco.Core/Media/ImageHelper.cs
2017-04-18 13:11:44 +10:00
Shannon Deminick 68fb951283 Merge pull request #1885 from JimBobSquarePants/fix-image-memoryleak
EncodingParameters implements IDisposable
2017-04-18 13:08:04 +10:00
Shannon Deminick 1ca825de62 Merge pull request #1886 from JimBobSquarePants/filesystem-docs
Document the IFileSystem interface
2017-04-18 13:05:35 +10:00
Shannon 13ccd86192 Adds another check for not being able to read the index 2017-04-18 12:35:21 +10:00
Shannon 336266c0eb U4-9775 AlreadyClosedException is thrown when retrieving media if the app domain is currently in a shutdown state and the site is under heavy load 2017-04-18 12:32:44 +10:00
James Jackson-South 54b57f7d51 Document the IFileSystem interface 2017-04-15 17:21:48 +10:00
James Jackson-South 2f6e161120 EncodingParameters implements IDisposable 2017-04-15 16:41:24 +10:00
Warren Buckley 379bbe5bc4 Change background color to purple to the overlay solid color before we login to backoffice at end of installer 2017-04-13 12:06:48 +01:00
Warren Buckley 5c558b0eeb Merge pull request #1881 from umbraco/temp-U4-9762
U4-9762 ezSearch package complains about pickers in macro parameters
2017-04-13 11:26:20 +01:00
Emil Wangaa 298e56ad05 Merge branch 'dev-v7.6' of https://github.com/umbraco/Umbraco-CMS into dev-v7.6 2017-04-12 14:24:27 +02:00
Emil Wangaa d74d2cd945 Fixes U4-9732 Insert Value in new template editor missing standard metadata fields 2017-04-12 14:24:10 +02:00
Sebastiaan Janssen e2dc4f36ad U4-9762 ezSearch package complains about pickers in macro parameters 2017-04-12 13:39:38 +02:00
Sebastiaan Janssen 9620c902cc Merge pull request #1878 from umbraco/temp-U4-9761
Fixes U4-9761: Creating a new partial view saves the file with a wrong path
2017-04-11 22:04:29 +02:00
Sebastiaan Janssen abda579da6 Merge pull request #1875 from umbraco/temp-U4-9753
fixes: U4-9753 When uploading, moving or deleting folders in the medi…
2017-04-11 22:00:40 +02:00
Sebastiaan Janssen 2e43e97ae2 Merge pull request #1867 from umbraco/temp-U4-9722
fixes: U4-9722 7.6 RC layout issues
2017-04-11 21:51:24 +02:00
Sebastiaan Janssen c7ac3e7691 Merge pull request #1873 from umbraco/temp-U4-9749
fixes: U4-9749 Clean up ace themes and modes
2017-04-11 21:41:00 +02:00
Sebastiaan Janssen a209a2067c Merge pull request #1874 from umbraco/temp-U4-9751
fixes: U4-9751 "Your recycle bin is empty" shows when folders are add…
2017-04-11 21:38:04 +02:00
Marc Goodson 58f9ff4b79 Add some debug logging when there is a distributed calls configuration issue 2017-04-11 20:37:59 +01:00
Sebastiaan Janssen b1c6276a67 U4-7009 Changing passwords design oversight 2017-04-11 20:53:34 +02:00
Mads Rasmussen 3950b35539 Merge pull request #1877 from umbraco/temp-U4-9756
U4-9756 Tree Picker Overlay - Support for emptystate message
2017-04-11 15:22:27 +02:00
Emil Wangaa 2f63364925 Fixes issue with creating new partial being saved with wrong path 2017-04-11 13:26:54 +02:00
Sebastiaan Janssen 376c78381d One more.. Reverts CodeAnalysis update to stay compatible with Models builder 2017-04-10 15:02:04 +02:00
Sebastiaan Janssen 0a09810f0f Reverts CodeAnalysis update to stay compatible with Models builder 2017-04-10 13:45:34 +02:00
Sebastiaan Janssen 43018e2793 Reverts CodeAnalysis update to stay compatible with Models builder 2017-04-10 13:35:20 +02:00
Warren Buckley ba559f6836 Pass the emptystate message in other places we use the treepicker 2017-04-10 10:54:29 +01:00
Warren Buckley a320b63fd6 Checks that the tree has items otherwise we display the emptystate message 2017-04-10 10:51:28 +01:00
Warren Buckley 200497b865 Dictionary is the most common treepicker that may not have any items in core 2017-04-10 10:42:26 +01:00
Warren Buckley 8bd38b3cdd For tree search results - we display a generic no results message for an emtpy state now. Need to check with Mads if I broke the transiston?! 2017-04-10 09:49:56 +01:00
Shannon f2c7c1e2c6 bumps version 2017-04-10 16:42:31 +10:00
Shannon 9f2c428a7c updates to latest Models Builder 2017-04-10 16:12:23 +10:00
Shannon a958f946ef bumps version (beta) so i can post the patch release 2017-04-08 13:57:43 +10:00
Shannon ac642619e7 Merge remote-tracking branch 'origin/dev-v7' into dev-v7.6 2017-04-08 13:54:13 +10:00
Shannon 688652fb91 U4-9752 Very slow indexing after 7.5.12 update 2017-04-08 13:53:10 +10:00
Jason Woods 4ef1eeb8bc The form closing tag
The form was closing tag was </div> should be </form>
2017-04-07 11:09:21 -06:00
Mads Rasmussen 0d7661a779 fixes: U4-9753 When uploading, moving or deleting folders in the media section you have to reload to see the changes 2017-04-07 13:59:26 +02:00
Mads Rasmussen 17f36c62cb fixes: U4-9751 "Your recycle bin is empty" shows when folders are added to media recycle bin 2017-04-07 12:26:29 +02:00
Mads Rasmussen 5a98150f15 fixes: U4-9749 Clean up ace themes and modes 2017-04-07 11:34:30 +02:00
Claus d6bc0934ff u4-6233: backporting preview fix. 2017-04-07 11:05:37 +02:00
Claus 29caacf3c3 u4-6233: escaping the calc function 2017-04-07 11:02:18 +02:00
Mads Rasmussen f091219f48 fixes: U4-6233 umbraco 7.2.1 - desktop preview - offcanvasmenu is cut off - see possible css fix 2017-04-07 10:26:27 +02:00
Sebastiaan Janssen 372a2f5df4 Merge pull request #1870 from umbraco/temp-U4-8432
U4-8432 Update log4net async appender to use the official log4net one
2017-04-07 08:11:42 +02:00
Shannon Deminick 1397bc6dbf Merge pull request #1869 from umbraco/temp-U4-9748
U4-9748 Add some debug logging for scheduled (un)publishing
2017-04-07 15:08:57 +10:00
Shannon 7c5a4d9d67 Changes Any calls to use native length calls 2017-04-07 15:08:32 +10:00
Shannon 183103dc16 reverts Moq which has regression issues 2017-04-07 14:16:28 +10:00
Shannon 4b2a5f8768 Merge branch 'dev-v7.6' into temp-U4-8432 2017-04-07 12:32:30 +10:00
Shannon Deminick 2c3693ac68 Merge pull request #1855 from abryukhov/patch-6
Missing some new keys in 'create' area
2017-04-07 12:28:33 +10:00
Shannon Deminick 7d90296e15 Merge pull request #1856 from abryukhov/patch-7
New keys added to the 'create' area
2017-04-07 12:28:17 +10:00
Shannon d4c831864d updates editor config with more defaults with larger spaces 2017-04-07 12:26:34 +10:00
Shannon Deminick 1a56bb9948 Merge pull request #1860 from Jeavon/EditorConfig
Add .editorConfig
2017-04-07 12:21:09 +10:00
Shannon Deminick 4e84260619 Merge pull request #1866 from umbraco/temp-u4--9747
Adds check for GuidUdi in MediaController
2017-04-07 12:13:25 +10:00
Shannon 62ddce60a5 updates nuspec 2017-04-07 12:09:05 +10:00
Shannon bc8829ce14 U4-8432 Update log4net async appender to use the official log4net one 2017-04-07 12:08:16 +10:00
Shannon d582d5c827 Fixes log4net nuspec entry 2017-04-07 12:06:17 +10:00
Shannon 604bddabdf Updateing the app.configs with the correct redirects for log4net since alll package installs are going to change these 2017-04-07 12:04:05 +10:00
Shannon e5af5bcc22 more binding redirects missing 2017-04-07 11:47:22 +10:00
Shannon Deminick 9f7f920229 Merge pull request #1868 from umbraco/issue-U4-9745
U4-9745 Update outdated NuGet dependencies
2017-04-07 11:38:18 +10:00
Shannon d1d98372cd Fixes binding redirects local transforms and nuget transforms 2017-04-07 11:37:23 +10:00
Sebastiaan Janssen 9feee42430 Oops, committed things to the wrong branch 2017-04-06 16:48:55 +02:00
Sebastiaan Janssen 876cb374ad Logs in DEBUG mode how much we're going to attempt to (un)publish and the result statuscodes of those attempts 2017-04-06 16:45:00 +02:00
Sebastiaan Janssen 16582c8207 U4-9745 Update outdated NuGet dependencies 2017-04-06 16:27:41 +02:00
Mads Rasmussen 2ee1df3dec update orange warning color to yellow 2017-04-06 16:25:09 +02:00
Mads Rasmussen fc862f8434 remove border radius from alerts 2017-04-06 16:24:22 +02:00
Mads Rasmussen 8d7891d203 remove negative margin 2017-04-06 16:18:27 +02:00
Niels Hartvig 5af773d1b0 Adds check for GuidUdi in MediaController 2017-04-06 16:14:28 +02:00
Mads Rasmussen 847ef34281 adjust colors on header and footer in content mini editor to match main editor 2017-04-06 16:12:55 +02:00
Mads Rasmussen a728f475aa remove margin from editor sub header in content mini editor 2017-04-06 16:11:03 +02:00
Mads Rasmussen 60f91d95e9 add separator to button groups with toggle 2017-04-06 16:09:46 +02:00
Claus 821532cbd4 Merge pull request #1864 from umbraco/temp-U4-9744
fixes: U4-9744 Creating folders from the media picker doesn't work
2017-04-06 14:42:50 +02:00
Claus e3a639b424 Merge pull request #1862 from umbraco/temp-U4-9729
fixes: U4-9729 New menus for Create dialogs are inconsistent with exi…
2017-04-06 14:36:22 +02:00
Claus 5c49aa9b43 Merge pull request #1863 from umbraco/temp-U4-9723
fixes: U4-9723 7.6.0-RC - dropdown in action menu is too far from button
2017-04-06 14:33:43 +02:00
Claus f040754547 Merge pull request #1861 from umbraco/temp-U4-9578
fixes: U4-9578 Increase default font-size for RTE
2017-04-06 14:29:36 +02:00
Mads Rasmussen 0da8604639 fixes: U4-9744 Creating folders from the media picker doesn't work 2017-04-06 11:34:50 +02:00
Mads Rasmussen dd09ba3e12 fixes: U4-9723 7.6.0-RC - dropdown in action menu is too far from button 2017-04-05 14:58:56 +02:00
Mads Rasmussen 896ea389a3 fixes: U4-9729 New menus for Create dialogs are inconsistent with existing Create Document Type panel 2017-04-05 13:23:13 +02:00
Stephan 759c6dfef2 Add a few SiteDomainHelper tests 2017-04-05 12:49:10 +02:00
Mads Rasmussen 809a3f952e fixes: U4-9578 Increase default font-size for RTE 2017-04-05 12:09:10 +02:00
Shannon dce9dea8f3 Merge branch 'dev-v7.6' of https://github.com/umbraco/Umbraco-CMS into dev-v7.6 2017-04-05 19:17:35 +10:00
Shannon b2a497ddba missing signalr reference in nuspec 2017-04-05 19:17:12 +10:00
Jeavon ea030d990f Add .editorconfig file to enforce whitespace and line breaks 2017-04-04 18:19:50 +01:00
Alex Novgorodov de9739118e Add basic xss prevention logic 2017-04-04 18:11:48 +03:00
Alexander Bryukhov ce08749d85 New keys added to the 'create' area 2017-04-04 13:17:23 +07:00
Alexander Bryukhov 1eea1f5f8f Missing some new keys in 'create' area
They are present in en.xml now, but not in en_us.xml
2017-04-04 11:21:07 +07:00
Mike 8d8bb4e237 fix HasImage() 2017-03-31 17:24:18 +02:00
Jeavon 00a32c4479 U4-9684 UDI Media Picker Value Converter should cache prevalues 2017-03-28 12:46:31 +01:00
leekelleher 6772b1de35 MNTP Content Picker - when rendering using the DocumentType Editor, querying for the 'startNodeId' is unrequired and could throw exceptions.
This would patch would resolve the following issues...

- U4-7602 - "7.4 Data Types with xpath queries specified caused Document Type edit/creation issues."
- U4-8098 - "Content Type editor can fail while rendering"
- U4-8900 - "XPath: "$current" on Multinodetreepicker gives error in Document Type editor"
2017-03-25 13:45:57 +00:00
TheBekker ab14b65078 [fix-U4-9038] get and set media start node for mediaPickerOverlay in grid 2017-03-13 22:54:20 +01:00
Bjarne Fyrstenborg ea13989b7e Allow leading whitespace in textstring prevalue editor 2017-03-02 23:19:45 +01:00
Marc Goodson 78bc38fe1b getUserLog and getLog don't have an id parameter
these methods blow up when the api doesn't return because they referenced an id variable that does not exist
2017-02-04 18:40:28 +00:00
Marc Goodson edb0a934a1 Fixes U4-9480
Allow more than one item from the dictionary object to be returned on the querystring
2017-02-04 18:35:47 +00:00
richarth f726dd59bf Spelling and Grammar changes
Spelling and Grammar changes
2017-01-20 11:47:10 +00:00
Pete Duncanson 9589500412 Fixed error label showing when you do a retry
Should be a nice and easy one, the bool for if the DB connection is valid or not is never cleared on when you do a retry.

http://issues.umbraco.org/issue/U4-9193
2017-01-06 20:40:09 +00:00
Michael Latouche 1c3b870ad2 Merge pull request #1 from umbraco/dev-v7
update my dev-v7 branch
2016-12-06 13:04:36 +01:00
Søren Gregersen 6a5002495c use already defined variable, instead of mapping the path twice
also fixed a slight indentation issue
2016-11-24 08:58:57 +01:00
bjarnef b3938cd7b2 Fix sorting of grid editor config 2016-11-22 20:39:18 +01:00
michael 3ce3a6f6ea Added files by mistake 2016-11-16 13:23:56 +01:00
michael b03e9f8fd5 issue U4-8967: updated labels as required and updated dialogs/linkpicker.html to be consistent with the structure overlay/linkpicker.html
I updated the labels in EN, FR, NL + other languages where I could figure out what was the update to perform.
2016-11-16 13:13:39 +01:00
gmargol 1e73bb12ac Fixing failing unit tests 2016-11-03 16:26:14 +00:00
Matthew Jones 662bf16a4f Fixed issue: U4-8664 TnyMCE RTE is not in the scope of UI localization.
The rich text editor previously had no knowledge of the current localisation region.

The complexity arrived from the $locale regions not having a direct mapping to TinyMce regions.  $locale regions are in the format of "de-de", "ru-ru", "en-gb", "en-us", etc.  The TinyMce locales are in the format of "de", "ru" and "en".  I've added some code in rte.controller.js to map from the former to the latter, but a fallback to "en" will need to be added if the current locale isn't supported by TinyMce, otherwise a runtime crash will occur.

The same is true of the codemirror plugin for TinyMce.  Language files don't exist for the plugin, but they are expected when different locales are provided.  I have therefore created placeholders that are equivalent to the TinyMce language files, but all are currently copied from english.
2016-11-03 16:13:03 +00:00
gmargol 26d450ad9a Adding optional parameters to tests 2016-11-03 11:31:33 +00:00
gmargol bab4c7715d Adding optional isApproved parameter instead of hardcoding 'true' value 2016-11-03 11:21:53 +00:00
AndyButland 27f121f25c Fixes debug setting health check to correctly indicate no issue if config setting is missing 2016-09-21 15:15:44 +02:00
rodyvansambeek b199f4072c Improved and added dutch translation
Added and changed some dutch translations, especially for members and subnodes (in a listview). The term "kinderen" only relates to children (persons), not items or nodes.
2016-02-17 09:46:49 +01:00
Mads Jørgensen 53928c02f8 Textarea made work 2014-04-16 22:20:55 +02:00
Mads Jørgensen 756d554b47 charlimit on textbox added 2014-04-16 20:55:45 +02:00
Mads Jørgensen fb4de621c0 Prevalue editor added to textbox 2014-04-16 20:10:53 +02:00
615 changed files with 14308 additions and 8529 deletions
+10
View File
@@ -0,0 +1,10 @@
root=true
[*]
end_of_line = lf
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
[*.{cs,cshtml,csx,vb,vbx,vbhtml,fs,fsx,txt,ps1,sql}]
indent_size = 4
+3 -1
View File
@@ -142,4 +142,6 @@ build/ui-docs.zip
build/csharp-docs.zip
build/msbuild.log
.vs/
src/packages/
src/packages/
build/tools/
src/PrecompiledWeb/*
+2
View File
@@ -1,3 +1,5 @@
[![Build status](https://ci.appveyor.com/api/projects/status/ikpgqxiw9v8opltv/branch/dev-v7?svg=true)](https://ci.appveyor.com/project/Umbraco/umbraco-cms-hs8dx/branch/dev-v7)
Umbraco CMS
===========
The friendliest, most flexible and fastest growing ASP.NET CMS used by more than 390,000 websites worldwide: [https://umbraco.com](https://umbraco.com)
+36 -3
View File
@@ -113,18 +113,51 @@ REM This is necessary because SETLOCAL is on in InstallGit.cmd so that one might
REM but the path setting is lost due to SETLOCAL
SET PATH="C:\Program Files (x86)\Git\cmd";"C:\Program Files\Git\cmd";%PATH%
SET toolsFolder=%CD%\tools\
IF NOT EXIST "%toolsFolder%" (
MD tools
)
SET nuGetExecutable=%CD%\tools\nuget.exe
IF NOT EXIST "%nuGetExecutable%" (
ECHO Getting NuGet so we can fetch some tools
ECHO Downloading https://dist.nuget.org/win-x86-commandline/latest/nuget.exe to %nuGetExecutable%
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://dist.nuget.org/win-x86-commandline/latest/nuget.exe', '%nuGetExecutable%')"
)
:: We need vswhere.exe for VS2017+
IF NOT EXIST "%toolsFolder%vswhere.exe" (
ECHO vswhere not found - fetching now
"%nuGetExecutable%" install vswhere -OutputDirectory tools -Verbosity quiet
)
FOR /f "delims=" %%A in ('dir "%toolsFolder%vswhere.*" /b') DO SET "vswhereExePath=%toolsFolder%%%A\"
MOVE "%vswhereExePath%tools\vswhere.exe" "%toolsFolder%vswhere.exe"
ECHO.
ECHO Making sure we have a web.config
IF NOT EXIST "%CD%\..\src\Umbraco.Web.UI\web.config" COPY "%CD%\..\src\Umbraco.Web.UI\web.Template.config" "%CD%\..\src\Umbraco.Web.UI\web.config"
for /f "usebackq tokens=1* delims=: " %%i in (`"%CD%\tools\vswhere.exe" -latest -requires Microsoft.Component.MSBuild`) do (
if /i "%%i"=="installationPath" set InstallDir=%%j
)
SET VSWherePath="%InstallDir%\MSBuild"
ECHO.
ECHO Visual Studio is installed in: %InstallDir%
SET MSBUILDPATH=C:\Program Files (x86)\MSBuild\14.0\Bin
SET MSBUILD="%MSBUILDPATH%\MsBuild.exe"
ECHO.
ECHO Reporting NuGet version
"%CD%\..\src\.nuget\NuGet.exe" help | findstr "^NuGet Version:"
"%nuGetExecutable%" help | findstr "^NuGet Version:"
ECHO.
ECHO Restoring NuGet packages
ECHO Into %nuGetFolder%
"%CD%\..\src\.nuget\NuGet.exe" restore "%CD%\..\src\umbraco.sln" -Verbosity Quiet -NonInteractive -PackagesDirectory "%nuGetFolder%"
"%nuGetExecutable%" restore "%CD%\..\src\umbraco.sln" -Verbosity Quiet -NonInteractive -PackagesDirectory "%nuGetFolder%"
IF ERRORLEVEL 1 GOTO :error
ECHO.
@@ -134,7 +167,7 @@ ECHO This takes a few minutes and logging is set to report warnings
ECHO and errors only so it might seems like nothing is happening for a while.
ECHO You can check the msbuild.log file for progress.
ECHO.
%MSBUILD% "Build.proj" /p:BUILD_RELEASE=%RELEASE% /p:BUILD_COMMENT=%COMMENT% /p:NugetPackagesDirectory="%nuGetFolder%" /consoleloggerparameters:Summary;ErrorsOnly /fileLogger
%MSBUILD% "Build.proj" /p:BUILD_RELEASE=%RELEASE% /p:BUILD_COMMENT=%COMMENT% /p:NugetPackagesDirectory="%nuGetFolder%" /p:VSWherePath=%VSWherePath% /consoleloggerparameters:Summary;ErrorsOnly /fileLogger
IF ERRORLEVEL 1 GOTO error
ECHO.
+57 -22
View File
@@ -1,33 +1,68 @@
@ECHO OFF
SETLOCAL
:: SETLOCAL is on, so changes to the path not persist to the actual user's path
SET release=%1
ECHO Installing Npm NuGet Package
SET nuGetFolder=%CD%\..\src\packages\
ECHO Configured packages folder: %nuGetFolder%
SET toolsFolder=%CD%\tools\
ECHO Current folder: %CD%
%CD%\..\src\.nuget\NuGet.exe install Npm.js -OutputDirectory %nuGetFolder% -Verbosity quiet
SET nodeFileName=node-v6.9.1-win-x86.7z
SET nodeExtractFolder=%toolsFolder%node.js.691
for /f "delims=" %%A in ('dir %nuGetFolder%node.js.* /b') do set "nodePath=%nuGetFolder%%%A\"
for /f "delims=" %%A in ('dir %nuGetFolder%npm.js.* /b') do set "npmPath=%nuGetFolder%%%A\tools\"
SET nuGetExecutable=%CD%\tools\nuget.exe
IF NOT EXIST "%nuGetExecutable%" (
ECHO Downloading https://dist.nuget.org/win-x86-commandline/latest/nuget.exe to %nuGetExecutable%
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://dist.nuget.org/win-x86-commandline/latest/nuget.exe', '%nuGetExecutable%')"
)
ECHO Adding Npm and Node to path
REM SETLOCAL is on, so changes to the path not persist to the actual user's path
PATH=%npmPath%;%nodePath%;%PATH%
:: We need 7za.exe for BuildBelle.bat
IF NOT EXIST "%toolsFolder%7za.exe" (
ECHO 7zip not found - fetching now
"%nuGetExecutable%" install 7-Zip.CommandLine -OutputDirectory tools -Verbosity quiet
)
SET buildFolder=%CD%
:: Put 7za.exe and vswhere.exe in a predictable path (not version specific)
FOR /f "delims=" %%A in ('dir "%toolsFolder%7-Zip.CommandLine.*" /b') DO SET "sevenZipExePath=%toolsFolder%%%A\"
MOVE "%sevenZipExePath%tools\7za.exe" "%toolsFolder%7za.exe"
ECHO Change directory to %CD%\..\src\Umbraco.Web.UI.Client\
CD %CD%\..\src\Umbraco.Web.UI.Client\
IF NOT EXIST "%nodeExtractFolder%" (
ECHO Downloading http://nodejs.org/dist/v6.9.1/%nodeFileName% to %toolsFolder%%nodeFileName%
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://nodejs.org/dist/v6.9.1/%nodeFileName%', '%toolsFolder%%nodeFileName%')"
ECHO Extracting %nodeFileName% to %nodeExtractFolder%
"%toolsFolder%\7za.exe" x "%toolsFolder%\%nodeFileName%" -o"%nodeExtractFolder%" -aos > nul
)
FOR /f "delims=" %%A in ('dir "%nodeExtractFolder%\node*" /b') DO SET "nodePath=%nodeExtractFolder%\%%A"
ECHO Do npm install and the grunt build of Belle
call npm cache clean --quiet
call npm install --quiet
call npm install -g grunt-cli --quiet
call npm install -g bower --quiet
call grunt build --buildversion=%release%
SET drive=%CD:~0,2%
SET nuGetFolder=%drive%\packages\
FOR /f "delims=" %%A in ('dir "%nuGetFolder%npm.*" /b') DO SET "npmPath=%nuGetFolder%%%A\"
ECHO Move back to the build folder
CD %buildFolder%
IF [%npmPath%] == [] GOTO :installnpm
IF NOT [%npmPath%] == [] GOTO :build
:installnpm
ECHO Downloading npm
ECHO Configured packages folder: %nuGetFolder%
ECHO Installing Npm NuGet Package
"%nuGetExecutable%" install Npm -OutputDirectory %nuGetFolder% -Verbosity detailed
REM Ensures that we look for the just downloaded NPM, not whatever the user has installed on their machine
FOR /f "delims=" %%A in ('dir %nuGetFolder%npm.* /b') DO SET "npmPath=%nuGetFolder%%%A\"
GOTO :build
:build
ECHO Adding Npm and Node to path
REM SETLOCAL is on, so changes to the path not persist to the actual user's path
PATH="%npmPath%";"%nodePath%";%PATH%
SET buildFolder=%CD%
ECHO Change directory to %CD%\..\src\Umbraco.Web.UI.Client\
CD %CD%\..\src\Umbraco.Web.UI.Client\
ECHO Do npm install and the grunt build of Belle
call npm cache clean --quiet
call npm install --quiet
call npm install -g grunt-cli --quiet
call npm install -g bower --quiet
call grunt build --buildversion=%release%
ECHO Move back to the build folder
CD "%buildFolder%"
+14
View File
@@ -57,6 +57,20 @@ $IndexPath = "../src/umbraco.web.ui.client/docs/api/index.html"
# Build the solution in debug mode
$SolutionPath = Join-Path -Path $SolutionRoot -ChildPath "umbraco.sln"
# Go get nuget.exe if we don't hae it
$NuGet = "$ToolsRoot\nuget.exe"
$FileExists = Test-Path $NuGet
If ($FileExists -eq $False) {
Write-Host "Retrieving nuget.exe..."
$SourceNugetExe = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
Invoke-WebRequest $SourceNugetExe -OutFile $NuGet
}
#restore nuget packages
Write-Host "Restoring nuget packages..."
& $NuGet restore $SolutionPath
& $MSBuild "$SolutionPath" /p:Configuration=Debug /maxcpucount /t:Clean
if (-not $?)
{
+13 -12
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<metadata minClientVersion="3.4.4">
<id>UmbracoCms.Core</id>
<version>7.0.0</version>
<title>Umbraco Cms Core Binaries</title>
@@ -14,12 +14,13 @@
<summary>Contains the core assemblies needed to run Umbraco Cms</summary>
<language>en-US</language>
<tags>umbraco</tags>
<dependencies>
<!--Must be this way because 2.0.5 is actually 1.2.15.0 and 2.0.6 is actually 2.0.6 !-->
<dependency id="log4net" version="[2.0.5,2.0.6)" />
<dependencies>
<dependency id="log4net" version="[2.0.8,3.0.0)" />
<dependency id="Log4Net.Async" version="[2.0.4,3.0.0)" />
<dependency id="Microsoft.AspNet.Mvc" version="[5.2.3,6.0.0)" />
<dependency id="Microsoft.AspNet.WebApi" version="[5.2.3,6.0.0)" />
<dependency id="Microsoft.AspNet.Identity.Owin" version="[2.2.1, 3.0.0)" />
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.2.1, 3.0.0)" />
<dependency id="Microsoft.Owin.Security.Cookies" version="[3.0.1, 4.0.0)" />
<dependency id="Microsoft.Owin.Security.OAuth" version="[3.0.1, 4.0.0)" />
<dependency id="Microsoft.Owin.Host.SystemWeb" version="[3.0.1, 4.0.0)" />
@@ -27,19 +28,19 @@
<dependency id="HtmlAgilityPack" version="[1.4.9.5, 2.0.0)" />
<dependency id="Lucene.Net" version="[2.9.4.1, 3.0.0.0)" />
<dependency id="SharpZipLib" version="[0.86.0, 1.0.0)" />
<dependency id="MySql.Data" version="[6.9.8, 7.0.0)" />
<dependency id="MySql.Data" version="[6.9.9, 7.0.0)" />
<dependency id="xmlrpcnet" version="[2.5.0, 3.0.0)" />
<dependency id="ClientDependency" version="[1.9.2, 2.0.0)" />
<dependency id="ClientDependency-Mvc5" version="[1.8.0.0, 2.0.0)" />
<dependency id="AutoMapper" version="[3.3.1, 4.0.0)" />
<dependency id="Newtonsoft.Json" version="[9.0.1, 10.0.0)" />
<dependency id="Examine" version="[0.1.82, 1.0.0)" />
<dependency id="ImageProcessor" version="[2.5.2, 3.0.0)" />
<dependency id="ImageProcessor.Web" version="[4.8.2, 5.0.0)" />
<dependency id="semver" version="[2.0.4, 3.0.0)" />
<!-- Markdown can not be updated due to: https://github.com/hey-red/markdownsharp/issues/71#issuecomment-233585487 -->
<dependency id="Newtonsoft.Json" version="[10.0.2, 11.0.0)" />
<dependency id="Examine" version="[0.1.83, 1.0.0)" />
<dependency id="ImageProcessor" version="[2.5.3, 3.0.0)" />
<dependency id="ImageProcessor.Web" version="[4.8.3, 5.0.0)" />
<dependency id="semver" version="[1.1.2, 3.0.0)" />
<!-- Markdown can not be updated due to: https://github.com/hey-red/markdownsharp/issues/71#issuecomment-233585487 -->
<dependency id="Markdown" version="[1.14.7, 2.0.0)" />
<dependency id="System.Threading.Tasks.Dataflow" version="[4.6.0, 5.0.0)" />
<dependency id="System.Threading.Tasks.Dataflow" version="[4.7.0, 5.0.0)" />
</dependencies>
</metadata>
<files>
+4 -4
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="2.8">
<metadata minClientVersion="3.4.4">
<id>UmbracoCms</id>
<version>7.0.0</version>
<title>Umbraco Cms</title>
@@ -16,10 +16,10 @@
<tags>umbraco</tags>
<dependencies>
<dependency id="UmbracoCms.Core" version="[$version$]" />
<dependency id="Newtonsoft.Json" version="[9.0.1, 10.0.0)" />
<dependency id="Umbraco.ModelsBuilder" version="[3.0.6, 4.0.0)" />
<dependency id="Newtonsoft.Json" version="[10.0.2, 11.0.0)" />
<dependency id="Umbraco.ModelsBuilder" version="[3.0.7, 4.0.0)" />
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.2.1, 3.0.0)" />
<dependency id="ImageProcessor.Web.Config" version="[2.3.0, 3.0.0)" />
<dependency id="ImageProcessor.Web.Config" version="[2.3.0, 3.0.0)" />
</dependencies>
</metadata>
<files>
+9 -1
View File
@@ -8,8 +8,16 @@
----------------------------------------------------
Don't forget to build!
*** IMPORTANT NOTICE FOR 7.6 UPGRADES ***
Be sure to read the version specific upgrade information before proceeding:
https://our.umbraco.org/documentation/Getting-Started/Setup/Upgrading/version-specific#version-7-6-0
You will most likely need to make some changes to your web.config and you will need to be
aware of the breaking changes listed there to see if these affect your installation.
Don't forget to build!
We've done our best to transform your configuration files but in case something is not quite right: remember we
backed up your files in App_Data\NuGetBackup so you can find the original files before they were transformed.
+12 -1
View File
@@ -330,6 +330,9 @@
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security.Cookies')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Net.Http.Formatting')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.CodeAnalysis.CSharp')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='log4net')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Data.SqlServerCe')" xdt:Transform="Remove" />
</assemblyBinding>
</runtime>
@@ -349,7 +352,7 @@
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -383,6 +386,14 @@
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0"/>
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845DCD8080CC91" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
+1 -2
View File
@@ -1,3 +1,2 @@
# Usage: on line 2 put the release version, on line 3 put the version comment (example: beta)
7.6.0
RC
7.6.6
+5 -1
View File
@@ -4,7 +4,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
@@ -30,6 +30,10 @@
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup></configuration>
+2 -2
View File
@@ -11,5 +11,5 @@ using System.Resources;
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("7.6.0")]
[assembly: AssemblyInformationalVersion("7.6.0-RC")]
[assembly: AssemblyFileVersion("7.6.6")]
[assembly: AssemblyInformationalVersion("7.6.6")]
+6 -6
View File
@@ -23,12 +23,12 @@ namespace Umbraco.Core
: base(serviceProvider, logger, packageActions)
{
}
/// <summary>
/// Gets the <see cref="IPackageAction"/> implementations.
/// </summary>
public IEnumerable<IAction> Actions
}
/// <summary>
/// Gets the <see cref="IAction"/> implementations.
/// </summary>
public IEnumerable<IAction> Actions
{
get
{
+22 -22
View File
@@ -48,7 +48,7 @@ namespace Umbraco.Core
/// <param name="cache"></param>
[Obsolete("Use the other constructor specifying a ProfilingLogger instead")]
public ApplicationContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache)
: this(dbContext, serviceContext, cache,
: this(dbContext, serviceContext, cache,
new ProfilingLogger(LoggerResolver.Current.Logger, ProfilerResolver.Current.Profiler))
{
}
@@ -89,7 +89,7 @@ namespace Umbraco.Core
/// <param name="replaceContext">If set to true and the singleton is already set, it will be replaced</param>
/// <returns></returns>
/// <remarks>
/// This is NOT thread safe
/// This is NOT thread safe
/// </remarks>
public static ApplicationContext EnsureContext(ApplicationContext appContext, bool replaceContext)
{
@@ -107,14 +107,14 @@ namespace Umbraco.Core
/// </summary>
/// <param name="cache"></param>
/// <param name="replaceContext">
/// If set to true will replace the current singleton instance - This should only be used for unit tests or on app
/// If set to true will replace the current singleton instance - This should only be used for unit tests or on app
/// startup if for some reason the boot manager is not the umbraco boot manager.
/// </param>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
/// <returns></returns>
/// <remarks>
/// This is NOT thread safe
/// This is NOT thread safe
/// </remarks>
[Obsolete("Use the other method specifying an ProfilingLogger instead")]
public static ApplicationContext EnsureContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache, bool replaceContext)
@@ -135,14 +135,14 @@ namespace Umbraco.Core
/// <param name="cache"></param>
/// <param name="logger"></param>
/// <param name="replaceContext">
/// If set to true will replace the current singleton instance - This should only be used for unit tests or on app
/// If set to true will replace the current singleton instance - This should only be used for unit tests or on app
/// startup if for some reason the boot manager is not the umbraco boot manager.
/// </param>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
/// <returns></returns>
/// <remarks>
/// This is NOT thread safe
/// This is NOT thread safe
/// </remarks>
public static ApplicationContext EnsureContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache, ProfilingLogger logger, bool replaceContext)
{
@@ -175,7 +175,7 @@ namespace Umbraco.Core
public CacheHelper ApplicationCache { get; private set; }
/// <summary>
/// Exposes the global ProfilingLogger - this should generally not be accessed via the UmbracoContext and should normally just be exposed
/// Exposes the global ProfilingLogger - this should generally not be accessed via the UmbracoContext and should normally just be exposed
/// on most base classes or injected with IoC
/// </summary>
public ProfilingLogger ProfilingLogger { get; private set; }
@@ -213,7 +213,7 @@ namespace Umbraco.Core
// GlobalSettings.CurrentVersion returns the hard-coded "current version"
// the system is configured if they match
// if they don't, install runs, updates web.config (presumably) and updates GlobalSettings.ConfiguredStatus
public bool IsConfigured
{
get { return _configured.Value; }
@@ -226,8 +226,8 @@ namespace Umbraco.Core
{
get
{
if (IsConfigured == false
&& DatabaseContext != null
if (IsConfigured == false
&& DatabaseContext != null
&& DatabaseContext.IsDatabaseConfigured)
{
var schemaresult = DatabaseContext.ValidateDatabaseSchema();
@@ -274,12 +274,12 @@ namespace Umbraco.Core
private Lazy<bool> _configured;
internal MainDom MainDom { get; private set; }
private void Init()
{
MainDom = new MainDom(ProfilingLogger.Logger);
MainDom.Acquire();
//Create the lazy value to resolve whether or not the application is 'configured'
_configured = new Lazy<bool>(() =>
{
@@ -289,7 +289,7 @@ namespace Umbraco.Core
var currentVersion = UmbracoVersion.GetSemanticVersion();
var ok =
//we are not configured if this is null
//we are not configured if this is null
string.IsNullOrWhiteSpace(configStatus) == false
//they must match
&& configStatus == currentVersion;
@@ -303,7 +303,7 @@ namespace Umbraco.Core
var found = Services.MigrationEntryService.FindEntry(Constants.System.UmbracoMigrationName, UmbracoVersion.GetSemanticVersion());
if (found == null)
{
//we haven't executed this migration in this environment, so even though the config versions match,
//we haven't executed this migration in this environment, so even though the config versions match,
// this db has not been updated.
ProfilingLogger.Logger.Debug<ApplicationContext>(string.Format("The migration for version: '{0} has not been executed, there is no record in the database", currentVersion.ToSemanticString()));
ok = false;
@@ -323,7 +323,7 @@ namespace Umbraco.Core
return false;
}
});
});
}
private string ConfigurationStatus
@@ -338,7 +338,7 @@ namespace Umbraco.Core
{
return String.Empty;
}
}
}
}
private void AssertIsNotReady()
@@ -363,7 +363,7 @@ namespace Umbraco.Core
}
internal set { _databaseContext = value; }
}
/// <summary>
/// Gets the current ServiceContext
/// </summary>
@@ -417,7 +417,7 @@ namespace Umbraco.Core
ResolverCollection.ResetAll();
//reset resolution itself (though this should be taken care of by resetting any of the resolvers above)
Resolution.Reset();
//reset the instance objects
this.ApplicationCache = null;
if (_databaseContext != null) //need to check the internal field here
@@ -430,14 +430,14 @@ namespace Umbraco.Core
/*
if (DatabaseContext.IsDatabaseConfigured && DatabaseContext.Database != null)
{
DatabaseContext.Database.Dispose();
}
*/
DatabaseContext.Database.Dispose();
}
*/
}
this.DatabaseContext = null;
this.Services = null;
this._isReady = false; //set the internal field
// Indicate that the instance has been disposed.
_disposed = true;
}
+8 -15
View File
@@ -4,12 +4,14 @@ using System.Text.RegularExpressions;
using System.Web;
using Umbraco.Core;
[assembly: PreApplicationStartMethod(typeof(BindingRedirects), "Initialize")]
namespace Umbraco.Core
{
/// <summary>
/// Manages any assembly binding redirects that cannot be done via config
/// Manages any assembly binding redirects that cannot be done via config (i.e. unsigned --> signed assemblies)
/// </summary>
internal class BindingRedirects
public sealed class BindingRedirects
{
public static void Initialize()
{
@@ -17,12 +19,9 @@ namespace Umbraco.Core
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
private static readonly Regex Log4NetAssemblyPattern = new Regex("log4net, Version=([\\d\\.]+?), Culture=neutral, PublicKeyToken=null");
private const string Log4NetReplacement = "log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a";
private static readonly Regex HtmlAgilityAssemblyPattern = new Regex("HtmlAgilityPack, Version=([\\d\\.]+?), Culture=neutral, PublicKeyToken=bd319b19eaf3b43a");
private const string HtmlAgilityReplacement = "HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a";
private static readonly Regex Log4NetAssemblyPattern = new Regex("log4net, Version=([\\d\\.]+?), Culture=neutral, PublicKeyToken=\\w+$", RegexOptions.Compiled);
private const string Log4NetReplacement = "log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a";
/// <summary>
/// This is used to do an assembly binding redirect via code - normally required due to signature changes in assemblies
/// </summary>
@@ -36,13 +35,7 @@ namespace Umbraco.Core
{
return Assembly.Load(Log4NetAssemblyPattern.Replace(args.Name, Log4NetReplacement));
}
//HtmlAgility:
if (HtmlAgilityAssemblyPattern.IsMatch(args.Name) && args.Name != HtmlAgilityReplacement)
{
return Assembly.Load(HtmlAgilityAssemblyPattern.Replace(args.Name, HtmlAgilityReplacement));
}
//AutoMapper:
// ensure the assembly is indeed AutoMapper and that the PublicKeyToken is null before trying to Load again
// do NOT just replace this with 'return Assembly', as it will cause an infinite loop -> stackoverflow
+2 -2
View File
@@ -89,7 +89,7 @@ namespace Umbraco.Core.Cache
public const string DataTypeCacheKey = "UmbracoDataTypeDefinition";
public const string DataTypePreValuesCacheKey = "UmbracoPreVal";
public const string IdToKeyCacheKey = "UI2K";
public const string KeyToIdCacheKey = "UK2I";
public const string IdToKeyCacheKey = "UI2K__";
public const string KeyToIdCacheKey = "UK2I__";
}
}
@@ -139,6 +139,12 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
internal CommaDelimitedConfigurationElement DisallowedUploadFiles
{
get { return GetOptionalDelimitedElement("disallowedUploadFiles", new[] {"ashx", "aspx", "ascx", "config", "cshtml", "vbhtml", "asmx", "air", "axd"}); }
}
[ConfigurationProperty("allowedUploadFiles")]
internal CommaDelimitedConfigurationElement AllowedUploadFiles
{
get { return GetOptionalDelimitedElement("allowedUploadFiles", new string[0]); }
}
[ConfigurationProperty("cloneXmlContent")]
@@ -307,6 +313,11 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
IEnumerable<string> IContentSection.DisallowedUploadFiles
{
get { return DisallowedUploadFiles; }
}
IEnumerable<string> IContentSection.AllowedUploadFiles
{
get { return AllowedUploadFiles; }
}
bool IContentSection.CloneXmlContent
@@ -0,0 +1,19 @@
using System.Linq;
namespace Umbraco.Core.Configuration.UmbracoSettings
{
public static class ContentSectionExtensions
{
/// <summary>
/// Determines if file extension is allowed for upload based on (optional) white list and black list
/// held in settings.
/// Allow upload if extension is whitelisted OR if there is no whitelist and extension is NOT blacklisted.
/// </summary>
public static bool IsFileAllowedForUpload(this IContentSection contentSection, string extension)
{
return contentSection.AllowedUploadFiles.Any(x => x.InvariantEquals(extension)) ||
(contentSection.AllowedUploadFiles.Any() == false &&
contentSection.DisallowedUploadFiles.Any(x => x.InvariantEquals(extension)) == false);
}
}
}
@@ -52,7 +52,9 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
MacroErrorBehaviour MacroErrorBehaviour { get; }
IEnumerable<string> DisallowedUploadFiles { get; }
IEnumerable<string> DisallowedUploadFiles { get; }
IEnumerable<string> AllowedUploadFiles { get; }
bool CloneXmlContent { get; }
@@ -8,6 +8,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
Guid Id { get; }
string RepositoryUrl { get; }
string WebServiceUrl { get; }
bool HasCustomWebServiceUrl { get; }
bool HasCustomWebServiceUrl { get; }
string RestApiUrl { get; }
}
}
@@ -12,6 +12,8 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
bool ConvertUrlsToAscii { get; }
bool TryConvertUrlsToAscii { get; }
IEnumerable<IChar> CharCollection { get; }
}
}
@@ -0,0 +1,19 @@
using System;
using System.Linq;
namespace Umbraco.Core.Configuration.UmbracoSettings
{
public static class RepositoryConfigExtensions
{
//Our package repo
private static readonly Guid RepoGuid = new Guid("65194810-1f85-11dd-bd0b-0800200c9a66");
public static IRepository GetDefault(this IRepositoriesSection repos)
{
var found = repos.Repositories.FirstOrDefault(x => x.Id == RepoGuid);
if (found == null)
throw new InvalidOperationException("No default package repository found with id " + RepoGuid);
return found;
}
}
}
@@ -38,9 +38,16 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
get
{
var prop = Properties["webserviceurl"];
var repoUrl = this[prop] as ConfigurationElement;
return (repoUrl != null && repoUrl.ElementInformation.IsPresent);
return (string) prop.DefaultValue != (string) this[prop];
}
}
[ConfigurationProperty("restapiurl", DefaultValue = "https://our.umbraco.org/webapi/packages/v1")]
public string RestApiUrl
{
get { return (string)base["restapiurl"]; }
set { base["restapiurl"] = value; }
}
}
}
@@ -111,7 +111,12 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
bool IRequestHandlerSection.ConvertUrlsToAscii
{
get { return UrlReplacing.ConvertUrlsToAscii; }
get { return UrlReplacing.ConvertUrlsToAscii.InvariantEquals("true"); }
}
bool IRequestHandlerSection.TryConvertUrlsToAscii
{
get { return UrlReplacing.ConvertUrlsToAscii.InvariantEquals("try"); }
}
IEnumerable<IChar> IRequestHandlerSection.CharCollection
@@ -11,10 +11,10 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
get { return (bool) base["removeDoubleDashes"]; }
}
[ConfigurationProperty("toAscii", DefaultValue = false)]
internal bool ConvertUrlsToAscii
[ConfigurationProperty("toAscii", DefaultValue = "false")]
internal string ConvertUrlsToAscii
{
get { return (bool)base["toAscii"]; }
get { return (string) base["toAscii"]; }
}
[ConfigurationCollection(typeof(CharCollection), AddItemName = "char")]
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
{
public class UmbracoVersion
{
private static readonly Version Version = new Version("7.6.0");
private static readonly Version Version = new Version("7.6.6");
/// <summary>
/// Gets the current version of Umbraco.
@@ -24,7 +24,7 @@ namespace Umbraco.Core.Configuration
/// Gets the version comment (like beta or RC).
/// </summary>
/// <value>The version comment.</value>
public static string CurrentComment { get { return "RC"; } }
public static string CurrentComment { get { return ""; } }
// Get the version of the umbraco.dll by looking at a class in that dll
// Had to do it like this due to medium trust issues, see: http://haacked.com/archive/2010/11/04/assembly-location-and-medium-trust.aspx
@@ -33,9 +33,9 @@ namespace Umbraco.Core.Configuration
public static SemVersion GetSemanticVersion()
{
return new SemVersion(
Current.Major,
Current.Major,
Current.Minor,
Current.Build,
Current.Build,
CurrentComment.IsNullOrWhiteSpace() ? null : CurrentComment,
Current.Revision > 0 ? Current.Revision.ToInvariantString() : null);
}
+15
View File
@@ -124,6 +124,11 @@ namespace Umbraco.Core
/// </summary>
public const string MemberGroup = "366E63B9-880F-4E13-A61C-98069B029728";
/// <summary>
/// Guid for a Member Group object.
/// </summary>
public static readonly Guid MemberGroupGuid = new Guid(MemberGroup);
/// <summary>
/// Guid for a Member Type object.
/// </summary>
@@ -207,6 +212,16 @@ namespace Umbraco.Core
/// Guid for a Forms DataSource.
/// </summary>
public static readonly Guid FormsDataSourceGuid = new Guid(FormsDataSource);
/// <summary>
/// Guid for a Language.
/// </summary>
public const string Language = "6B05D05B-EC78-49BE-A4E4-79E274F07A77";
/// <summary>
/// Guid for a Forms DataSource.
/// </summary>
public static readonly Guid LanguageGuid = new Guid(Language);
}
}
}
+2
View File
@@ -14,6 +14,8 @@ namespace Umbraco.Core
public const string BackOfficeTokenAuthenticationType = "UmbracoBackOfficeToken";
public const string BackOfficeTwoFactorAuthenticationType = "UmbracoTwoFactorCookie";
internal const string EmptyPasswordPrefix = "___UIDEMPTYPWORD__";
/// <summary>
/// The prefix used for external identity providers for their authentication type
/// </summary>
+20 -11
View File
@@ -2,7 +2,6 @@ using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Security.Permissions;
using Umbraco.Core.Models.PublishedContent;
namespace Umbraco.Core.Events
{
@@ -13,6 +12,9 @@ namespace Umbraco.Core.Events
public class CancellableEventArgs : EventArgs, IEquatable<CancellableEventArgs>
{
private bool _cancel;
private Dictionary<string, object> _eventState;
private static readonly ReadOnlyDictionary<string, object> EmptyAdditionalData = new ReadOnlyDictionary<string, object>(new Dictionary<string, object>());
public CancellableEventArgs(bool canCancel, EventMessages messages, IDictionary<string, object> additionalData)
{
@@ -26,7 +28,7 @@ namespace Umbraco.Core.Events
if (eventMessages == null) throw new ArgumentNullException("eventMessages");
CanCancel = canCancel;
Messages = eventMessages;
AdditionalData = new ReadOnlyDictionary<string, object>(new Dictionary<string, object>());
AdditionalData = EmptyAdditionalData;
}
public CancellableEventArgs(bool canCancel)
@@ -34,18 +36,16 @@ namespace Umbraco.Core.Events
CanCancel = canCancel;
//create a standalone messages
Messages = new EventMessages();
AdditionalData = new ReadOnlyDictionary<string, object>(new Dictionary<string, object>());
AdditionalData = EmptyAdditionalData;
}
public CancellableEventArgs(EventMessages eventMessages)
: this(true, eventMessages)
{
}
{ }
public CancellableEventArgs()
: this(true)
{
}
{ }
/// <summary>
/// Flag to determine if this instance will support being cancellable
@@ -95,10 +95,19 @@ namespace Umbraco.Core.Events
/// In some cases raised evens might need to contain additional arbitrary readonly data which can be read by event subscribers
/// </summary>
/// <remarks>
/// This allows for a bit of flexibility in our event raising - it's not pretty but we need to maintain backwards compatibility
/// This allows for a bit of flexibility in our event raising - it's not pretty but we need to maintain backwards compatibility
/// so we cannot change the strongly typed nature for some events.
/// </remarks>
public ReadOnlyDictionary<string, object> AdditionalData { get; private set; }
/// <summary>
/// This can be used by event subscribers to store state in the event args so they easily deal with custom state data between a starting ("ing")
/// event and an ending ("ed") event
/// </summary>
public IDictionary<string, object> EventState
{
get { return _eventState ?? (_eventState = new Dictionary<string, object>()); }
}
public bool Equals(CancellableEventArgs other)
{
@@ -111,13 +120,13 @@ namespace Umbraco.Core.Events
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
if (obj.GetType() != GetType()) return false;
return Equals((CancellableEventArgs) obj);
}
public override int GetHashCode()
{
return (AdditionalData != null ? AdditionalData.GetHashCode() : 0);
return AdditionalData != null ? AdditionalData.GetHashCode() : 0;
}
public static bool operator ==(CancellableEventArgs left, CancellableEventArgs right)
@@ -127,7 +136,7 @@ namespace Umbraco.Core.Events
public static bool operator !=(CancellableEventArgs left, CancellableEventArgs right)
{
return !Equals(left, right);
return Equals(left, right) == false;
}
}
}
@@ -1,85 +1,177 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Security.Permissions;
using Umbraco.Core.Models;
using Umbraco.Core.Models.EntityBase;
namespace Umbraco.Core.Events
{
/// <summary>
/// Event args for a strongly typed object that can support cancellation
/// </summary>
/// <typeparam name="T"></typeparam>
[HostProtection(SecurityAction.LinkDemand, SharedState = true)]
public class CancellableObjectEventArgs<T> : CancellableEventArgs, IEquatable<CancellableObjectEventArgs<T>>
{
public CancellableObjectEventArgs(T eventObject, bool canCancel, EventMessages messages, IDictionary<string, object> additionalData)
/// <summary>
/// Used as a base class for the generic type CancellableObjectEventArgs{T} so that we can get direct 'object' access to the underlying EventObject
/// </summary>
[HostProtection(SecurityAction.LinkDemand, SharedState = true)]
public abstract class CancellableObjectEventArgs : CancellableEventArgs
{
protected CancellableObjectEventArgs(object eventObject, bool canCancel, EventMessages messages, IDictionary<string, object> additionalData)
: base(canCancel, messages, additionalData)
{
{
EventObject = eventObject;
}
public CancellableObjectEventArgs(T eventObject, bool canCancel, EventMessages eventMessages)
protected CancellableObjectEventArgs(object eventObject, bool canCancel, EventMessages eventMessages)
: base(canCancel, eventMessages)
{
EventObject = eventObject;
}
public CancellableObjectEventArgs(T eventObject, EventMessages eventMessages)
protected CancellableObjectEventArgs(object eventObject, EventMessages eventMessages)
: this(eventObject, true, eventMessages)
{
}
protected CancellableObjectEventArgs(object eventObject, bool canCancel)
: base(canCancel)
{
EventObject = eventObject;
}
protected CancellableObjectEventArgs(object eventObject)
: this(eventObject, true)
{
}
/// <summary>
/// Returns the object relating to the event
/// </summary>
/// <remarks>
/// This is protected so that inheritors can expose it with their own name
/// </remarks>
internal object EventObject { get; set; }
}
/// <summary>
/// Event args for a strongly typed object that can support cancellation
/// </summary>
/// <typeparam name="T"></typeparam>
[HostProtection(SecurityAction.LinkDemand, SharedState = true)]
public class CancellableObjectEventArgs<T> : CancellableObjectEventArgs, IEquatable<CancellableObjectEventArgs<T>>
{
public CancellableObjectEventArgs(T eventObject, bool canCancel, EventMessages messages, IDictionary<string, object> additionalData)
: base(eventObject, canCancel, messages, additionalData)
{
}
public CancellableObjectEventArgs(T eventObject, bool canCancel, EventMessages eventMessages)
: base(eventObject, canCancel, eventMessages)
{
}
public CancellableObjectEventArgs(T eventObject, EventMessages eventMessages)
: base(eventObject, eventMessages)
{
}
public CancellableObjectEventArgs(T eventObject, bool canCancel)
: base(canCancel)
{
EventObject = eventObject;
}
: base(eventObject, canCancel)
{
}
public CancellableObjectEventArgs(T eventObject)
: this(eventObject, true)
{
}
public CancellableObjectEventArgs(T eventObject)
: base(eventObject)
{
}
/// <summary>
/// Returns the object relating to the event
/// </summary>
/// <remarks>
/// This is protected so that inheritors can expose it with their own name
/// </remarks>
protected T EventObject { get; set; }
/// <summary>
/// Returns the object relating to the event
/// </summary>
/// <remarks>
/// This is protected so that inheritors can expose it with their own name
/// </remarks>
protected new T EventObject
{
get { return (T) base.EventObject; }
set { base.EventObject = value; }
}
public bool Equals(CancellableObjectEventArgs<T> other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return base.Equals(other) && EqualityComparer<T>.Default.Equals(EventObject, other.EventObject);
}
public bool Equals(CancellableObjectEventArgs<T> other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return base.Equals(other) && EqualityComparer<T>.Default.Equals(EventObject, other.EventObject);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((CancellableObjectEventArgs<T>) obj);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((CancellableObjectEventArgs<T>)obj);
}
public override int GetHashCode()
{
unchecked
{
return (base.GetHashCode() * 397) ^ EqualityComparer<T>.Default.GetHashCode(EventObject);
}
}
public override int GetHashCode()
{
unchecked
{
return (base.GetHashCode() * 397) ^ EqualityComparer<T>.Default.GetHashCode(EventObject);
}
}
public static bool operator ==(CancellableObjectEventArgs<T> left, CancellableObjectEventArgs<T> right)
{
return Equals(left, right);
}
public static bool operator ==(CancellableObjectEventArgs<T> left, CancellableObjectEventArgs<T> right)
{
return Equals(left, right);
}
public static bool operator !=(CancellableObjectEventArgs<T> left, CancellableObjectEventArgs<T> right)
{
return !Equals(left, right);
}
}
public static bool operator !=(CancellableObjectEventArgs<T> left, CancellableObjectEventArgs<T> right)
{
return !Equals(left, right);
}
}
[HostProtection(SecurityAction.LinkDemand, SharedState = true)]
public class CancellableEnumerableObjectEventArgs<T> : CancellableObjectEventArgs<IEnumerable<T>>, IEquatable<CancellableEnumerableObjectEventArgs<T>>
{
public CancellableEnumerableObjectEventArgs(IEnumerable<T> eventObject, bool canCancel, EventMessages messages, IDictionary<string, object> additionalData)
: base(eventObject, canCancel, messages, additionalData)
{ }
public CancellableEnumerableObjectEventArgs(IEnumerable<T> eventObject, bool canCancel, EventMessages eventMessages)
: base(eventObject, canCancel, eventMessages)
{ }
public CancellableEnumerableObjectEventArgs(IEnumerable<T> eventObject, EventMessages eventMessages)
: base(eventObject, eventMessages)
{ }
public CancellableEnumerableObjectEventArgs(IEnumerable<T> eventObject, bool canCancel)
: base(eventObject, canCancel)
{ }
public CancellableEnumerableObjectEventArgs(IEnumerable<T> eventObject)
: base(eventObject)
{ }
public bool Equals(CancellableEnumerableObjectEventArgs<T> other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return EventObject.SequenceEqual(other.EventObject);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((CancellableEnumerableObjectEventArgs<T>)obj);
}
public override int GetHashCode()
{
return HashCodeHelper.GetHashCode(EventObject);
}
}
}
+9 -3
View File
@@ -1,9 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Umbraco.Core.Events
{
public class DeleteEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>, IEquatable<DeleteEventArgs<TEntity>>, IDeletingMediaFilesEventArgs
[SupersedeEvent(typeof(SaveEventArgs<>))]
[SupersedeEvent(typeof(PublishEventArgs<>))]
[SupersedeEvent(typeof(MoveEventArgs<>))]
[SupersedeEvent(typeof(CopyEventArgs<>))]
public class DeleteEventArgs<TEntity> : CancellableEnumerableObjectEventArgs<TEntity>, IEquatable<DeleteEventArgs<TEntity>>, IDeletingMediaFilesEventArgs
{
/// <summary>
/// Constructor accepting multiple entities that are used in the delete operation
@@ -94,7 +99,8 @@ namespace Umbraco.Core.Events
/// </summary>
public IEnumerable<TEntity> DeletedEntities
{
get { return EventObject; }
get { return EventObject; }
internal set { EventObject = value; }
}
/// <summary>
@@ -106,7 +112,7 @@ namespace Umbraco.Core.Events
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return base.Equals(other) && MediaFilesToDelete.Equals(other.MediaFilesToDelete);
return base.Equals(other) && MediaFilesToDelete.SequenceEqual(other.MediaFilesToDelete);
}
public override bool Equals(object obj)
+1 -1
View File
@@ -4,7 +4,7 @@ using System.Xml.Linq;
namespace Umbraco.Core.Events
{
public class ImportEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>, IEquatable<ImportEventArgs<TEntity>>
public class ImportEventArgs<TEntity> : CancellableEnumerableObjectEventArgs<TEntity>, IEquatable<ImportEventArgs<TEntity>>
{
/// <summary>
/// Constructor accepting an XElement with the xml being imported
@@ -4,7 +4,7 @@ using Umbraco.Core.Packaging.Models;
namespace Umbraco.Core.Events
{
internal class ImportPackageEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>, IEquatable<ImportPackageEventArgs<TEntity>>
public class ImportPackageEventArgs<TEntity> : CancellableEnumerableObjectEventArgs<TEntity>, IEquatable<ImportPackageEventArgs<TEntity>>
{
private readonly MetaData _packageMetaData;
@@ -33,6 +33,7 @@ namespace Umbraco.Core.Events
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
//TODO: MetaData for package metadata has no equality operators :/
return base.Equals(other) && _packageMetaData.Equals(other._packageMetaData);
}
+20 -1
View File
@@ -6,6 +6,8 @@ namespace Umbraco.Core.Events
{
public class MoveEventArgs<TEntity> : CancellableObjectEventArgs<TEntity>, IEquatable<MoveEventArgs<TEntity>>
{
private IEnumerable<MoveEventInfo<TEntity>> _moveInfoCollection;
/// <summary>
/// Constructor accepting a collection of MoveEventInfo objects
/// </summary>
@@ -107,7 +109,24 @@ namespace Umbraco.Core.Events
/// <summary>
/// Gets all MoveEventInfo objects used to create the object
/// </summary>
public IEnumerable<MoveEventInfo<TEntity>> MoveInfoCollection { get; private set; }
public IEnumerable<MoveEventInfo<TEntity>> MoveInfoCollection
{
get { return _moveInfoCollection; }
set
{
var first = value.FirstOrDefault();
if (first == null)
{
throw new InvalidOperationException("MoveInfoCollection must have at least one item");
}
_moveInfoCollection = value;
//assign the legacy props
EventObject = first.Entity;
ParentId = first.NewParentId;
}
}
/// <summary>
/// The entity being moved
@@ -5,8 +5,10 @@ using System.Linq;
namespace Umbraco.Core.Events
{
/// <summary>
/// This event manager supports event cancellation and will raise the events as soon as they are tracked, it does not store tracked events
/// An IEventDispatcher that immediately raise all events.
/// </summary>
/// <remarks>This means that events will be raised during the scope transaction,
/// whatever happens, and the transaction could roll back in the end.</remarks>
internal class PassThroughEventDispatcher : IEventDispatcher
{
public bool DispatchCancelable(EventHandler eventHandler, object sender, CancellableEventArgs args, string eventName = null)
+1 -1
View File
@@ -3,7 +3,7 @@ using System.Collections.Generic;
namespace Umbraco.Core.Events
{
public class PublishEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>, IEquatable<PublishEventArgs<TEntity>>
public class PublishEventArgs<TEntity> : CancellableEnumerableObjectEventArgs<TEntity>, IEquatable<PublishEventArgs<TEntity>>
{
/// <summary>
/// Constructor accepting multiple entities that are used in the publish operation
@@ -107,7 +107,7 @@ namespace Umbraco.Core.Events
/// <summary>
/// Boolean indicating whether the Recycle Bin was emptied successfully
/// </summary>
public bool RecycleBinEmptiedSuccessfully { get; private set; }
public bool RecycleBinEmptiedSuccessfully { get; set; }
/// <summary>
/// Boolean indicating whether this event was fired for the Content's Recycle Bin.
+2 -3
View File
@@ -1,8 +1,9 @@
using System.Collections.Generic;
using System.Linq;
namespace Umbraco.Core.Events
{
public class SaveEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>
public class SaveEventArgs<TEntity> : CancellableEnumerableObjectEventArgs<TEntity>
{
/// <summary>
/// Constructor accepting multiple entities that are used in the saving operation
@@ -116,7 +117,5 @@ namespace Umbraco.Core.Events
{
get { return EventObject; }
}
}
}
@@ -3,11 +3,9 @@ using Umbraco.Core.IO;
namespace Umbraco.Core.Events
{
/// <summary>
/// This event manager is created for each scope and is aware of if it is nested in an outer scope
/// An IEventDispatcher that queues events, and raise them when the scope
/// exits and has been completed.
/// </summary>
/// <remarks>
/// The outer scope is the only scope that can raise events, the inner scope's will defer to the outer scope
/// </remarks>
internal class ScopeEventDispatcher : ScopeEventDispatcherBase
{
public ScopeEventDispatcher()
@@ -1,11 +1,23 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Models.EntityBase;
namespace Umbraco.Core.Events
{
/// <summary>
/// An IEventDispatcher that queues events.
/// </summary>
/// <remarks>
/// <para>Can raise, or ignore, cancelable events, depending on option.</para>
/// <para>Implementations must override ScopeExitCompleted to define what
/// to do with the events when the scope exits and has been completed.</para>
/// <para>If the scope exits without being completed, events are ignored.</para>
/// </remarks>
public abstract class ScopeEventDispatcherBase : IEventDispatcher
{
//events will be enlisted in the order they are raised
private List<IEventDefinition> _events;
private readonly bool _raiseCancelable;
@@ -64,29 +76,263 @@ namespace Umbraco.Core.Events
{
if (_events == null)
return Enumerable.Empty<IEventDefinition>();
switch (filter)
{
case EventDefinitionFilter.All:
return _events;
return FilterSupersededAndUpdateToLatestEntity(_events);
case EventDefinitionFilter.FirstIn:
var l1 = new OrderedHashSet<IEventDefinition>();
foreach (var e in _events)
{
l1.Add(e);
}
return l1;
return FilterSupersededAndUpdateToLatestEntity(l1);
case EventDefinitionFilter.LastIn:
var l2 = new OrderedHashSet<IEventDefinition>(keepOldest: false);
foreach (var e in _events)
{
l2.Add(e);
}
return l2;
return FilterSupersededAndUpdateToLatestEntity(l2);
default:
throw new ArgumentOutOfRangeException("filter", filter, null);
}
}
private class EventDefinitionTypeData
{
public IEventDefinition EventDefinition { get; set; }
public Type EventArgType { get; set; }
public SupersedeEventAttribute[] SupersedeAttributes { get; set; }
}
/// <summary>
/// This will iterate over the events (latest first) and filter out any events or entities in event args that are included
/// in more recent events that Supersede previous ones. For example, If an Entity has been Saved and then Deleted, we don't want
/// to raise the Saved event (well actually we just don't want to include it in the args for that saved event)
/// </summary>
/// <param name="events"></param>
/// <returns></returns>
private static IEnumerable<IEventDefinition> FilterSupersededAndUpdateToLatestEntity(IReadOnlyList<IEventDefinition> events)
{
//used to keep the 'latest' entity and associated event definition data
var allEntities = new List<Tuple<IEntity, EventDefinitionTypeData>>();
//tracks all CancellableObjectEventArgs instances in the events which is the only type of args we can work with
var cancelableArgs = new List<CancellableObjectEventArgs>();
var result = new List<IEventDefinition>();
//This will eagerly load all of the event arg types and their attributes so we don't have to continuously look this data up
var allArgTypesWithAttributes = events.Select(x => x.Args.GetType())
.Distinct()
.ToDictionary(x => x, x => x.GetCustomAttributes<SupersedeEventAttribute>(false).ToArray());
//Iterate all events and collect the actual entities in them and relates them to their corresponding EventDefinitionTypeData
//we'll process the list in reverse because events are added in the order they are raised and we want to filter out
//any entities from event args that are not longer relevant
//(i.e. if an item is Deleted after it's Saved, we won't include the item in the Saved args)
for (var index = events.Count - 1; index >= 0; index--)
{
var eventDefinition = events[index];
var argType = eventDefinition.Args.GetType();
var attributes = allArgTypesWithAttributes[eventDefinition.Args.GetType()];
var meta = new EventDefinitionTypeData
{
EventDefinition = eventDefinition,
EventArgType = argType,
SupersedeAttributes = attributes
};
var args = eventDefinition.Args as CancellableObjectEventArgs;
if (args != null)
{
var list = TypeHelper.CreateGenericEnumerableFromObject(args.EventObject);
if (list == null)
{
//extract the event object
var obj = args.EventObject as IEntity;
if (obj != null)
{
//Now check if this entity already exists in other event args that supersede this current event arg type
if (IsFiltered(obj, meta, allEntities) == false)
{
//if it's not filtered we can adde these args to the response
cancelableArgs.Add(args);
result.Add(eventDefinition);
//track the entity
allEntities.Add(Tuple.Create(obj, meta));
}
}
else
{
//Can't retrieve the entity so cant' filter or inspect, just add to the output
result.Add(eventDefinition);
}
}
else
{
var toRemove = new List<IEntity>();
foreach (var entity in list)
{
//extract the event object
var obj = entity as IEntity;
if (obj != null)
{
//Now check if this entity already exists in other event args that supersede this current event arg type
if (IsFiltered(obj, meta, allEntities))
{
//track it to be removed
toRemove.Add(obj);
}
else
{
//track the entity, it's not filtered
allEntities.Add(Tuple.Create(obj, meta));
}
}
else
{
//we don't need to do anything here, we can't cast to IEntity so we cannot filter, so it will just remain in the list
}
}
//remove anything that has been filtered
foreach (var entity in toRemove)
{
list.Remove(entity);
}
//track the event and include in the response if there's still entities remaining in the list
if (list.Count > 0)
{
if (toRemove.Count > 0)
{
//re-assign if the items have changed
args.EventObject = list;
}
cancelableArgs.Add(args);
result.Add(eventDefinition);
}
}
}
else
{
//it's not a cancelable event arg so we just include it in the result
result.Add(eventDefinition);
}
}
//Now we'll deal with ensuring that only the latest(non stale) entities are used throughout all event args
UpdateToLatestEntities(allEntities, cancelableArgs);
//we need to reverse the result since we've been adding by latest added events first!
result.Reverse();
return result;
}
private static void UpdateToLatestEntities(IEnumerable<Tuple<IEntity, EventDefinitionTypeData>> allEntities, IEnumerable<CancellableObjectEventArgs> cancelableArgs)
{
//Now we'll deal with ensuring that only the latest(non stale) entities are used throughout all event args
var latestEntities = new OrderedHashSet<IEntity>(keepOldest: true);
foreach (var entity in allEntities.OrderByDescending(entity => entity.Item1.UpdateDate))
{
latestEntities.Add(entity.Item1);
}
foreach (var args in cancelableArgs)
{
var list = TypeHelper.CreateGenericEnumerableFromObject(args.EventObject);
if (list == null)
{
//try to find the args entity in the latest entity - based on the equality operators, this will
//match by Id since that is the default equality checker for IEntity. If one is found, than it is
//the most recent entity instance so update the args with that instance so we don't emit a stale instance.
var foundEntity = latestEntities.FirstOrDefault(x => Equals(x, args.EventObject));
if (foundEntity != null)
{
args.EventObject = foundEntity;
}
}
else
{
var updated = false;
for (int i = 0; i < list.Count; i++)
{
//try to find the args entity in the latest entity - based on the equality operators, this will
//match by Id since that is the default equality checker for IEntity. If one is found, than it is
//the most recent entity instance so update the args with that instance so we don't emit a stale instance.
var foundEntity = latestEntities.FirstOrDefault(x => Equals(x, list[i]));
if (foundEntity != null)
{
list[i] = foundEntity;
updated = true;
}
}
if (updated)
{
args.EventObject = list;
}
}
}
}
/// <summary>
/// This will check against all of the processed entity/events (allEntities) to see if this entity already exists in
/// event args that supersede the event args being passed in and if so returns true.
/// </summary>
/// <param name="entity"></param>
/// <param name="eventDef"></param>
/// <param name="allEntities"></param>
/// <returns></returns>
private static bool IsFiltered(
IEntity entity,
EventDefinitionTypeData eventDef,
List<Tuple<IEntity, EventDefinitionTypeData>> allEntities)
{
var argType = eventDef.EventDefinition.Args.GetType();
//check if the entity is found in any processed event data that could possible supersede this one
var foundByEntity = allEntities
.Where(x => x.Item2.SupersedeAttributes.Length > 0
//if it's the same arg type than it cannot supersede
&& x.Item2.EventArgType != argType
&& Equals(x.Item1, entity))
.ToArray();
//no args have been processed with this entity so it should not be filtered
if (foundByEntity.Length == 0)
return false;
if (argType.IsGenericType)
{
var supercededBy = foundByEntity
.FirstOrDefault(x =>
x.Item2.SupersedeAttributes.Any(y =>
//if the attribute type is a generic type def then compare with the generic type def of the event arg
(y.SupersededEventArgsType.IsGenericTypeDefinition && y.SupersededEventArgsType == argType.GetGenericTypeDefinition())
//if the attribute type is not a generic type def then compare with the normal type of the event arg
|| (y.SupersededEventArgsType.IsGenericTypeDefinition == false && y.SupersededEventArgsType == argType)));
return supercededBy != null;
}
else
{
var supercededBy = foundByEntity
.FirstOrDefault(x =>
x.Item2.SupersedeAttributes.Any(y =>
//since the event arg type is not a generic type, then we just compare type 1:1
y.SupersededEventArgsType == argType));
return supercededBy != null;
}
}
public void ScopeExit(bool completed)
{
@@ -0,0 +1,20 @@
using System;
namespace Umbraco.Core.Events
{
/// <summary>
/// This is used to know if the event arg attributed should supersede another event arg type when
/// tracking events for the same entity. If one event args supercedes another then the event args that have been superseded
/// will mean that the event will not be dispatched or the args will be filtered to exclude the entity.
/// </summary>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
internal class SupersedeEventAttribute : Attribute
{
public Type SupersededEventArgsType { get; private set; }
public SupersedeEventAttribute(Type supersededEventArgsType)
{
SupersededEventArgsType = supersededEventArgsType;
}
}
}
@@ -3,7 +3,7 @@ using Umbraco.Core.Packaging.Models;
namespace Umbraco.Core.Events
{
internal class UninstallPackageEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>
public class UninstallPackageEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>
{
private readonly MetaData _packageMetaData;
@@ -0,0 +1,12 @@
using System;
namespace Umbraco.Core.Exceptions
{
internal class ConnectionException : Exception
{
public ConnectionException(string message, Exception innerException) : base(message, innerException)
{
}
}
}
@@ -7,7 +7,7 @@ namespace Umbraco.Core.Exceptions
public T Operation { get; private set; }
public DataOperationException(T operation, string message)
:base(message)
: base(message)
{
Operation = operation;
}
+77 -76
View File
@@ -1,38 +1,39 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
namespace Umbraco.Core
{
/// <summary>
/// Used to create a hash code from multiple objects.
/// </summary>
/// <remarks>
/// .Net has a class the same as this: System.Web.Util.HashCodeCombiner and of course it works for all sorts of things
/// which we've not included here as we just need a quick easy class for this in order to create a unique
/// hash of directories/files to see if they have changed.
/// </remarks>
internal class HashCodeCombiner
{
private long _combinedHash = 5381L;
/// <summary>
/// Used to create a .NET HashCode from multiple objects.
/// </summary>
/// <remarks>
/// .Net has a class the same as this: System.Web.Util.HashCodeCombiner and of course it works for all sorts of things
/// which we've not included here as we just need a quick easy class for this in order to create a unique
/// hash of directories/files to see if they have changed.
///
/// NOTE: It's probably best to not relying on the hashing result across AppDomains! If you need a constant/reliable hash value
/// between AppDomains use SHA1. This is perfect for hashing things in a very fast way for a single AppDomain.
/// </remarks>
internal class HashCodeCombiner
{
private long _combinedHash = 5381L;
internal void AddInt(int i)
{
_combinedHash = ((_combinedHash << 5) + _combinedHash) ^ i;
}
internal void AddInt(int i)
{
_combinedHash = ((_combinedHash << 5) + _combinedHash) ^ i;
}
internal void AddObject(object o)
{
AddInt(o.GetHashCode());
}
internal void AddObject(object o)
{
AddInt(o.GetHashCode());
}
internal void AddDateTime(DateTime d)
{
AddInt(d.GetHashCode());
}
internal void AddDateTime(DateTime d)
{
AddInt(d.GetHashCode());
}
internal void AddString(string s)
{
@@ -40,61 +41,61 @@ namespace Umbraco.Core
AddInt((StringComparer.InvariantCulture).GetHashCode(s));
}
internal void AddCaseInsensitiveString(string s)
{
if (s != null)
AddInt((StringComparer.InvariantCultureIgnoreCase).GetHashCode(s));
}
internal void AddCaseInsensitiveString(string s)
{
if (s != null)
AddInt((StringComparer.InvariantCultureIgnoreCase).GetHashCode(s));
}
internal void AddFileSystemItem(FileSystemInfo f)
{
//if it doesn't exist, don't proceed.
if (!f.Exists)
return;
internal void AddFileSystemItem(FileSystemInfo f)
{
//if it doesn't exist, don't proceed.
if (!f.Exists)
return;
AddCaseInsensitiveString(f.FullName);
AddDateTime(f.CreationTimeUtc);
AddDateTime(f.LastWriteTimeUtc);
//check if it is a file or folder
var fileInfo = f as FileInfo;
if (fileInfo != null)
{
AddInt(fileInfo.Length.GetHashCode());
}
var dirInfo = f as DirectoryInfo;
if (dirInfo != null)
{
foreach (var d in dirInfo.GetFiles())
{
AddFile(d);
}
foreach (var s in dirInfo.GetDirectories())
{
AddFolder(s);
}
}
}
AddCaseInsensitiveString(f.FullName);
AddDateTime(f.CreationTimeUtc);
AddDateTime(f.LastWriteTimeUtc);
internal void AddFile(FileInfo f)
{
AddFileSystemItem(f);
}
//check if it is a file or folder
var fileInfo = f as FileInfo;
if (fileInfo != null)
{
AddInt(fileInfo.Length.GetHashCode());
}
internal void AddFolder(DirectoryInfo d)
{
AddFileSystemItem(d);
}
var dirInfo = f as DirectoryInfo;
if (dirInfo != null)
{
foreach (var d in dirInfo.GetFiles())
{
AddFile(d);
}
foreach (var s in dirInfo.GetDirectories())
{
AddFolder(s);
}
}
}
/// <summary>
/// Returns the hex code of the combined hash code
/// </summary>
/// <returns></returns>
internal string GetCombinedHashCode()
{
return _combinedHash.ToString("x", CultureInfo.InvariantCulture);
}
internal void AddFile(FileInfo f)
{
AddFileSystemItem(f);
}
}
internal void AddFolder(DirectoryInfo d)
{
AddFileSystemItem(d);
}
/// <summary>
/// Returns the hex code of the combined hash code
/// </summary>
/// <returns></returns>
internal string GetCombinedHashCode()
{
return _combinedHash.ToString("x", CultureInfo.InvariantCulture);
}
}
}
+104
View File
@@ -0,0 +1,104 @@
using System.Collections.Generic;
namespace Umbraco.Core
{
/// <summary>
/// Borrowed from http://stackoverflow.com/a/2575444/694494
/// </summary>
internal static class HashCodeHelper
{
public static int GetHashCode<T1, T2>(T1 arg1, T2 arg2)
{
unchecked
{
return 31 * arg1.GetHashCode() + arg2.GetHashCode();
}
}
public static int GetHashCode<T1, T2, T3>(T1 arg1, T2 arg2, T3 arg3)
{
unchecked
{
int hash = arg1.GetHashCode();
hash = 31 * hash + arg2.GetHashCode();
return 31 * hash + arg3.GetHashCode();
}
}
public static int GetHashCode<T1, T2, T3, T4>(T1 arg1, T2 arg2, T3 arg3,
T4 arg4)
{
unchecked
{
int hash = arg1.GetHashCode();
hash = 31 * hash + arg2.GetHashCode();
hash = 31 * hash + arg3.GetHashCode();
return 31 * hash + arg4.GetHashCode();
}
}
public static int GetHashCode<T>(T[] list)
{
unchecked
{
int hash = 0;
foreach (var item in list)
{
if (item == null) continue;
hash = 31 * hash + item.GetHashCode();
}
return hash;
}
}
public static int GetHashCode<T>(IEnumerable<T> list)
{
unchecked
{
int hash = 0;
foreach (var item in list)
{
if (item == null) continue;
hash = 31 * hash + item.GetHashCode();
}
return hash;
}
}
/// <summary>
/// Gets a hashcode for a collection for that the order of items
/// does not matter.
/// So {1, 2, 3} and {3, 2, 1} will get same hash code.
/// </summary>
public static int GetHashCodeForOrderNoMatterCollection<T>(
IEnumerable<T> list)
{
unchecked
{
int hash = 0;
int count = 0;
foreach (var item in list)
{
if (item == null) continue;
hash += item.GetHashCode();
count++;
}
return 31 * hash + count.GetHashCode();
}
}
/// <summary>
/// Alternative way to get a hashcode is to use a fluent
/// interface like this:<br />
/// return 0.CombineHashCode(field1).CombineHashCode(field2).
/// CombineHashCode(field3);
/// </summary>
public static int CombineHashCode<T>(this int hashCode, T arg)
{
unchecked
{
return 31 * hashCode + arg.GetHashCode();
}
}
}
}
+154
View File
@@ -0,0 +1,154 @@
using System;
using System.Globalization;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace Umbraco.Core
{
/// <summary>
/// Used to generate a string hash using crypto libraries over multiple objects
/// </summary>
/// <remarks>
/// This should be used to generate a reliable hash that survives AppDomain restarts.
/// This will use the crypto libs to generate the hash and will try to ensure that
/// strings, etc... are not re-allocated so it's not consuming much memory.
/// </remarks>
internal class HashGenerator : DisposableObject
{
public HashGenerator()
{
_writer = new StreamWriter(_ms, Encoding.Unicode, 1024, leaveOpen: true);
}
private readonly MemoryStream _ms = new MemoryStream();
private StreamWriter _writer;
internal void AddInt(int i)
{
_writer.Write(i);
}
internal void AddLong(long i)
{
_writer.Write(i);
}
internal void AddObject(object o)
{
_writer.Write(o);
}
internal void AddDateTime(DateTime d)
{
_writer.Write(d.Ticks);;
}
internal void AddString(string s)
{
if (s != null)
_writer.Write(s);
}
internal void AddCaseInsensitiveString(string s)
{
//I've tried to no allocate a new string with this which can be done if we use the CompareInfo.GetSortKey method which will create a new
//byte array that we can use to write to the output, however this also allocates new objects so i really don't think the performance
//would be much different. In any case, i'll leave this here for reference. We could write the bytes out based on the sort key,
//this is how we could deal with case insensitivity without allocating another string
//for reference see: https://stackoverflow.com/a/10452967/694494
//we could go a step further and s.Normalize() but we're not really dealing with crazy unicode with this class so far.
if (s != null)
_writer.Write(s.ToUpperInvariant());
}
internal void AddFileSystemItem(FileSystemInfo f)
{
//if it doesn't exist, don't proceed.
if (f.Exists == false)
return;
AddCaseInsensitiveString(f.FullName);
AddDateTime(f.CreationTimeUtc);
AddDateTime(f.LastWriteTimeUtc);
//check if it is a file or folder
var fileInfo = f as FileInfo;
if (fileInfo != null)
{
AddLong(fileInfo.Length);
}
var dirInfo = f as DirectoryInfo;
if (dirInfo != null)
{
foreach (var d in dirInfo.GetFiles())
{
AddFile(d);
}
foreach (var s in dirInfo.GetDirectories())
{
AddFolder(s);
}
}
}
internal void AddFile(FileInfo f)
{
AddFileSystemItem(f);
}
internal void AddFolder(DirectoryInfo d)
{
AddFileSystemItem(d);
}
/// <summary>
/// Returns the generated hash output of all added objects
/// </summary>
/// <returns></returns>
internal string GenerateHash()
{
//flush,close,dispose the writer,then create a new one since it's possible to keep adding after GenerateHash is called.
_writer.Flush();
_writer.Close();
_writer.Dispose();
_writer = new StreamWriter(_ms, Encoding.UTF8, 1024, leaveOpen: true);
var hashType = CryptoConfig.AllowOnlyFipsAlgorithms ? "SHA1" : "MD5";
//create an instance of the correct hashing provider based on the type passed in
var hasher = HashAlgorithm.Create(hashType);
if (hasher == null) throw new InvalidOperationException("No hashing type found by name " + hashType);
using (hasher)
{
var buffer = _ms.GetBuffer();
//get the hashed values created by our selected provider
var hashedByteArray = hasher.ComputeHash(buffer);
//create a StringBuilder object
var stringBuilder = new StringBuilder();
//loop to each each byte
foreach (var b in hashedByteArray)
{
//append it to our StringBuilder
stringBuilder.Append(b.ToString("x2"));
}
//return the hashed value
return stringBuilder.ToString();
}
}
protected override void DisposeResources()
{
_writer.Close();
_writer.Dispose();
_ms.Close();
_ms.Dispose();
}
}
}
@@ -19,6 +19,8 @@ namespace Umbraco.Core.IO
private ShadowWrapper _macroPartialFileSystem;
private ShadowWrapper _partialViewsFileSystem;
private ShadowWrapper _macroScriptsFileSystem;
private ShadowWrapper _userControlsFileSystem;
private ShadowWrapper _stylesheetsFileSystem;
private ShadowWrapper _scriptsFileSystem;
private ShadowWrapper _xsltFileSystem;
@@ -61,6 +63,8 @@ namespace Umbraco.Core.IO
{
var macroPartialFileSystem = new PhysicalFileSystem(SystemDirectories.MacroPartials);
var partialViewsFileSystem = new PhysicalFileSystem(SystemDirectories.PartialViews);
var macroScriptsFileSystem = new PhysicalFileSystem(SystemDirectories.MacroScripts);
var userControlsFileSystem = new PhysicalFileSystem(SystemDirectories.UserControls);
var stylesheetsFileSystem = new PhysicalFileSystem(SystemDirectories.Css);
var scriptsFileSystem = new PhysicalFileSystem(SystemDirectories.Scripts);
var xsltFileSystem = new PhysicalFileSystem(SystemDirectories.Xslt);
@@ -69,6 +73,8 @@ namespace Umbraco.Core.IO
_macroPartialFileSystem = new ShadowWrapper(macroPartialFileSystem, "Views/MacroPartials", ScopeProvider);
_partialViewsFileSystem = new ShadowWrapper(partialViewsFileSystem, "Views/Partials", ScopeProvider);
_macroScriptsFileSystem = new ShadowWrapper(macroScriptsFileSystem, "macroScripts", ScopeProvider);
_userControlsFileSystem = new ShadowWrapper(userControlsFileSystem, "usercontrols", ScopeProvider);
_stylesheetsFileSystem = new ShadowWrapper(stylesheetsFileSystem, "css", ScopeProvider);
_scriptsFileSystem = new ShadowWrapper(scriptsFileSystem, "scripts", ScopeProvider);
_xsltFileSystem = new ShadowWrapper(xsltFileSystem, "xslt", ScopeProvider);
@@ -85,6 +91,10 @@ namespace Umbraco.Core.IO
public IFileSystem2 MacroPartialsFileSystem { get { return _macroPartialFileSystem; } }
public IFileSystem2 PartialViewsFileSystem { get { return _partialViewsFileSystem; } }
// Legacy /macroScripts folder
public IFileSystem2 MacroScriptsFileSystem { get { return _macroScriptsFileSystem; } }
// Legacy /usercontrols folder
public IFileSystem2 UserControlsFileSystem { get { return _userControlsFileSystem; } }
public IFileSystem2 StylesheetsFileSystem { get { return _stylesheetsFileSystem; } }
public IFileSystem2 ScriptsFileSystem { get { return _scriptsFileSystem; } }
public IFileSystem2 XsltFileSystem { get { return _xsltFileSystem; } }
@@ -252,13 +262,15 @@ namespace Umbraco.Core.IO
internal ICompletable Shadow(Guid id)
{
var typed = _wrappers.ToArray();
var wrappers = new ShadowWrapper[typed.Length + 7];
var wrappers = new ShadowWrapper[typed.Length + 9];
var i = 0;
while (i < typed.Length) wrappers[i] = typed[i++];
wrappers[i++] = _macroPartialFileSystem;
wrappers[i++] = _macroScriptsFileSystem;
wrappers[i++] = _partialViewsFileSystem;
wrappers[i++] = _stylesheetsFileSystem;
wrappers[i++] = _scriptsFileSystem;
wrappers[i++] = _userControlsFileSystem;
wrappers[i++] = _xsltFileSystem;
wrappers[i++] = _masterPagesFileSystem;
wrappers[i] = _mvcViewsFileSystem;
+107 -1
View File
@@ -4,38 +4,144 @@ using System.IO;
namespace Umbraco.Core.IO
{
public interface IFileSystem
/// <summary>
/// Provides methods allowing the manipulation of files within an Umbraco application.
/// </summary>
public interface IFileSystem
{
/// <summary>
/// Gets all directories matching the given path.
/// </summary>
/// <param name="path">The path to the directories.</param>
/// <returns>
/// The <see cref="IEnumerable{String}"/> representing the matched directories.
/// </returns>
IEnumerable<string> GetDirectories(string path);
/// <summary>
/// Deletes the specified directory.
/// </summary>
/// <param name="path">The name of the directory to remove.</param>
void DeleteDirectory(string path);
/// <summary>
/// Deletes the specified directory and, if indicated, any subdirectories and files in the directory.
/// </summary>
/// <remarks>Azure blob storage has no real concept of directories so deletion is always recursive.</remarks>
/// <param name="path">The name of the directory to remove.</param>
/// <param name="recursive">Whether to remove directories, subdirectories, and files in path.</param>
void DeleteDirectory(string path, bool recursive);
/// <summary>
/// Determines whether the specified directory exists.
/// </summary>
/// <param name="path">The directory to check.</param>
/// <returns>
/// <c>True</c> if the directory exists and the user has permission to view it; otherwise <c>false</c>.
/// </returns>
bool DirectoryExists(string path);
/// <summary>
/// Adds a file to the file system.
/// </summary>
/// <param name="path">The path to the given file.</param>
/// <param name="stream">The <see cref="Stream"/> containing the file contents.</param>
void AddFile(string path, Stream stream);
/// <summary>
/// Adds a file to the file system.
/// </summary>
/// <param name="path">The path to the given file.</param>
/// <param name="stream">The <see cref="Stream"/> containing the file contents.</param>
/// <param name="overrideIfExists">Whether to override the file if it already exists.</param>
void AddFile(string path, Stream stream, bool overrideIfExists);
/// <summary>
/// Gets all files matching the given path.
/// </summary>
/// <param name="path">The path to the files.</param>
/// <returns>
/// The <see cref="IEnumerable{String}"/> representing the matched files.
/// </returns>
IEnumerable<string> GetFiles(string path);
/// <summary>
/// Gets all files matching the given path and filter.
/// </summary>
/// <param name="path">The path to the files.</param>
/// <param name="filter">A filter that allows the querying of file extension. <example>*.jpg</example></param>
/// <returns>
/// The <see cref="IEnumerable{String}"/> representing the matched files.
/// </returns>
IEnumerable<string> GetFiles(string path, string filter);
/// <summary>
/// Gets a <see cref="Stream"/> representing the file at the gieven path.
/// </summary>
/// <param name="path">The path to the file.</param>
/// <returns>
/// <see cref="Stream"/>.
/// </returns>
Stream OpenFile(string path);
/// <summary>
/// Deletes the specified file.
/// </summary>
/// <param name="path">The name of the file to remove.</param>
void DeleteFile(string path);
/// <summary>
/// Determines whether the specified file exists.
/// </summary>
/// <param name="path">The file to check.</param>
/// <returns>
/// <c>True</c> if the file exists and the user has permission to view it; otherwise <c>false</c>.
/// </returns>
bool FileExists(string path);
/// <summary>
/// Returns the application relative path to the file.
/// </summary>
/// <param name="fullPathOrUrl">The full path or url.</param>
/// <returns>
/// The <see cref="string"/> representing the relative path.
/// </returns>
string GetRelativePath(string fullPathOrUrl);
/// <summary>
/// Gets the full qualified path to the file.
/// </summary>
/// <param name="path">The file to return the full path for.</param>
/// <returns>
/// The <see cref="string"/> representing the full path.
/// </returns>
string GetFullPath(string path);
/// <summary>
/// Returns the application relative url to the file.
/// </summary>
/// <param name="path">The path to return the url for.</param>
/// <returns>
/// <see cref="string"/> representing the relative url.
/// </returns>
string GetUrl(string path);
/// <summary>
/// Gets the last modified date/time of the file, expressed as a UTC value.
/// </summary>
/// <param name="path">The path to the file.</param>
/// <returns>
/// <see cref="DateTimeOffset"/>.
/// </returns>
DateTimeOffset GetLastModified(string path);
/// <summary>
/// Gets the created date/time of the file, expressed as a UTC value.
/// </summary>
/// <param name="path">The path to the file.</param>
/// <returns>
/// <see cref="DateTimeOffset"/>.
/// </returns>
DateTimeOffset GetCreated(string path);
}
+2
View File
@@ -97,6 +97,8 @@ namespace Umbraco.Core.IO
public static string MapPath(string path, bool useHttpContext)
{
if (path == null) throw new ArgumentNullException("path");
// Check if the path is already mapped
if ((path.Length >= 2 && path[1] == Path.VolumeSeparatorChar)
|| path.StartsWith(@"\\")) //UNC Paths start with "\\". If the site is running off a network drive mapped paths will look like "\\Whatever\Boo\Bar"
+1 -1
View File
@@ -159,7 +159,7 @@ namespace Umbraco.Core.IO
// ReSharper disable once AssignNullToNotNullAttribute
var filepath = UmbracoConfig.For.UmbracoSettings().Content.UploadAllowDirectories
? Path.Combine(folder, filename)
? Path.Combine(folder, filename).Replace('\\', '/')
: folder + "-" + filename;
return filepath;
+1 -1
View File
@@ -158,7 +158,7 @@ namespace Umbraco.Core.IO
// if can seek, be safe and go back to start, else...
// hope that the stream hasn't been read already
if (stream.CanSeek)
stream.Seek(0, 0);
stream.Seek(0, SeekOrigin.Begin);
using (var destination = (Stream) File.Create(fullPath))
stream.CopyTo(destination);
+14 -3
View File
@@ -52,9 +52,20 @@ namespace Umbraco.Core.IO
try
{
Directory.Delete(dir, true);
dir = dir.Substring(0, dir.Length - _shadowPath.Length - 1);
if (Directory.EnumerateFileSystemEntries(dir).Any() == false)
Directory.Delete(dir, true);
// shadowPath make be path/to/dir, remove each
dir = dir.Replace("/", "\\");
var min = IOHelper.MapPath("~/App_Data/TEMP/ShadowFs").Length;
var pos = dir.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase);
while (pos > min)
{
dir = dir.Substring(0, pos);
if (Directory.EnumerateFileSystemEntries(dir).Any() == false)
Directory.Delete(dir, true);
else
break;
pos = dir.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase);
}
}
catch
{
@@ -16,7 +16,7 @@ namespace Umbraco.Core.Logging
/// This is an old/deprecated logger and has been superceded by ParallelForwardingAppender which is included in Umbraco and
/// also by AsyncForwardingAppender in the Log4Net.Async library.
/// </summary>
[Obsolete("This is superceded by the ParallelForwardingAppender, this will be removed in v8")]
[Obsolete("This is superceded by the ParallelForwardingAppender, this will be removed in v8, do not use this")]
[EditorBrowsable(EditorBrowsableState.Never)]
public class AsynchronousRollingFileAppender : RollingFileAppender
{
@@ -13,301 +13,8 @@ namespace Umbraco.Core.Logging
/// <remarks>
/// Borrowed from https://github.com/cjbhaines/Log4Net.Async - will reference Nuget packages directly in v8
/// </remarks>
public class ParallelForwardingAppender : AsyncForwardingAppenderBase, IDisposable
[Obsolete("Use the Log4Net.Async.ParallelForwardingAppender instead this will be removed in future versions")]
public class ParallelForwardingAppender : Log4Net.Async.ParallelForwardingAppender
{
#region Private Members
private const int DefaultBufferSize = 1000;
private BlockingCollection<LoggingEventContext> _loggingEvents;
private CancellationTokenSource _loggingCancelationTokenSource;
private CancellationToken _loggingCancelationToken;
private Task _loggingTask;
private Double _shutdownFlushTimeout = 2;
private TimeSpan _shutdownFlushTimespan = TimeSpan.FromSeconds(2);
private static readonly Type ThisType = typeof(ParallelForwardingAppender);
private volatile bool shutDownRequested;
private int? bufferSize = DefaultBufferSize;
#endregion Private Members
#region Properties
/// <summary>
/// Gets or sets the number of LoggingEvents that will be buffered. Set to null for unlimited.
/// </summary>
public override int? BufferSize
{
get { return bufferSize; }
set { bufferSize = value; }
}
public int BufferEntryCount
{
get
{
if (_loggingEvents == null) return 0;
return _loggingEvents.Count;
}
}
/// <summary>
/// Gets or sets the time period in which the system will wait for appenders to flush before canceling the background task.
/// </summary>
public Double ShutdownFlushTimeout
{
get
{
return _shutdownFlushTimeout;
}
set
{
_shutdownFlushTimeout = value;
}
}
protected override string InternalLoggerName
{
get
{
{
return "ParallelForwardingAppender";
}
}
}
#endregion Properties
#region Startup
public override void ActivateOptions()
{
base.ActivateOptions();
_shutdownFlushTimespan = TimeSpan.FromSeconds(_shutdownFlushTimeout);
StartForwarding();
}
private void StartForwarding()
{
if (shutDownRequested)
{
return;
}
//Create a collection which will block the thread and wait for new entries
//if the collection is empty
if (BufferSize.HasValue && BufferSize > 0)
{
_loggingEvents = new BlockingCollection<LoggingEventContext>(BufferSize.Value);
}
else
{
//No limit on the number of events.
_loggingEvents = new BlockingCollection<LoggingEventContext>();
}
//The cancellation token is used to cancel a running task gracefully.
_loggingCancelationTokenSource = new CancellationTokenSource();
_loggingCancelationToken = _loggingCancelationTokenSource.Token;
_loggingTask = new Task(SubscriberLoop, _loggingCancelationToken);
_loggingTask.Start();
}
#endregion Startup
#region Shutdown
private void CompleteSubscriberTask()
{
shutDownRequested = true;
if (_loggingEvents == null || _loggingEvents.IsAddingCompleted)
{
return;
}
//Don't allow more entries to be added.
_loggingEvents.CompleteAdding();
//Allow some time to flush
Thread.Sleep(_shutdownFlushTimespan);
if (!_loggingTask.IsCompleted && !_loggingCancelationToken.IsCancellationRequested)
{
_loggingCancelationTokenSource.Cancel();
//Wait here so that the error logging messages do not get into a random order.
//Don't pass the cancellation token because we are not interested
//in catching the OperationCanceledException that results.
_loggingTask.Wait();
}
if (!_loggingEvents.IsCompleted)
{
ForwardInternalError("The buffer was not able to be flushed before timeout occurred.", null, ThisType);
}
}
protected override void OnClose()
{
CompleteSubscriberTask();
base.OnClose();
}
#endregion Shutdown
#region Appending
protected override void Append(LoggingEvent loggingEvent)
{
if (_loggingEvents == null || _loggingEvents.IsAddingCompleted || loggingEvent == null)
{
return;
}
loggingEvent.Fix = Fix;
//In the case where blocking on a full collection, and the task is subsequently completed, the cancellation token
//will prevent the entry from attempting to add to the completed collection which would result in an exception.
_loggingEvents.Add(new LoggingEventContext(loggingEvent, HttpContext), _loggingCancelationToken);
}
protected override void Append(LoggingEvent[] loggingEvents)
{
if (_loggingEvents == null || _loggingEvents.IsAddingCompleted || loggingEvents == null)
{
return;
}
foreach (var loggingEvent in loggingEvents)
{
Append(loggingEvent);
}
}
#endregion Appending
#region Forwarding
/// <summary>
/// Iterates over a BlockingCollection containing LoggingEvents.
/// </summary>
private void SubscriberLoop()
{
Thread.CurrentThread.Name = String.Format("{0} ParallelForwardingAppender Subscriber Task", Name);
//The task will continue in a blocking loop until
//the queue is marked as adding completed, or the task is canceled.
try
{
//This call blocks until an item is available or until adding is completed
foreach (var entry in _loggingEvents.GetConsumingEnumerable(_loggingCancelationToken))
{
HttpContext = entry.HttpContext;
ForwardLoggingEvent(entry.LoggingEvent, ThisType);
}
}
catch (OperationCanceledException ex)
{
//The thread was canceled before all entries could be forwarded and the collection completed.
ForwardInternalError("Subscriber task was canceled before completion.", ex, ThisType);
//Cancellation is called in the CompleteSubscriberTask so don't call that again.
}
catch (ThreadAbortException ex)
{
//Thread abort may occur on domain unload.
ForwardInternalError("Subscriber task was aborted.", ex, ThisType);
//Cannot recover from a thread abort so complete the task.
CompleteSubscriberTask();
//The exception is swallowed because we don't want the client application
//to halt due to a logging issue.
}
catch (Exception ex)
{
//On exception, try to log the exception
ForwardInternalError("Subscriber task error in forwarding loop.", ex, ThisType);
//Any error in the loop is going to be some sort of extenuating circumstance from which we
//probably cannot recover anyway. Complete subscribing.
CompleteSubscriberTask();
}
}
#endregion Forwarding
#region IDisposable Implementation
private bool _disposed = false;
//Implement IDisposable.
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
if (_loggingTask != null)
{
if (!(_loggingTask.IsCanceled || _loggingTask.IsCompleted || _loggingTask.IsFaulted))
{
try
{
CompleteSubscriberTask();
}
catch (Exception ex)
{
LogLog.Error(ThisType, "Exception Completing Subscriber Task in Dispose Method", ex);
}
}
try
{
_loggingTask.Dispose();
}
catch (Exception ex)
{
LogLog.Error(ThisType, "Exception Disposing Logging Task", ex);
}
finally
{
_loggingTask = null;
}
}
if (_loggingEvents != null)
{
try
{
_loggingEvents.Dispose();
}
catch (Exception ex)
{
LogLog.Error(ThisType, "Exception Disposing BlockingCollection", ex);
}
finally
{
_loggingEvents = null;
}
}
if (_loggingCancelationTokenSource != null)
{
try
{
_loggingCancelationTokenSource.Dispose();
}
catch (Exception ex)
{
LogLog.Error(ThisType, "Exception Disposing CancellationTokenSource", ex);
}
finally
{
_loggingCancelationTokenSource = null;
}
}
}
_disposed = true;
}
}
// Use C# destructor syntax for finalization code.
~ParallelForwardingAppender()
{
// Simply call Dispose(false).
Dispose(false);
}
#endregion IDisposable Implementation
}
}
+7 -2
View File
@@ -264,7 +264,7 @@ namespace Umbraco.Core.Models
/// <returns><see cref="Property"/> Value as an <see cref="object"/></returns>
public virtual object GetValue(string propertyTypeAlias)
{
return Properties[propertyTypeAlias].Value;
return Properties.Contains(propertyTypeAlias) ? Properties[propertyTypeAlias].Value : null;
}
/// <summary>
@@ -275,8 +275,13 @@ namespace Umbraco.Core.Models
/// <returns><see cref="Property"/> Value as a <see cref="TPassType"/></returns>
public virtual TPassType GetValue<TPassType>(string propertyTypeAlias)
{
if (Properties.Contains(propertyTypeAlias) == false)
{
return default(TPassType);
}
var convertAttempt = Properties[propertyTypeAlias].Value.TryConvertTo<TPassType>();
return convertAttempt.Success ? convertAttempt.Result : default(TPassType);
return convertAttempt.Success ? convertAttempt.Result : default(TPassType);
}
/// <summary>
@@ -42,6 +42,7 @@ namespace Umbraco.Core.Models
public Guid Key { get; set; }
public DateTime CreateDate { get; set; }
public DateTime UpdateDate { get; set; }
public DateTime? DeletedDate { get; set; }
/// <summary>
/// Special case, always return false, this will cause the repositories managing
@@ -60,5 +61,7 @@ namespace Umbraco.Core.Models
DeepCloneHelper.DeepCloneRefProperties(this, clone);
return clone;
}
}
}
@@ -101,6 +101,9 @@ namespace Umbraco.Core.Models.EntityBase
set { SetPropertyValueAndDetectChanges(value, ref _updateDate, Ps.Value.UpdateDateSelector); }
}
[IgnoreDataMember]
public DateTime? DeletedDate { get; set; }
internal virtual void ResetIdentity()
{
_hasIdentity = false;
@@ -3,7 +3,7 @@
/// <summary>
/// Marker interface for aggregate roots
/// </summary>
public interface IAggregateRoot : IEntity
public interface IAggregateRoot : IDeletableEntity
{
}
@@ -0,0 +1,11 @@
using System;
using System.Runtime.Serialization;
namespace Umbraco.Core.Models.EntityBase
{
public interface IDeletableEntity : IEntity
{
[DataMember]
DateTime? DeletedDate { get; set; }
}
}
@@ -20,7 +20,7 @@ namespace Umbraco.Core.Models.EntityBase
/// <summary>
/// Guid based Id
/// </summary>
/// <remarks>The key is currectly used to store the Unique Id from the
/// <remarks>The key is currectly used to store the Unique Id from the
/// umbracoNode table, which many of the entities are based on.</remarks>
[DataMember]
Guid Key { get; set; }
+1 -1
View File
@@ -2,6 +2,6 @@
{
public interface IPartialView : IFile
{
PartialViewType ViewType { get; }
}
}
+7
View File
@@ -0,0 +1,7 @@
namespace Umbraco.Core.Models
{
public interface IUserControl : IFile
{
}
}
@@ -42,7 +42,7 @@ namespace Umbraco.Core.Models.Identity
private string GetPasswordHash(string storedPass)
{
return storedPass.StartsWith("___UIDEMPTYPWORD__") ? null : storedPass;
return storedPass.StartsWith(Constants.Security.EmptyPasswordPrefix) ? null : storedPass;
}
}
}
+24
View File
@@ -109,6 +109,30 @@ namespace Umbraco.Core.Models
IsApproved = true;
}
/// <summary>
/// Constructor for creating a Member object
/// </summary>
/// <param name="name"></param>
/// <param name="email"></param>
/// <param name="username"></param>
/// <param name="rawPasswordValue">
/// The password value passed in to this parameter should be the encoded/encrypted/hashed format of the member's password
/// </param>
/// <param name="contentType"></param>
/// <param name="isApproved"></param>
public Member(string name, string email, string username, string rawPasswordValue, IMemberType contentType, bool isApproved)
: base(name, -1, contentType, new PropertyCollection())
{
Mandate.ParameterNotNull(contentType, "contentType");
_contentTypeAlias = contentType.Alias;
_contentType = contentType;
_email = email;
_username = username;
_rawPasswordValue = rawPasswordValue;
IsApproved = isApproved;
}
private static readonly Lazy<PropertySelectors> Ps = new Lazy<PropertySelectors>();
private class PropertySelectors
+11 -6
View File
@@ -1,10 +1,8 @@
using System;
using System.Runtime.Serialization;
using Umbraco.Core.Services;
namespace Umbraco.Core.Models
{
/// <summary>
/// Represents a Partial View file
/// </summary>
@@ -12,14 +10,21 @@ namespace Umbraco.Core.Models
[DataContract(IsReference = true)]
public class PartialView : File, IPartialView
{
[Obsolete("Use the ctor that explicitely sets the view type.")]
public PartialView(string path)
: this(path, null)
: this(PartialViewType.PartialView, path, null)
{ }
internal PartialView(string path, Func<File, string> getFileContent)
public PartialView(PartialViewType viewType, string path)
: this(viewType, path, null)
{ }
internal PartialView(PartialViewType viewType, string path, Func<File, string> getFileContent)
: base(path, getFileContent)
{ }
{
ViewType = viewType;
}
internal PartialViewType ViewType { get; set; }
public PartialViewType ViewType { get; set; }
}
}
+3 -2
View File
@@ -1,9 +1,10 @@
namespace Umbraco.Core.Models
{
internal enum PartialViewType : byte
public enum PartialViewType : byte
{
Unknown = 0, // default
PartialView = 1,
PartialViewMacro = 2
PartialViewMacro = 2,
MacroScript = 3
}
}
@@ -178,6 +178,13 @@ namespace Umbraco.Core.Models
/// </summary>
[UmbracoObjectType(Constants.ObjectTypes.FormsDataSource)]
[FriendlyName("DataSource")]
FormsDataSource
FormsDataSource,
/// <summary>
/// Language
/// </summary>
[UmbracoObjectType(Constants.ObjectTypes.Language)]
[FriendlyName("Language")]
Language
}
}
+32
View File
@@ -0,0 +1,32 @@
using System;
using System.Runtime.Serialization;
namespace Umbraco.Core.Models
{
/// <summary>
/// Represents a UserControl file
/// </summary>
[Serializable]
[DataContract(IsReference = true)]
public class UserControl : File, IUserControl
{
public UserControl(string path)
: this(path, (Func<File, string>)null)
{ }
internal UserControl(string path, Func<File, string> getFileContent)
: base(path, getFileContent)
{ }
/// <summary>
/// Indicates whether the current entity has an identity, which in this case is a path/name.
/// </summary>
/// <remarks>
/// Overrides the default Entity identity check.
/// </remarks>
public override bool HasIdentity
{
get { return string.IsNullOrEmpty(Path) == false; }
}
}
}
+3 -2
View File
@@ -1,5 +1,6 @@
using System;
using System.Globalization;
using Umbraco.Core.Configuration;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Services;
@@ -12,7 +13,7 @@ namespace Umbraco.Core.Models
/// </summary>
/// <param name="user"></param>
/// <param name="textService"></param>
/// <returns></returns>
/// <returns></returns>
public static CultureInfo GetUserCulture(this IUser user, ILocalizedTextService textService)
{
if (user == null) throw new ArgumentNullException("user");
@@ -34,7 +35,7 @@ namespace Umbraco.Core.Models
catch (CultureNotFoundException)
{
//return the default one
return CultureInfo.GetCultureInfo("en");
return CultureInfo.GetCultureInfo(GlobalSettings.DefaultUILanguage);
}
}
+1 -1
View File
@@ -11,7 +11,7 @@ namespace Umbraco.Core
{
private readonly bool _keepOldest;
public OrderedHashSet(bool keepOldest = true)
public OrderedHashSet(bool keepOldest = true)
{
_keepOldest = keepOldest;
}
@@ -7,7 +7,7 @@ namespace Umbraco.Core.Packaging.Models
{
[Serializable]
[DataContract(IsReference = true)]
internal class InstallationSummary
public class InstallationSummary
{
public MetaData MetaData { get; set; }
public IEnumerable<IDataTypeDefinition> DataTypesInstalled { get; set; }
@@ -5,7 +5,7 @@ namespace Umbraco.Core.Packaging.Models
{
[Serializable]
[DataContract(IsReference = true)]
internal class MetaData
public class MetaData
{
public string Name { get; set; }
public string Version { get; set; }
@@ -4,7 +4,7 @@ using System.Xml.Linq;
namespace Umbraco.Core.Packaging.Models
{
internal enum ActionRunAt
public enum ActionRunAt
{
Undefined = 0,
Install,
@@ -13,7 +13,7 @@ namespace Umbraco.Core.Packaging.Models
[Serializable]
[DataContract(IsReference = true)]
internal class PackageAction
public class PackageAction
{
private ActionRunAt _runAt;
private bool? _undo;
@@ -7,7 +7,7 @@ namespace Umbraco.Core.Packaging.Models
{
[Serializable]
[DataContract(IsReference = true)]
internal class UninstallationSummary
public class UninstallationSummary
{
public MetaData MetaData { get; set; }
public IEnumerable<IDataTypeDefinition> DataTypesUninstalled { get; set; }
@@ -23,7 +23,7 @@ namespace Umbraco.Core.Persistence.Migrations
Logger = logger;
}
public IMigrationContext Context { get; internal set; }
public IMigrationContext Context;
public abstract void Up();
public abstract void Down();
@@ -1,4 +1,5 @@
using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column;
using System;
using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column;
using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Expressions;
using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table;
using Umbraco.Core.Persistence.SqlSyntax;
@@ -25,6 +26,15 @@ namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter
return new AlterTableBuilder(_context, _databaseProviders, expression);
}
/// <summary>
/// The problem with this is that only under particular circumstances is the expression added to the context
/// so you wouldn't actually know if you are using it correctly or not and chances are you are not and therefore
/// the statement won't even execute whereas using the IAlterTableSyntax to modify a column is guaranteed to add
/// the expression to the context.
/// </summary>
/// <param name="columnName"></param>
/// <returns></returns>
[Obsolete("Use the IAlterTableSyntax to modify a column instead, this will be removed in future versions")]
public IAlterColumnSyntax Column(string columnName)
{
var expression = new AlterColumnExpression(_context.CurrentDatabaseProvider, _databaseProviders, _sqlSyntax) {Column = {Name = columnName}};
@@ -1,11 +1,22 @@
using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column;
using System;
using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Column;
using Umbraco.Core.Persistence.Migrations.Syntax.Alter.Table;
namespace Umbraco.Core.Persistence.Migrations.Syntax.Alter
{
public interface IAlterSyntaxBuilder : IFluentSyntax
{
IAlterTableSyntax Table(string tableName);
IAlterTableSyntax Table(string tableName);
/// <summary>
/// The problem with this is that only under particular circumstances is the expression added to the context
/// so you wouldn't actually know if you are using it correctly or not and chances are you are not and therefore
/// the statement won't even execute whereas using the IAlterTableSyntax to modify a column is guaranteed to add
/// the expression to the context.
/// </summary>
/// <param name="columnName"></param>
/// <returns></returns>
[Obsolete("Use the IAlterTableSyntax to modify a column instead, this will be removed in future versions")]
IAlterColumnSyntax Column(string columnName);
}
}
@@ -4,7 +4,7 @@ using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero
{
[Migration("7.6.0", 0, Constants.System.UmbracoMigrationName)]
[Migration("7.6.0", 3, Constants.System.UmbracoMigrationName)]
public class AddIndexToCmsMemberLoginName : MigrationBase
{
public AddIndexToCmsMemberLoginName(ISqlSyntaxProvider sqlSyntax, ILogger logger)
@@ -12,18 +12,43 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero
{ }
public override void Up()
{
var dbIndexes = SqlSyntax.GetDefinedIndexesDefinitions(Context.Database);
//make sure it doesn't already exist
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_cmsMember_LoginName")) == false)
{
Execute.Code(database =>
{
Create.Index("IX_cmsMember_LoginName").OnTable("cmsMember")
.OnColumn("LoginName")
.Ascending()
.WithOptions()
.NonClustered();
}
//Now we need to check if we can actually d6 this because we won't be able to if there's data in there that is too long
//http://issues.umbraco.org/issue/U4-9758
var colLen = (SqlSyntax is MySqlSyntaxProvider)
? database.ExecuteScalar<int?>("select max(LENGTH(LoginName)) from cmsMember")
: database.ExecuteScalar<int?>("select max(datalength(LoginName)) from cmsMember");
if (colLen < 900 == false && colLen != null)
{
return null;
}
var dbIndexes = SqlSyntax.GetDefinedIndexesDefinitions(Context.Database);
//make sure it doesn't already exist
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_cmsMember_LoginName")) == false)
{
var localContext = new LocalMigrationContext(Context.CurrentDatabaseProvider, database, SqlSyntax, Logger);
//we can apply the index
localContext.Create.Index("IX_cmsMember_LoginName").OnTable("cmsMember")
.OnColumn("LoginName")
.Ascending()
.WithOptions()
.NonClustered();
return localContext.GetSql();
}
return null;
});
}
public override void Down()
@@ -1,11 +1,10 @@
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveFive
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero
{
[Migration("7.5.5", 101, Constants.System.UmbracoMigrationName)]
[Migration("7.6.0", 101, Constants.System.UmbracoMigrationName)]
public class AddLockObjects : MigrationBase
{
public AddLockObjects(ISqlSyntaxProvider sqlSyntax, ILogger logger)
@@ -1,11 +1,10 @@
using System.Linq;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveFive
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero
{
[Migration("7.5.5", 100, Constants.System.UmbracoMigrationName)]
[Migration("7.6.0", 100, Constants.System.UmbracoMigrationName)]
public class AddLockTable : MigrationBase
{
public AddLockTable(ISqlSyntaxProvider sqlSyntax, ILogger logger)
@@ -0,0 +1,50 @@
using System;
using System.Linq;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero
{
[Migration("7.6.0", 0, Constants.System.UmbracoMigrationName)]
public class NormalizeTemplateGuids : MigrationBase
{
public NormalizeTemplateGuids(ISqlSyntaxProvider sqlSyntax, ILogger logger)
: base(sqlSyntax, logger)
{ }
public override void Up()
{
Execute.Code(UpdateTemplateGuids);
}
private static string UpdateTemplateGuids(Database database)
{
// we need this migration because ppl running pre-7.6 on Cloud and Courier have templates in different
// environments having different GUIDs (Courier does not sync template GUIDs) and we need to normalize
// these GUIDs so templates with the same alias on different environments have the same GUID.
// however, if already running a prerelease version of 7.6, we do NOT want to normalize the GUIDs as quite
// probably, we are already running Deploy and the GUIDs are OK. assuming noone is running a prerelease
// of 7.6 on Courier.
// so... testing if we already have a 7.6.0 version installed. not pretty but...?
//
var version = database.FirstOrDefault<string>("SELECT version FROM umbracoMigration WHERE name=@name ORDER BY version DESC", new { name = Constants.System.UmbracoMigrationName });
if (version != null && version.StartsWith("7.6.0")) return string.Empty;
var updates = database.Query<dynamic>(@"SELECT umbracoNode.id, cmsTemplate.alias FROM umbracoNode
JOIN cmsTemplate ON umbracoNode.id=cmsTemplate.nodeId
WHERE nodeObjectType = @guid", new { guid = Constants.ObjectTypes.TemplateTypeGuid})
.Select(template => Tuple.Create((int) template.id, ("template____" + (string) template.alias).ToGuid()))
.ToList();
foreach (var update in updates)
database.Execute("UPDATE umbracoNode set uniqueId=@guid WHERE id=@id", new { guid = update.Item2, id = update.Item1 });
return string.Empty;
}
public override void Down()
{
throw new NotImplementedException();
}
}
}
@@ -0,0 +1,52 @@
using System.Linq;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenSixZero
{
[Migration("7.6.0", 2, Constants.System.UmbracoMigrationName)]
public class ReduceLoginNameColumnsSize : MigrationBase
{
public ReduceLoginNameColumnsSize(ISqlSyntaxProvider sqlSyntax, ILogger logger)
: base(sqlSyntax, logger)
{ }
public override void Up()
{
//Now we need to check if we can actually d6 this because we won't be able to if there's data in there that is too long
//http://issues.umbraco.org/issue/U4-9758
Execute.Code(database =>
{
var dbIndexes = SqlSyntax.GetDefinedIndexesDefinitions(database);
var colLen = (SqlSyntax is MySqlSyntaxProvider)
? database.ExecuteScalar<int?>("select max(LENGTH(LoginName)) from cmsMember")
: database.ExecuteScalar<int?>("select max(datalength(LoginName)) from cmsMember");
if (colLen < 900 == false) return null;
var localContext = new LocalMigrationContext(Context.CurrentDatabaseProvider, database, SqlSyntax, Logger);
//if it exists we need to drop it first
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_cmsMember_LoginName")))
{
localContext.Delete.Index("IX_cmsMember_LoginName").OnTable("cmsMember");
}
//we can apply the col length change
localContext.Alter.Table("cmsMember")
.AlterColumn("LoginName")
.AsString(225)
.NotNullable();
return localContext.GetSql();
});
}
public override void Down()
{
}
}
}
@@ -2,6 +2,7 @@
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence.DatabaseAnnotations;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZero
@@ -16,7 +17,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe
public override void Up()
{
var exists = Context.Database.FirstOrDefault<RelationTypeDto>("WHERE alias=@alias", new {alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias});
var exists = Context.Database.FirstOrDefault<RelationTypeDtoCapture>("WHERE alias=@alias", new {alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias});
if (exists == null)
{
Insert.IntoTable("umbracoRelationType").Row(new
@@ -28,13 +29,42 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe
alias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias
});
}
}
public override void Down()
{ }
// need to capture the DTO as it is modified in later migrations
[TableName("umbracoRelationType")]
[PrimaryKey("id")]
[ExplicitColumns]
internal class RelationTypeDtoCapture
{
public const int NodeIdSeed = 3;
[Column("id")]
[PrimaryKeyColumn(IdentitySeed = NodeIdSeed)]
public int Id { get; set; }
[Column("dual")]
public bool Dual { get; set; }
[Column("parentObjectType")]
public Guid ParentObjectType { get; set; }
[Column("childObjectType")]
public Guid ChildObjectType { get; set; }
[Column("name")]
[Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRelationType_name")]
public string Name { get; set; }
[Column("alias")]
[NullSetting(NullSetting = NullSettings.Null)]
[Length(100)]
[Index(IndexTypes.UniqueNonClustered, Name = "IX_umbracoRelationType_alias")]
public string Alias { get; set; }
}
}
}
@@ -1,5 +1,4 @@
using System.Linq;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
using Umbraco.Core.Persistence.SqlSyntax;
@@ -11,15 +10,11 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe
{
public UpdateUniqueIdToHaveCorrectIndexType(ISqlSyntaxProvider sqlSyntax, ILogger logger)
: base(sqlSyntax, logger)
{
}
{ }
//see: http://issues.umbraco.org/issue/U4-6188, http://issues.umbraco.org/issue/U4-6187
public override void Up()
{
var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database)
var indexes = SqlSyntax.GetDefinedIndexes(Context.Database)
.Select(x => new DbIndexDefinition()
{
TableName = x.Item1,
@@ -28,24 +23,19 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe
IsUnique = x.Item4
}).ToArray();
//must be non-nullable
Alter.Column("uniqueID").OnTable("umbracoNode").AsGuid().NotNullable();
//make sure it already exists
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNodeUniqueID")))
{
// drop the index if it exists
if (indexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNodeUniqueID")))
Delete.Index("IX_umbracoNodeUniqueID").OnTable("umbracoNode");
}
//make sure it doesn't already exist
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNode_uniqueID")) == false)
{
//must be a uniqe index
Create.Index("IX_umbracoNode_uniqueID").OnTable("umbracoNode").OnColumn("uniqueID").Unique();
}
// set uniqueID to be non-nullable
// the index *must* be dropped else 'one or more objects access this column' exception
Alter.Table("umbracoNode").AlterColumn("uniqueID").AsGuid().NotNullable();
// create the index
Create.Index("IX_umbracoNode_uniqueID").OnTable("umbracoNode").OnColumn("uniqueID").Unique();
}
public override void Down()
{
}
{ }
}
}
@@ -1,46 +0,0 @@
using System.Linq;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenTwoZero
{
[Migration("7.2.0", 3, Constants.System.UmbracoMigrationName)]
public class AddIndexToUmbracoNodeTable : MigrationBase
{
private readonly bool _skipIndexCheck;
internal AddIndexToUmbracoNodeTable(ISqlSyntaxProvider sqlSyntax, ILogger logger, bool skipIndexCheck) : base(sqlSyntax, logger)
{
_skipIndexCheck = skipIndexCheck;
}
public AddIndexToUmbracoNodeTable(ISqlSyntaxProvider sqlSyntax, ILogger logger) : base(sqlSyntax, logger)
{
}
public override void Up()
{
var dbIndexes = _skipIndexCheck ? new DbIndexDefinition[] { } : SqlSyntax.GetDefinedIndexes(Context.Database)
.Select(x => new DbIndexDefinition
{
TableName = x.Item1,
IndexName = x.Item2,
ColumnName = x.Item3,
IsUnique = x.Item4
}).ToArray();
//make sure it doesn't already exist
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNodeUniqueID")) == false)
{
Create.Index("IX_umbracoNodeUniqueID").OnTable("umbracoNode").OnColumn("uniqueID").Ascending().WithOptions().NonClustered();
}
}
public override void Down()
{
Delete.Index("IX_umbracoNodeUniqueID").OnTable("umbracoNode");
}
}
}
@@ -81,7 +81,7 @@ namespace Umbraco.Core.Persistence.Repositories
s.Where<DocumentDto>(x => x.Newest, SqlSyntax);
return s;
};
var sqlBaseFull = GetBaseQuery(BaseQueryType.FullMultiple);
var sqlBaseIds = GetBaseQuery(BaseQueryType.Ids);
@@ -107,7 +107,7 @@ namespace Umbraco.Core.Persistence.Repositories
return ProcessQuery(translate(translatorFull), new PagingSqlQuery(translate(translatorIds)));
}
#endregion
#endregion
#region Overrides of PetaPocoRepositoryBase<IContent>
@@ -142,8 +142,8 @@ namespace Umbraco.Core.Persistence.Repositories
{
//The only reason we apply this left outer join is to be able to pull back the DocumentPublishedReadOnlyDto
//information with the entire data set, so basically this will get both the latest document and also it's published
//version if it has one. When performing a count or when retrieving Ids like in paging, this is unecessary
//and causes huge performance overhead for the SQL server, especially when sorting the result.
//version if it has one. When performing a count or when retrieving Ids like in paging, this is unecessary
//and causes huge performance overhead for the SQL server, especially when sorting the result.
//We also don't include this outer join when querying for multiple entities since it is much faster to fetch this information
//in a separate query. For a single entity this is ok.
@@ -234,7 +234,7 @@ namespace Umbraco.Core.Persistence.Repositories
};
var baseId = 0;
while (true)
{
// get the next group of nodes
@@ -284,7 +284,7 @@ namespace Umbraco.Core.Persistence.Repositories
}
xmlIdsQuery.Where<NodeDto>(dto => dto.NodeObjectType == docObjectType, SqlSyntax);
var allXmlIds = Database.Fetch<int>(xmlIdsQuery);
var toRemove = allXmlIds.Except(allContentIds).ToArray();
@@ -293,9 +293,9 @@ namespace Umbraco.Core.Persistence.Repositories
foreach (var idGroup in toRemove.InGroupsOf(2000))
{
Database.Execute("DELETE FROM cmsContentXml WHERE nodeId IN (@ids)", new { ids = idGroup });
}
}
}
}
public override IEnumerable<IContent> GetAllVersions(int id)
@@ -308,7 +308,7 @@ namespace Umbraco.Core.Persistence.Repositories
var sqlFull = translate(GetBaseQuery(BaseQueryType.FullMultiple));
var sqlIds = translate(GetBaseQuery(BaseQueryType.Ids));
return ProcessQuery(sqlFull, new PagingSqlQuery(sqlIds), true, includeAllVersions:true);
}
@@ -388,7 +388,7 @@ namespace Umbraco.Core.Persistence.Repositories
protected override void PersistDeletedItem(IContent entity)
{
//We need to clear out all access rules but we need to do this in a manual way since
//We need to clear out all access rules but we need to do this in a manual way since
// nothing in that table is joined to a content id
var subQuery = new Sql()
.Select("umbracoAccessRule.accessId")
@@ -449,7 +449,7 @@ namespace Umbraco.Core.Persistence.Repositories
entity.Level = level;
//Assign the same permissions to it as the parent node
// http://issues.umbraco.org/issue/U4-2161
// http://issues.umbraco.org/issue/U4-2161
var permissionsRepo = new PermissionRepository<IContent>(UnitOfWork, _cacheHelper, SqlSyntax);
var parentPermissions = permissionsRepo.GetPermissionsForEntity(entity.ParentId).ToArray();
//if there are parent permissions then assign them, otherwise leave null and permissions will become the
@@ -516,7 +516,7 @@ namespace Umbraco.Core.Persistence.Repositories
VersionDate = dto.UpdateDate,
Newest = true,
NodeId = dto.NodeId,
Published = true
Published = true
};
((Content) entity).PublishedVersionGuid = dto.VersionId;
((Content) entity).PublishedDate = dto.UpdateDate;
@@ -636,9 +636,12 @@ namespace Umbraco.Core.Persistence.Repositories
{
//In order to update the ContentVersion we need to retrieve its primary key id
var contentVerDto = Database.SingleOrDefault<ContentVersionDto>("WHERE VersionId = @Version", new { Version = entity.Version });
contentVersionDto.Id = contentVerDto.Id;
Database.Update(contentVersionDto);
if (contentVerDto != null)
{
contentVersionDto.Id = contentVerDto.Id;
Database.Update(contentVersionDto);
}
Database.Update(dto);
}
@@ -742,7 +745,7 @@ namespace Umbraco.Core.Persistence.Repositories
return ProcessQuery(translate(translatorFull), new PagingSqlQuery(translate(translatorIds)), true);
}
/// <summary>
/// This builds the Xml document used for the XML cache
/// </summary>
@@ -841,7 +844,7 @@ order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder",
/// </summary>
/// <param name="entity"></param>
/// <param name="permission"></param>
/// <param name="userIds"></param>
/// <param name="userIds"></param>
public void AssignEntityPermission(IContent entity, char permission, IEnumerable<int> userIds)
{
var repo = new PermissionRepository<IContent>(UnitOfWork, _cacheHelper, SqlSyntax);
@@ -899,9 +902,9 @@ order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder",
string orderBy, Direction orderDirection, bool orderBySystemField, IQuery<IContent> filter = null)
{
//NOTE: This uses the GetBaseQuery method but that does not take into account the required 'newest' field which is
//NOTE: This uses the GetBaseQuery method but that does not take into account the required 'newest' field which is
// what we always require for a paged result, so we'll ensure it's included in the filter
var filterSql = new Sql().Append("AND (cmsDocument.newest = 1)");
if (filter != null)
{
@@ -910,7 +913,7 @@ order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder",
filterSql.Append(string.Format("AND ({0})", filterClaus.Item1), filterClaus.Item2);
}
}
Func<Tuple<string, object[]>> filterCallback = () => new Tuple<string, object[]>(filterSql.SQL, filterSql.Arguments);
return GetPagedResultsByQuery<DocumentDto>(query, pageIndex, pageSize, out totalRecords,
@@ -957,7 +960,7 @@ order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder",
/// </param>
/// <param name="withCache"></param>
/// <param name="includeAllVersions">
/// Generally when querying for content we only want to return the most recent version of the content item, however in some cases like when
/// Generally when querying for content we only want to return the most recent version of the content item, however in some cases like when
/// we want to return all versions of a content item, we can't simply return the latest
/// </param>
/// <returns></returns>
@@ -966,7 +969,7 @@ order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder",
// fetch returns a list so it's ok to iterate it in this method
var dtos = Database.Fetch<DocumentDto, ContentVersionDto, ContentDto, NodeDto>(sqlFull);
if (dtos.Count == 0) return Enumerable.Empty<IContent>();
//Go and get all of the published version data separately for this data, this is because when we are querying
//for multiple content items we don't include the outer join to fetch this data in the same query because
//it is insanely slow. Instead we just fetch the published version data separately in one query.
@@ -978,7 +981,7 @@ order by umbracoNode.{2}, umbracoNode.parentID, umbracoNode.sortOrder",
if (parsedOriginalSql.InvariantContains("ORDER BY "))
{
parsedOriginalSql = parsedOriginalSql.Substring(0, parsedOriginalSql.LastIndexOf("ORDER BY ", StringComparison.Ordinal));
}
}
//order by update date DESC, if there is corrupted published flags we only want the latest!
var publishedSql = new Sql(@"SELECT cmsDocument.nodeId, cmsDocument.published, cmsDocument.versionId, cmsDocument.updateDate, cmsDocument.newest
@@ -1004,12 +1007,12 @@ ORDER BY cmsContentVersion.id DESC
var content = new List<Tuple<IContent, bool>>();
var defs = new DocumentDefinitionCollection(includeAllVersions);
var templateIds = new List<int>();
//track the looked up content types, even though the content types are cached
// they still need to be deep cloned out of the cache and we don't want to add
// the overhead of deep cloning them on every item in this loop
var contentTypes = new Dictionary<int, IContentType>();
foreach (var dto in dtos)
{
DocumentPublishedReadOnlyDto publishedDto;
@@ -1119,33 +1122,12 @@ ORDER BY cmsContentVersion.id DESC
if (EnsureUniqueNaming == false)
return nodeName;
var sql = new Sql();
sql.Select("*")
.From<NodeDto>()
.Where<NodeDto>(x => x.NodeObjectType == NodeObjectTypeId && x.ParentId == parentId && x.Text.StartsWith(nodeName));
var names = Database.Fetch<SimilarNodeName>("SELECT id, text AS name FROM umbracoNode WHERE nodeObjectType=@objectType AND parentId=@parentId",
new { objectType = NodeObjectTypeId, parentId });
int uniqueNumber = 1;
var currentName = nodeName;
var dtos = Database.Fetch<NodeDto>(sql);
if (dtos.Any())
{
var results = dtos.OrderBy(x => x.Text, new SimilarNodeNameComparer());
foreach (var dto in results)
{
if (id != 0 && id == dto.NodeId) continue;
if (dto.Text.ToLowerInvariant().Equals(currentName.ToLowerInvariant()))
{
currentName = nodeName + string.Format(" ({0})", uniqueNumber);
uniqueNumber++;
}
}
}
return currentName;
return SimilarNodeName.GetUniqueName(names, id, nodeName);
}
/// <summary>
/// Dispose disposable properties
/// </summary>
@@ -70,6 +70,8 @@ namespace Umbraco.Core.Persistence.Repositories
{
//Remove 'published' xml from the cmsContentXml table for the unpublished content
Database.Delete<ContentXmlDto>("WHERE nodeId = @Id", new { Id = entity.Id });
entity.DeletedDate = DateTime.Now;
}
protected override void PersistNewItem(ContentXmlEntity<TContent> entity)
@@ -270,6 +270,8 @@ AND umbracoNode.id <> @id",
//Delete (base) node data
Database.Delete<NodeDto>("WHERE uniqueID = @Id", new { Id = entity.Key });
entity.DeletedDate = DateTime.Now;
}
#endregion
@@ -448,33 +450,10 @@ AND umbracoNode.id <> @id",
private string EnsureUniqueNodeName(string nodeName, int id = 0)
{
var names = Database.Fetch<SimilarNodeName>("SELECT id, text AS name FROM umbracoNode WHERE nodeObjectType=@objectType",
new { objectType = NodeObjectTypeId });
var sql = new Sql();
sql.Select("*")
.From<NodeDto>(SqlSyntax)
.Where<NodeDto>(x => x.NodeObjectType == NodeObjectTypeId && x.Text.StartsWith(nodeName));
int uniqueNumber = 1;
var currentName = nodeName;
var dtos = Database.Fetch<NodeDto>(sql);
if (dtos.Any())
{
var results = dtos.OrderBy(x => x.Text, new SimilarNodeNameComparer());
foreach (var dto in results)
{
if (id != 0 && id == dto.NodeId) continue;
if (dto.Text.ToLowerInvariant().Equals(currentName.ToLowerInvariant()))
{
currentName = nodeName + string.Format(" ({0})", uniqueNumber);
uniqueNumber++;
}
}
}
return currentName;
return SimilarNodeName.GetUniqueName(names, id, nodeName);
}
/// <summary>
@@ -539,6 +518,8 @@ AND umbracoNode.id <> @id",
Database.Execute(
"DELETE FROM cmsDataTypePreValues WHERE id=@Id",
new { Id = entity.Id });
entity.DeletedDate = DateTime.Now;
}
protected override void PersistNewItem(PreValueEntity entity)
@@ -195,6 +195,8 @@ namespace Umbraco.Core.Persistence.Repositories
//Clear the cache entries that exist by uniqueid/item key
IsolatedCache.ClearCacheItem(GetCacheIdKey<IDictionaryItem>(entity.ItemKey));
IsolatedCache.ClearCacheItem(GetCacheIdKey<IDictionaryItem>(entity.Key));
entity.DeletedDate = DateTime.Now;
}
private void RecursiveDelete(Guid parentId)
@@ -258,6 +260,19 @@ namespace Umbraco.Core.Persistence.Repositories
return GetByQuery(query);
}
public Dictionary<string, Guid> GetDictionaryItemKeyMap()
{
var columns = new[] { "key", "id" }.Select(x => (object) SqlSyntax.GetQuotedColumnName(x)).ToArray();
var sql = new Sql().Select(columns).From<DictionaryDto>(SqlSyntax);
return Database.Fetch<DictionaryItemKeyIdDto>(sql).ToDictionary(x => x.Key, x => x.Id);
}
private class DictionaryItemKeyIdDto
{
public string Key { get; set; }
public Guid Id { get; set; }
}
public IEnumerable<IDictionaryItem> GetDictionaryItemDescendants(Guid? parentId)
{
//This methods will look up children at each level, since we do not store a path for dictionary (ATM), we need to do a recursive
@@ -167,6 +167,8 @@ namespace Umbraco.Core.Persistence.Repositories
// delete
Database.Delete(nodeDto);
entity.DeletedDate = DateTime.Now;
}
protected override void PersistNewItem(EntityContainer entity)
@@ -9,5 +9,6 @@ namespace Umbraco.Core.Persistence.Repositories
IDictionaryItem Get(Guid uniqueId);
IDictionaryItem Get(string key);
IEnumerable<IDictionaryItem> GetDictionaryItemDescendants(Guid? parentId);
Dictionary<string, Guid> GetDictionaryItemKeyMap();
}
}
@@ -0,0 +1,13 @@
using System.IO;
using Umbraco.Core.Models;
namespace Umbraco.Core.Persistence.Repositories
{
public interface IUserControlRepository : IRepository<string, UserControl>
{
bool ValidateUserControl(UserControl userControl);
Stream GetFileContentStream(string filepath);
void SetFileContent(string filepath, Stream content);
long GetFileSize(string filepath);
}
}
@@ -0,0 +1,15 @@
using Umbraco.Core.IO;
using Umbraco.Core.Models;
using Umbraco.Core.Persistence.UnitOfWork;
namespace Umbraco.Core.Persistence.Repositories
{
internal class MacroScriptRepository : PartialViewRepository
{
public MacroScriptRepository(IUnitOfWork work, IFileSystem fileSystem)
: base(work, fileSystem)
{ }
protected override PartialViewType ViewType { get { return PartialViewType.MacroScript; } }
}
}
@@ -584,31 +584,10 @@ namespace Umbraco.Core.Persistence.Repositories
if (EnsureUniqueNaming == false)
return nodeName;
var sql = new Sql();
sql.Select("*")
.From<NodeDto>()
.Where<NodeDto>(x => x.NodeObjectType == NodeObjectTypeId && x.ParentId == parentId && x.Text.StartsWith(nodeName));
var names = Database.Fetch<SimilarNodeName>("SELECT id, text AS name FROM umbracoNode WHERE nodeObjectType=@objectType AND parentId=@parentId",
new { objectType = NodeObjectTypeId, parentId });
int uniqueNumber = 1;
var currentName = nodeName;
var dtos = Database.Fetch<NodeDto>(sql);
if (dtos.Any())
{
var results = dtos.OrderBy(x => x.Text, new SimilarNodeNameComparer());
foreach (var dto in results)
{
if (id != 0 && id == dto.NodeId) continue;
if (dto.Text.ToLowerInvariant().Equals(currentName.ToLowerInvariant()))
{
currentName = nodeName + string.Format(" ({0})", uniqueNumber);
uniqueNumber++;
}
}
}
return currentName;
return SimilarNodeName.GetUniqueName(names, id, nodeName);
}
/// <summary>
@@ -184,30 +184,16 @@ namespace Umbraco.Core.Persistence.Repositories
public IEnumerable<IMemberGroup> GetMemberGroupsForMember(string username)
{
//find the member by username
var memberSql = new Sql();
var memberObjectType = new Guid(Constants.ObjectTypes.Member);
var sql = new Sql()
.Select("un.*")
.From("umbracoNode AS un")
.InnerJoin("cmsMember2MemberGroup")
.On("un.id = cmsMember2MemberGroup.MemberGroup")
.LeftJoin("(SELECT umbracoNode.id, cmsMember.LoginName FROM umbracoNode INNER JOIN cmsMember ON umbracoNode.id = cmsMember.nodeId) AS member")
.On("member.id = cmsMember2MemberGroup.Member")
.Where("un.nodeObjectType=@objectType", new {objectType = NodeObjectTypeId })
.Where("member.LoginName=@loginName", new {loginName = username});
memberSql.Select("umbracoNode.id")
.From<NodeDto>()
.InnerJoin<MemberDto>()
.On<NodeDto, MemberDto>(dto => dto.NodeId, dto => dto.NodeId)
.Where<NodeDto>(x => x.NodeObjectType == memberObjectType)
.Where<MemberDto>(x => x.LoginName == username);
var memberIdUsername = Database.Fetch<int?>(memberSql).FirstOrDefault();
if (memberIdUsername.HasValue == false)
{
return Enumerable.Empty<IMemberGroup>();
}
var sql = new Sql();
sql.Select("umbracoNode.*")
.From<NodeDto>()
.InnerJoin<Member2MemberGroupDto>()
.On<NodeDto, Member2MemberGroupDto>(dto => dto.NodeId, dto => dto.MemberGroup)
.Where<NodeDto>(x => x.NodeObjectType == NodeObjectTypeId)
.Where<Member2MemberGroupDto>(x => x.Member == memberIdUsername.Value);
return Database.Fetch<NodeDto>(sql)
.DistinctBy(dto => dto.NodeId)
.Select(x => _modelFactory.BuildEntity(x));
@@ -4,6 +4,7 @@ using System.Globalization;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Microsoft.AspNet.Identity;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.EntityBase;
@@ -230,7 +231,19 @@ namespace Umbraco.Core.Persistence.Repositories
Database.Insert(dto.ContentVersionDto);
//Create the first entry in cmsMember
dto.NodeId = nodeDto.NodeId;
dto.NodeId = nodeDto.NodeId;
//if the password is empty, generate one with the special prefix
//this will hash the guid with a salt so should be nicely random
if (entity.RawPasswordValue.IsNullOrWhiteSpace())
{
var aspHasher = new PasswordHasher();
dto.Password = Constants.Security.EmptyPasswordPrefix +
aspHasher.HashPassword(Guid.NewGuid().ToString("N"));
//re-assign
entity.RawPasswordValue = dto.Password;
}
Database.Insert(dto);
//Create the PropertyData for this version - cmsPropertyData
@@ -30,7 +30,7 @@ namespace Umbraco.Core.Persistence.Repositories
var updated = FileSystem.GetLastModified(path).UtcDateTime;
//var content = GetFileContent(path);
var view = new PartialView(path, file => GetFileContent(file.OriginalPath))
var view = new PartialView(ViewType, path, file => GetFileContent(file.OriginalPath))
{
//id can be the hash
Id = path.GetHashCode(),
@@ -38,8 +38,7 @@ namespace Umbraco.Core.Persistence.Repositories
//Content = content,
CreateDate = created,
UpdateDate = updated,
VirtualPath = FileSystem.GetUrl(id),
ViewType = ViewType
VirtualPath = FileSystem.GetUrl(id)
};
//on initial construction we don't want to have dirty properties tracked
@@ -74,6 +74,7 @@ namespace Umbraco.Core.Persistence.Repositories
{
Database.Execute(delete, new { Id = GetEntityId(entity) });
}
entity.DeletedDate = DateTime.Now;
}
}
}

Some files were not shown because too many files have changed in this diff Show More