Compare commits

...

588 Commits

Author SHA1 Message Date
Morten Christensen 72e0e72d16 Minor tweaks to ExecutionMigrationStep and PackageMigrationsContext.
Adds tests for ExecutionMigrationStep and PackageMigrationsContext.
2016-06-13 00:48:27 +02:00
Morten Christensen 5fdec15a22 Code cleanup 2016-06-13 00:47:39 +02:00
Morten Christensen 9ac72b7232 Fixing merge issue in InstallStatus method 2016-06-12 14:16:01 +02:00
Morten Christensen a13eba0ac5 Merge pull request #1307 from Shazwazza/package-migrations
Package migrations
2016-06-12 13:25:48 +02:00
Shannon d03aa54dfc Merge remote-tracking branch 'umbraco/dev-v7' into package-migrations
# Conflicts:
#	src/Umbraco.Web/Install/InstallHelper.cs
2016-06-12 11:07:59 +02:00
Shannon 38e59373c6 U4-8569 Saving a member type changes the UniqueId of custom properties and tabs
This fixes the tab/group unique id mappings
2016-06-08 09:47:06 +02:00
Shannon 50f4bbdd1e U4-8569 Saving a member type changes the UniqueId of custom properties
This fixes the member property type UniqueID SQL and mapping.
This ensures that the main repositories fully assert/compare all fetched properties.
2016-06-07 12:20:10 +02:00
Simon Busborg 111ef37bfb Merge pull request #1286 from bjarnef/dev-v7-U4-8525
Fix tiny issues with dropzone border and sticky header
2016-06-06 12:04:48 +02:00
Shannon Deminick 6681e48c57 Merge pull request #1301 from dampee/dev-v7
update examine documentation links
2016-06-03 11:41:41 +02:00
Damiaan 7b101caf0b update examine documentation links 2016-06-03 11:36:07 +02:00
Shannon aff03997d9 Moves static event binding for prop editors to startup handlers 2016-06-01 11:27:08 +02:00
Sebastiaan Janssen cff7dbc81a Temp u4 8495 (#1293)
* U4-8495 Create YML file for AppVeyor

* Secret token needs to be in single quotes

* Secure token instead of a configuration variable should make the slack notification work

* Only post to Slack when build fails
2016-05-31 15:21:37 +02:00
Sebastiaan Janssen 1121362ca9 Merge pull request #1295 from umbraco/temp-U4-8511
U4-8511 Update moment.js to the version to 2.10.3 for release
2016-05-30 16:08:51 +02:00
Sebastiaan Janssen 6ad4390d20 Merge pull request #1294 from umbraco/temp-U4-8331
Fixes: U4-8331 Umbraco.MultipleMediaPicker 'pick only images' should not allow a folder to be picked
2016-05-30 14:57:14 +02:00
Mads Rasmussen 8d5742acb7 Merge pull request #1281 from umbraco/temp-U4-8445
U4-8445 Validation on the Email field for Members will not allow the …
2016-05-30 14:41:46 +02:00
Shannon 4aa4a03013 U4-8511 Update moment.js to the version to 2.10.3 for release 2016-05-30 14:25:47 +02:00
Mads Rasmussen 9190855bcf add configuration to disable folder select 2016-05-30 14:08:30 +02:00
Sebastiaan Janssen 720a46686b U4-8500 Get c# docs building (#1291)
fetches docfx, builds the metadata and builds the docs with the correct filters
builds the UI docs from the same powershell script
2016-05-30 12:02:13 +02:00
Mads Rasmussen 11c1b5a2c4 Merge pull request #1126 from KevinJump/dev-v7-StylesheetProperties-U4-7160
U4-7160: Stylesheet RegEx to capture multi class properties
2016-05-30 10:51:30 +02:00
Simon Busborg 885d14bcb6 Fixes: U4-8455 IE11 - Image Cropper stretches the image when zooming 2016-05-30 10:01:39 +02:00
Mads Rasmussen 654f130105 Merge pull request #1275 from bjarnef/dev-v7-U4-8489
Ensure correct font is used for icon-check
2016-05-30 09:56:05 +02:00
Mads Rasmussen 2f445543f4 Merge pull request #1263 from lars-erik/U4-8443
U4-8443 - Immediately create node from list view when only one available document type
2016-05-30 09:39:38 +02:00
Simon Busborg 216c70becc Merge pull request #1273 from gkonings/disable-submit-overlay
U4-8332
disable/enable submit button on overlay window
2016-05-30 09:35:42 +02:00
Simon Busborg 7046fca333 Merge pull request #1274 from bjarnef/dev-v7-U4-8486
Fixes some styling for login screen on narrow screen sizes
2016-05-30 09:27:42 +02:00
Simon Busborg 43ece1aba4 Merge pull request #1272 from gkonings/slider-default-round
Removed required attribute from slider-handle
2016-05-30 09:19:28 +02:00
bjarnef cd3140af21 Fix tiny issues with dropzone border to the left for fixed header and header jump by 1px when it get sticky. 2016-05-26 21:13:25 +02:00
Mads Rasmussen b3b4cd4654 Fixes: U4-8480 Allow deleting empty tab when creating a doctype 2016-05-25 15:30:35 +02:00
Shannon def8ee4962 fixes ysod when indexing grid content when the value is not a string (sub json value) 2016-05-25 14:38:24 +02:00
Shannon 8cea391a3f U4-8514 Fix installation issue when there are stale cookies on localhost 2016-05-25 14:36:00 +02:00
Shannon 1e38089bb4 U4-8514 Fix installation issue when there are stale cookies on localhost 2016-05-25 13:58:56 +02:00
Shannon 81d1ac74d2 U4-8513 Fix the RestartApplicationPool extension to null out the current identity 2016-05-25 13:56:42 +02:00
Claus 247a5f415d added a check to create macroScripts folder if it doesn't exist when creating a scripting file. 2016-05-25 12:12:52 +02:00
Shannon Deminick 8d5dabdfff Merge pull request #1282 from umbraco/temp-U4-7332
U4-7332 Default gravatar link broken
2016-05-25 12:00:38 +02:00
Shannon 85a54c6492 fixes the delete part of U4-8491 2016-05-25 11:20:35 +02:00
Sebastiaan Janssen 7f3f11ab58 Merge pull request #1279 from umbraco/temp-U4-8491
U4-8491 Moving/Deleting Media does not sync/refresh the tree
2016-05-24 17:22:51 +02:00
Sebastiaan Janssen f817eefd5c Merge pull request #1280 from umbraco/temp-U4-8358
U4-8358 Writers can't schedule publish/unpublish times
2016-05-24 16:25:55 +02:00
Sebastiaan Janssen 6cb817fc01 U4-7332 Default gravatar link broken 2016-05-24 16:20:20 +02:00
Stephan 7fad91d86f Merge branch 'AndyButland-u4-8290' into dev-v7 2016-05-24 15:56:21 +02:00
Stephan 42021a56b2 U4-8290 - minor cleanup & refactoring 2016-05-24 15:55:26 +02:00
Shannon f29b5aade7 only removes the buggy formatters/parsers if the attribute is type="email" 2016-05-24 15:07:35 +02:00
Shannon 3ea01b7dab U4-8445 Validation on the Email field for Members will not allow the entry of root domains greater than four characters. 2016-05-24 15:04:46 +02:00
Stephan 0a4a230c07 Merge branch 'u4-8290' of https://github.com/AndyButland/Umbraco-CMS into AndyButland-u4-8290 2016-05-24 08:15:47 +02:00
Shannon 877b7d4af7 U4-8358 Writers can't schedule publish/unpublish times 2016-05-23 19:23:59 +02:00
Shannon 9cf5ac2f95 U4-8491 Moving/Deleting Media does not sync/refresh the tree 2016-05-23 17:44:45 +02:00
Sebastiaan Janssen c902649768 U4-8438 Umbraco 7.4.3 NuGet package missing file 2016-05-23 10:47:54 +02:00
Sebastiaan Janssen bbe37ea6b9 U4-8349 Cannot create Scripting Files in Umbraco 7.4.0 2016-05-23 08:55:51 +02:00
Sebastiaan Janssen 57b19e7017 Forgot semicolon, whoops! 2016-05-23 08:47:36 +02:00
Sebastiaan Janssen 43d791f9a5 U4-6504 SmtpClient Not Properly Disposed, Causing Emails to Fail Periodically 2016-05-23 08:27:30 +02:00
bjarnef b74bf661b8 Added quotes 2016-05-21 23:57:30 +02:00
bjarnef 3c9de3b20c Ensure correct font is used for icon-check 2016-05-21 23:43:37 +02:00
bjarnef ccd42ad1d4 Fix some issues in landscape mode 2016-05-21 22:42:58 +02:00
bjarnef a8712fb4cf Added a comment 2016-05-21 21:51:28 +02:00
bjarnef d7cb79513f Adjust login for narrow screen sizes. 2016-05-21 21:49:00 +02:00
Gerard Konings 3897d0f764 disable submitbutton
disable submitbutton on overlay, so you can enable it later on
2016-05-20 22:44:18 +02:00
Gerard Konings 2ffbdec14b Removed required attribute from slider-handle
Removed required attribute. Slider defaults to round, so doesn’t need
to be required
2016-05-20 22:40:26 +02:00
Sebastiaan Janssen 8c7390280e Updates this migration to only run when upgrading from 7.3.0 and higher 2016-05-20 16:36:22 +02:00
Sebastiaan Janssen e54d374eb2 Add cmsPreviewXml table if it doesn't yet exist 2016-05-20 15:54:39 +02:00
Stephan aea26e67b1 Merge pull request #1255 from umbraco/better-memory-xmlcache
This fixes the LoadContentFromDatabase method
2016-05-19 17:03:23 +02:00
Shannon 06ae15ee7c reverts the cloning change 2016-05-19 16:12:12 +02:00
Shannon 95871fde7c updates naming conventions 2016-05-19 15:22:49 +02:00
Shannon 6b954d962f Merge branch 'lars-erik-test-bases-refactoring' into dev-v7 2016-05-19 11:48:14 +02:00
Shannon 2bd81ccb90 Merge branch 'test-bases-refactoring' of https://github.com/lars-erik/Umbraco-CMS into lars-erik-test-bases-refactoring 2016-05-19 11:48:01 +02:00
Stephan 08ae03a2d4 Merge branch 'dev-v7' into better-memory-xmlcache 2016-05-17 19:10:38 +02:00
Shannon 512c19a132 U4-8461 ERROR umbraco.presentation.webservices.nodeSorter - Could not update content sort order 2016-05-17 13:27:45 +02:00
Shannon 1e468cda5d Removes unused method, ensures that Cloning only occurs once per request (sort of hacky). Before if you have a few nodes that are published but have pending changes, then perform a sort, then the xml will be cloned for as many times as there were content changes. 2016-05-17 13:26:47 +02:00
Mads Rasmussen adebd4acd6 Merge pull request #1169 from AndyButland/u4-7468
Fixes U4 7468 - mis-assigned translator when sending to translation
2016-05-17 13:18:15 +02:00
Shannon d826f04b54 Ensures sort order is accurate to what is in the database 2016-05-17 12:17:05 +02:00
Simon Busborg 4752a83135 Fixes: U4-8362 Inserting image in a grid with Firefox shows full-size rather than scaled image 2016-05-17 11:02:07 +02:00
Mads Rasmussen 6a593d8b5e Merge pull request #1245 from greystate/U4-8377
Fix for U4-8377
2016-05-17 10:42:12 +02:00
Mads Rasmussen 38bc38486a Merge pull request #1229 from bjarnef/dev-v7-U4-8300
Wrap text "Include all child nodes" in a label
2016-05-17 10:13:06 +02:00
Mads Rasmussen b3f50368e5 Merge pull request #1228 from bjarnef/dev-v7-U4-8330
Fix line-height when using custom icon font as section icon
2016-05-17 09:19:38 +02:00
Shannon f130e86c88 U4-8448 Background task runner missing a null check during shutdown 2016-05-12 12:27:02 +02:00
Shannon 8d5556d4bc Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2016-05-12 11:16:46 +02:00
Shannon 4d0dc90042 Revert "RteMacroRenderingValueConverter should return an IHtmlString"
This reverts commit 7e9a14be83.
2016-05-12 11:16:39 +02:00
Claus acb1aeabda Merge pull request #1261 from umbraco/temp-U4-8371
U4-8371 Dont ship with the {machinename} token for Examine
2016-05-12 10:55:52 +02:00
Claus f5e433fd3c Merge pull request #1260 from umbraco/temp-U4-7295
U4-7295 Examine search with the data in the grid should be easier OOTB
2016-05-12 10:52:18 +02:00
Lars-Erik Aabech 597b4c3dd2 Added button to create only available doctype
Hides dropdown when listViewAllowedTypes.length > 1
Shows button for single when listViewAllowedTypes.length === 1
2016-05-11 21:44:22 +02:00
Simon Busborg a3efb74ad3 Merge pull request #1240 from arknu/decimal-parsing
U4-8365: Fix decimal property value converter to work on non EN-US cultures
2016-05-11 13:33:48 +02:00
Simon Busborg 924eac1b95 Merge pull request #1235 from bjarnef/dev-v7-U4-8347
Fix localization of listview buttons/links actions.
2016-05-11 10:06:51 +02:00
Shannon fb55b0a60b U4-8371 Dont ship with the {machinename} token for Examine 2016-05-10 18:32:32 +02:00
Shannon 7ae1060f50 U4-7295 Examine search with the data in the grid should be easier OOTB 2016-05-10 18:25:18 +02:00
Shannon Deminick d11ae23fe3 Merge pull request #1259 from umbraco/temp-u4-8413
U4-8413 - fix missing ServersLock object
2016-05-10 13:51:10 +02:00
Stephan 271f4e7a4a U4-8413 - fix missing ServersLock object 2016-05-10 12:29:13 +02:00
AndyButland 4f3d82cf10 Change field to which data is saved for a data type if provided in prevalues and handle potential mis-matched types on display 2016-05-10 10:50:59 +02:00
Simon Busborg 50e92b80f9 Changed from int to Nvarchar for the multimediapicker 2016-05-09 14:35:55 +02:00
Simon Busborg 9cd33abd5b Merge pull request #1130 from jamescoxhead/U4-7315
U4-7315 Make new media picker default in new installs
2016-05-09 14:30:29 +02:00
AndyButland 7b6bcd24ae Added value type as a pre-value to the label property editor 2016-05-08 23:39:47 +02:00
AndyButland 7858521c8b Converted usage of property editor value type strings to constants 2016-05-08 22:05:23 +02:00
Shannon Deminick f79a1f1a71 Merge pull request #1253 from umbraco/temp-u4-8406
U4-8406 - restart app pool by unloading domain and support read-only …
2016-05-04 16:51:41 +02:00
Shannon 0d11b15b3f This fixes the LoadContentFromDatabase method - before this was storing every single xml node in memory in dictionaries (x2) and then performing the re-organization of all nodes afterwords to construct a document, now we just read each row and organize the document accordingly, 2016-05-04 16:36:43 +02:00
Stephan 5f8747b4d3 U4-1780 - detect colliding urls (#1243)
* U4-1780 - detect colliding urls

* U4-1780 - fix error message

* U4-1780 - fix XmlHelper issue with sortOrder

* U4-1780 - bugfix
2016-05-04 12:45:20 +02:00
Stephan 67996cdb64 U4-8406 - restart app pool by unloading domain and support read-only web.config 2016-05-04 08:45:50 +02:00
Shannon 31d910432a Moves some logic to PackageMigrationsContext, ensures that the dest version for each package is based on it's maximum available version found in it's migrations. 2016-05-04 08:43:41 +02:00
Shannon 0e67976cc6 Migrations are detected and running now including the installer UI 2016-05-04 08:43:19 +02:00
Shannon 85399a97a6 adds another check to app context for HasPendingPackageMigrations, updates the installer auth checks and adds a new installer route which will be redirected to instead of the normal installer route when there are pending migrations. 2016-05-04 08:39:52 +02:00
Shannon cb7e12215e First step done - detect if package migrations need to run on startup and redirect to the installer 2016-05-04 08:39:30 +02:00
Claus 729b179473 Merge pull request #1242 from umbraco/temp-u4-8370
U4-8370 - fix broken upgrade
2016-05-03 12:54:47 +02:00
Claus 20b67e47be Fixed property name to match property of the dynamic. 2016-05-03 12:54:22 +02:00
Shannon Deminick 52b6e04ad4 Merge pull request #1248 from rustyswayne/dev-v7
Appends forum link to developer comment for reference when evaluating code removal.
2016-05-03 11:35:56 +02:00
Claus 1186b7cb47 Merge pull request #1246 from umbraco/temp-u4-2508
U4-2508 - improve culture detection in 404 situation
2016-05-03 11:02:31 +02:00
Shannon f03daf819e Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2016-05-02 23:06:45 +02:00
Shannon febaddaaef U4-8394 When persisting the xml cache file it double loads the full xml structure into memory before writing it to a file 2016-05-02 23:05:46 +02:00
rs@merchello.com 029e50dd3c Appends comment and forum reference to developer comment for reference when evaluating code removal. 2016-05-02 13:17:13 -07:00
Simon Busborg 2a87c926f3 Merge pull request #1234 from bjarnef/dev-v7-U4-8343
Localize "unsaved changes" dialog.
2016-05-02 10:44:47 +02:00
Simon Busborg f7ee47a37f Fixes U4-8029 Editor settings for "Grid Layouts" is too wide and text overflows 2016-05-02 10:18:37 +02:00
Stephan 6dea69c5a1 U4-2508 - improve culture detection in 404 situation 2016-04-27 19:09:49 +02:00
Chriztian Steinmeier 066ef6809b Change the language keys necessary for the fix 2016-04-26 23:36:42 +02:00
Mads Rasmussen 4b682e0669 Merge pull request #1201 from bjarnef/dev-v7-U4-8022
U4-8022 - Fix issues with tree icons + legacy icons
2016-04-25 21:13:14 +02:00
Mads Rasmussen 4886631d54 Merge pull request #1202 from bjarnef/dev-v7-U4-7967
U4-7967 - Fix errors when saving document type when no icon is selected
2016-04-25 20:14:11 +02:00
Stephan 2c3c0eae12 U4-8370 - fix broken upgrade 2016-04-25 17:10:10 +02:00
Claus a5c427bae7 Merge pull request #1241 from umbraco/temp-u4-5699
U4-5699 - update template alias in gui after saving
2016-04-25 14:29:03 +02:00
Stephan fb99e375d0 U4-5699 - update template alias in gui after saving 2016-04-25 14:14:55 +02:00
Stephan 7e9a14be83 RteMacroRenderingValueConverter should return an IHtmlString 2016-04-25 11:18:22 +02:00
Claus 9b39f712be U4-3411 Adding new language doesn't sync the tree 2016-04-25 10:11:54 +02:00
bjarnef fcdf212c4c Rename area alias 2016-04-24 18:42:46 +02:00
Asbjørn Riis-Knudsen deb74939af U4-8365: Fix decimal property value converter to work on non EN-US cultures 2016-04-23 17:54:37 +02:00
Shannon Deminick b28a4a410c Merge pull request #1239 from soreng/patch-1
Update ICacheProvider.cs
2016-04-23 16:18:38 +02:00
Søren Gregersen bad1372313 Update ICacheProvider.cs
Not really an abstract class... :)
2016-04-23 15:58:18 +02:00
Shannon 7e13781d8b fixes merge issue 2016-04-20 16:04:35 +02:00
Shannon 72cef006d3 bumps version 2016-04-20 15:56:06 +02:00
Shannon 6124126835 Fixes the custom field sorting, no longer has a sub query for order by, now supports both mysql and sqlce, adds a unit test (should add more though) 2016-04-20 15:50:38 +02:00
Shannon 7e71dcd2ae Merge remote-tracking branch 'origin/dev-v7.5' into dev-v7 2016-04-20 12:56:03 +02:00
bjarnef 9174029126 Fix localization of listview buttons/links actions. 2016-04-18 22:33:38 +02:00
bjarnef 3564e70259 Localize "unsaved changes" dialog. 2016-04-18 20:42:19 +02:00
Lars-Erik Aabech 1d428045b6 Don't remove virtual on SetupApplicationContext. Might be many external inheritors. 2016-04-18 15:35:09 +02:00
bjarnef e9bf41e869 Wrap text "Include all child nodes" in a label 2016-04-14 23:22:26 +02:00
bjarnef 054fd9ecef Fix line-height when using custom icon font as section icon. 2016-04-14 22:18:14 +02:00
Per Ploug fcaa4ad8d6 JsDocs comments on listviewhelper (U4-7185) 2016-04-14 11:36:24 +02:00
Sebastiaan Janssen bf70e208ad U4-8325 XSLT macro rendering logs too much in Info mode (after upgrade 7.1.4 => 7.4.0) 2016-04-14 09:34:53 +02:00
Shannon Deminick 26f705b129 Merge pull request #1224 from 0xc0dec/dev-v7
Fixed logger context class
2016-04-13 20:18:21 +02:00
Aleksey Fedotov 9e3941e8e1 Fixed logger context class 2016-04-13 22:14:21 +05:00
Shannon Deminick a015032442 fixed typo 2016-04-13 16:45:47 +02:00
Shannon Deminick 38f6a7a8b6 fixed typo 2016-04-13 16:45:01 +02:00
Stephan 7886b7814d U4-8312 - models generation false error (#1222) 2016-04-13 15:57:27 +02:00
Shannon c3b4a9128a ensures all GetPagedDescendant methods are mocked - fixes tests. 2016-04-13 15:47:21 +02:00
Shannon dbff25bd6d Merge branch 'dev-v7' into dev-v7.5 2016-04-13 15:16:28 +02:00
Shannon c9c391e477 fixed type, decimal sorting now works 2016-04-13 15:05:23 +02:00
Shannon 10bb16316d Updates sorting code to support decimals - need to test on MySql 2016-04-13 14:49:37 +02:00
Shannon 82b4b4e668 Merge remote-tracking branch 'origin/7.5-ListViewCustomFieldSorting' into dev-v7.5
Conflicts:
	src/Umbraco.Web/WebApi/Filters/DisableBrowserCacheAttribute.cs
2016-04-13 14:44:22 +02:00
Shannon ce0ecd8114 Ensures that the emails sent our are in the culture of the user, fixes issue of logging in after resetting password and then logging out again 2016-04-13 14:35:40 +02:00
Shannon e610a5ef54 Changes the password reset link to be a real link (not an angular deep link), this means there is less logging of the reset code in a query string and less visibility of it, this also means that the validation of the code happens instantly. The premise for this is the same as how we deal with external authentication requests and uses ViewData/TempData with redirects. Fixes the models to have the correct attributes to be able to directly json serialize them. 2016-04-13 13:51:12 +02:00
Shannon f279000d00 removes unecessary methods from user.service.js, ensures correct error msg when resetting password on the server, fixes email copy and allows for non-html emails if the copy is plain text, removes the need for more than one email msg in the lang files and uses the correct way to replace tokens, 2016-04-12 19:54:04 +02:00
Shannon d424b13ac4 Fixes some styling, wording and validation 2016-04-12 18:59:39 +02:00
Shannon 1361e017a2 Merge branch 'u4-222' of https://github.com/AndyButland/Umbraco-CMS into AndyButland-u4-222
Conflicts:
	src/Umbraco.Core/Security/BackOfficeUserManager.cs
	src/Umbraco.Web.UI.Client/src/less/pages/login.less
	src/Umbraco.Web.UI.Client/src/routes.js
	src/Umbraco.Web.UI.Client/src/views/common/dialogs/login.controller.js
	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
	src/Umbraco.Web.UI/web.Template.config
	src/Umbraco.Web/Editors/AuthenticationController.cs
	src/Umbraco.Web/Editors/BackOfficeController.cs
	src/Umbraco.Web/Umbraco.Web.csproj
2016-04-12 18:07:25 +02:00
Claus 76054bb783 Enabling sorting by the Name column.
OrderDirection is only reversed if reclicking the same sort column.
2016-04-12 15:36:28 +02:00
Claus cf7756a96d Merge pull request #1217 from umbraco/temp-U4-8298
Fixes: U4-8298 CacheRefresher authorization logic reversed - traditio…
2016-04-12 13:19:59 +02:00
Claus 20347c1ccd Fixing typo. 2016-04-12 13:17:41 +02:00
Lars-Erik Aabech ae913ede6f Virtualized creating of application context
Closed setting up of application context
Opens up a whole bunch of doors. :)
2016-04-10 00:07:03 +02:00
Shannon 36255709e6 U4-8297 Custom MembershipProvider search doesn't work in the listview 2016-04-07 18:16:03 +02:00
Shannon 506ed9f866 U4-8286 Add OWIN startup events to the UmbracoDefaultOwinStartup class 2016-04-07 17:51:09 +02:00
Shannon f87bec398d U4-8239 DisableBrowserCacheAttribute causing YSOD when a previous exceptions is thrown before the filter kicks in 2016-04-07 16:44:45 +02:00
Shannon 1e5b6a6a0f Fixes: U4-8298 CacheRefresher authorization logic reversed - traditional load balancing will not work 2016-04-07 15:42:51 +02:00
Warren Buckley a2f8e92098 Merge pull request #1087 from bjarnef/dev-v7-U4-6425
U4-6425 - Maximum property for Related Links
2016-04-07 08:47:01 +01:00
bjarnef 9d5af4ad5e Merge branch 'dev-v7' of git://github.com/umbraco/Umbraco-CMS into dev-v7-U4-6425
Conflicts:
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/relatedlinks/relatedlinks.controller.js
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/relatedlinks/relatedlinks.html
2016-04-06 20:20:22 +02:00
bjarnef ae154885e4 Ensure icon has a value. 2016-04-06 19:52:21 +02:00
bjarnef 2c29e422bc Add icons for internal links. 2016-04-06 19:47:05 +02:00
bjarnef 2d6b8712d5 Limit this to listview, so it doesn't affect other property editors. 2016-04-06 19:44:09 +02:00
Warren Buckley 81aad6fc64 Merge pull request #1205 from bjarnef/dev-v7-U4-8248
U4-8248 - Add tooltip for listview layout + cursor style for listview table row
2016-04-06 15:45:31 +01:00
Shannon e2954fbf39 refactors interface methods so they are not breaking existing signatures and not overlapping based on optional parameters 2016-04-06 13:23:39 +02:00
Shannon 75be22a778 Fixes tests, adds null checks 2016-04-06 12:05:52 +02:00
Claus 58280e7d63 Merge pull request #1209 from greystate/fix-U4-8260
Fix for U4-8260
2016-04-06 11:12:43 +02:00
Shannon 6856540a7c fixes bool parameter for members 2016-04-06 09:49:53 +02:00
Shannon b9b3d62994 fixes boolean isSystem for media 2016-04-06 09:44:33 +02:00
Shannon dac7b93209 fixes GetChildren non bool argument to work as a bool again. 2016-04-06 09:17:05 +02:00
Shannon 90a66aeebd fixes merge / build 2016-04-05 16:32:46 +02:00
Shannon f485755082 Merge branch 'aadfPT-dev-v7' into 7.5-ListViewCustomFieldSorting 2016-04-05 16:21:10 +02:00
Shannon c20984dca7 Merge branch 'dev-v7' of https://github.com/aadfPT/Umbraco-CMS into aadfPT-dev-v7
Conflicts:
	src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
	src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs
	src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
	src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs
	src/Umbraco.Core/Services/ContentService.cs
	src/Umbraco.Core/Services/IContentService.cs
	src/Umbraco.Core/Services/IMediaService.cs
	src/Umbraco.Core/Services/IMemberService.cs
	src/Umbraco.Core/Services/MediaService.cs
	src/Umbraco.Core/Services/MemberService.cs
	src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs
	src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs
	src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
	src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js
	src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js
	src/Umbraco.Web.UI.Client/src/common/resources/member.resource.js
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/list/list.listviewlayout.controller.js
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js
	src/Umbraco.Web/Editors/ContentController.cs
	src/Umbraco.Web/Editors/MediaController.cs
	src/Umbraco.Web/Editors/MemberController.cs
	src/Umbraco.Web/WebApi/Filters/DisableBrowserCacheAttribute.cs
	src/UmbracoExamine/UmbracoMemberIndexer.cs
2016-04-05 16:20:39 +02:00
Shannon 80d7443bd3 fix build 2016-04-05 16:00:49 +02:00
Shannon ed7c682a68 Merge branch 'AndyButland-u4-6003b' into 7.5-ListViewCustomFieldSorting 2016-04-05 15:31:41 +02:00
Shannon ef3f15ec9b Merge branch 'u4-6003b' of https://github.com/AndyButland/Umbraco-CMS into AndyButland-u4-6003b
Conflicts:
	src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
	src/Umbraco.Core/Persistence/Repositories/Interfaces/IContentRepository.cs
	src/Umbraco.Core/Persistence/Repositories/Interfaces/IMediaRepository.cs
	src/Umbraco.Core/Persistence/Repositories/Interfaces/IMemberRepository.cs
	src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs
	src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
	src/Umbraco.Core/Services/ContentService.cs
	src/Umbraco.Core/Services/IContentService.cs
	src/Umbraco.Core/Services/IMediaService.cs
	src/Umbraco.Core/Services/IMemberService.cs
	src/Umbraco.Core/Services/MediaService.cs
	src/Umbraco.Core/Services/MemberService.cs
	src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs
	src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs
	src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html
	src/Umbraco.Web/Editors/MemberController.cs
	src/UmbracoExamine/UmbracoMemberIndexer.cs
2016-04-05 15:31:33 +02:00
Sebastiaan Janssen c856795cb7 Fix hilariously wrong copy/pasted TODO comments.. 2016-04-05 08:03:47 +02:00
madden-tom 2d514ac09e Added check for publish permissions to remove option for Publish At a…
U4-287 "Publish at" circumvents "Send for approval/publishing"
2016-04-05 08:01:05 +02:00
Sebastiaan Janssen 8e8b8bdea1 Revert "Removes old obsoleted ping.aspx"
This reverts commit 453efc02a5.

Conflicts:
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj

U4-8274 '/umbraco/ping.aspx' is missing
2016-04-04 09:20:59 +02:00
Sebastiaan Janssen d8c781f97f Make the file exclusion filter more readable 2016-04-03 13:39:05 +02:00
Sebastiaan Janssen 6502470708 U4-8265 Listview list and listview grid does not handle acceptedFileTypes in same way 2016-04-03 12:08:25 +02:00
Sebastiaan Janssen 680396daab Localize server-side error message for disallowed file uploads 2016-04-03 12:08:23 +02:00
Asbjørn Riis-Knudsen 4e4ea59433 * Only restrict to image files when onlyImages is active* Handle disallowed filetypes as per other upload controls
* Only restrict to image files when onlyImages is active
* Handle disallowed filetypes as per other upload controls
2016-04-02 19:07:35 +02:00
bjarnef 40f7e87e04 Fix issues when using custom font icons in backoffice. 2016-04-02 13:36:55 +02:00
Warren Buckley fbce20d0c3 Merge pull request #1158 from umbraco/temp-U4-8016
Fixes: U4-8016 Pick only images from media
2016-04-01 13:54:37 +01:00
André Ferreira c147db1334 Merge branch 'dev-v7' of https://github.com/aadfPT/Umbraco-CMS into dev-v7 2016-04-01 11:29:33 +01:00
André Ferreira bd2a40d214 U4-6003 List View - Order By Custom Property Fix
Original work done on https://github.com/umbraco/Umbraco-CMS/pull/711 but ported to the latest version

Content below for reference
With the current implementation of the list view you can only sort by system columns (Name, SortOrder etc.) and not custom columns you have added to your document types. This PR allows that.

The crux of it is a sub-query added to the ORDER BY clause when we are ordering by a custom field. This looks up the field's value from the most recent content version.

Provided here and not in the previous pull request is:

MySQL support
Have done some performance testing. On a local laptop with 1000 nodes in a list view, it's sorting in around 220-250ms. It's a little slower that sorting on native properties like node name, but still perfectly usable - there's no significant delay you see in use.
Please note also:

GetPagedResultsByQuery() in VersionableRepositoryBase was previously doing an ORDER BY in SQL and then repeating this via LINQ to Objects. I couldn't see that this second ordering was necessary so removed it, but wanted to flag here in case I've missed something around why this was necessary.
The PR also includes small amends to fix or hide sorting on a couple of the default columns for the member amd media list views.
2016-04-01 11:28:51 +01:00
André Ferreira 9376731533 Adhering to Umbraco's Coding Standards 2016-04-01 11:24:30 +01:00
Shannon Deminick 982fa26b7e Merge pull request #1210 from umbraco/temp-U4-8103
U4-8103
2016-03-31 18:26:09 +02:00
Stephan c3055ca43f U4-8103 - fix DisableBrowserCacheAttribute to handle exceptions 2016-03-31 16:37:16 +02:00
Stephan 4cca364511 U4-8103 - refactor YSOD overlay to display inner exceptions 2016-03-31 16:36:36 +02:00
Stephan 9e0ed94d77 Fix typo in lang xml files 2016-03-31 12:56:24 +02:00
Warren Buckley 374147a1a0 Merge pull request #1208 from umbraco/temp-U4-2954
U4-2954 - refresh domain cache when emptying recycle bin
2016-03-31 10:28:31 +01:00
Chriztian Steinmeier 5f0fe69c82 Update links to https 2016-03-30 21:11:29 +02:00
Chriztian Steinmeier e325e06efc Update link to Our on Backoffice sections 2016-03-30 21:10:41 +02:00
Chriztian Steinmeier 5e7db1047b Add the missing 't' 2016-03-30 21:09:14 +02:00
Stephan 61fe0a4a93 U4-2954 - refresh domain cache when emptying recycle bin 2016-03-30 17:56:34 +02:00
Warren Buckley aa1aabef3a Merge pull request #1204 from umbraco/temp-U4-7862
U4-7862 Brackets cause issues in the stylesheet editor
2016-03-30 16:11:15 +01:00
bjarnef d1c865480f Add tooltip for listview layout + cursor style for listview table row. 2016-03-29 23:22:42 +02:00
André Ferreira d560223eca Fixes to make it work 2016-03-29 20:13:53 +01:00
Claus c427c51053 U4-7862 Brackets cause issues in the stylesheet editor 2016-03-29 14:29:27 +02:00
paulsterling 08070e319a Update number of sites running 2016-03-28 16:46:31 -07:00
André Ferreira 54394f2ce9 fixes 2016-03-28 10:35:05 +01:00
André Ferreira 4f141e8b27 Fixing column sort on columns with custom headers 2016-03-28 10:35:04 +01:00
bjarnef 30e9a1ef82 Don't set dirty when just filtering icons. 2016-03-28 02:29:03 +02:00
bjarnef 0c9dcc1f5a Fix errors when saving document type when no icon is selected. 2016-03-28 01:47:01 +02:00
bjarnef 233e3d9387 Fix issues with tree icons + legacy icons 2016-03-27 19:07:09 +02:00
Warren Buckley ac2ebc4071 Merge pull request #1193 from umbraco/temp-U4-8220
U4-8220 ModelState and ViewData is not carried through when using the…
2016-03-23 12:10:05 +00:00
Shannon d4c79a0915 Fixes tests, adds more asserts 2016-03-23 11:02:27 +01:00
Shannon 61f9845db0 bumps version 2016-03-23 10:06:53 +01:00
Shannon 43e23829ae updates EnsurePartialViewMacroViewContextFilterAttribute to check for child actions 2016-03-23 10:06:13 +01:00
Stephan 5774ce68c7 GitIgnore Umbraco.Tests/media 2016-03-22 14:37:22 +01:00
Shannon b9af6f631a U4-8220 ModelState and ViewData is not carried through when using the obsolete Content.GetGridHtml method 2016-03-22 11:23:09 +01:00
Shannon cd401f5e37 U4-8216 Hijacked controller actions fail with custom RenderModel subclass due to ModelBinding error 2016-03-21 16:12:34 +01:00
Sebastiaan Janssen 75c2b07ad3 Update ModelsBuilder dependency for the NuGet package 2016-03-18 16:32:05 +01:00
Sebastiaan Janssen 969fe30f6e Merge pull request #1186 from umbraco/temp-U4-8043
U4-8043 - reboot app when PureLive models go wrong
2016-03-18 16:26:52 +01:00
Stephan 0f90d357cf U4-8043 - reboot application when PureLive models go wrong 2016-03-18 16:14:06 +01:00
Stephan d955daab0f Upgrade ModelsBuilder to 3.0.2 2016-03-18 16:13:19 +01:00
Shannon 617b17ca9e puts back in the current node permission check - since we use this for Create 2016-03-18 15:43:14 +01:00
Shannon 9e3d7a1cce updates default pipeline marker stage for the preview middleware, updates MembershipHelper to not throw an exception if the Role manager is disabled. 2016-03-18 11:05:39 +01:00
Warren Buckley f04071d7c7 Merge pull request #1180 from umbraco/temp-U4-8165
U4-8165 Ensure browsers are not caching service requests
2016-03-18 09:53:12 +00:00
Shannon Deminick 2cce9395da Merge pull request #1181 from mittonp/dev-v7
French translations for Grid.
2016-03-18 10:15:50 +01:00
Mitton 6ad56863d4 Grid translation - French 2016-03-18 06:15:37 +02:00
Mitton 2703fa7ea2 Grid translation - French 2016-03-18 06:12:44 +02:00
Shannon b3c6654d41 bumps version 2016-03-17 17:31:36 +01:00
Shannon 0071651621 fixes keyboard shortcut after refactor 2016-03-17 16:36:13 +01:00
Shannon Deminick 4dbc27f1fe Merge pull request #1178 from bjarnef/dev-U4-8163
U4-8163 - Don't set dirty on form for examine dashboard search
2016-03-17 11:31:36 +01:00
Shannon 3f8bbc2f02 Merge branch 'pynej-view-save-restore-cursor' into dev-v7 2016-03-17 11:29:29 +01:00
Shannon 999be9c578 Merge branch 'view-save-restore-cursor' of https://github.com/pynej/Umbraco-CMS into pynej-view-save-restore-cursor 2016-03-17 11:26:09 +01:00
Claus b36b1693dd Fixes broken regex. 2016-03-17 10:33:04 +01:00
Simon Busborg 99b2192ab7 Fixes U4-8181 It is not possible to scroll in an overlay in Chrome 49 on a Retina Mac
By removing animated -half-second fadeIn it resolves the issue where it's not possible to scroll in dialogs on a retina screen ¯\_(ツ)_/¯
2016-03-17 09:58:57 +01:00
Shannon 5230f55f44 moves attribute 2016-03-16 14:52:40 +01:00
Shannon f93fee28dd U4-8165 Ensure browsers are not caching service requests 2016-03-16 14:51:04 +01:00
Shannon Deminick fc7cfea4ad Merge pull request #1179 from umbraco/temp-U4-8175
U4-8175 - fix PropertyType.PropertyGroupId inconsistencies
2016-03-16 14:18:03 +01:00
Stephan bc5f651c64 U4-8154 - bugfix test 2016-03-16 13:46:51 +01:00
Stephan ecdca378c6 U4-8175 - fix PropertyType.PropertyGroupId inconsistencies 2016-03-16 13:41:58 +01:00
Stephan 4628c1f858 U4-8154 - bugfix test 2016-03-16 13:16:56 +01:00
Shannon Deminick 5af4d02f44 Merge pull request #1177 from umbraco/temp-U4-7109
U4-7109 - could not change language in Culture and Hostnames
2016-03-16 10:48:35 +01:00
Shannon 2f9b526465 Only apply preview auth if Umbraco is fully configured 2016-03-16 10:41:33 +01:00
Stephan 800e02bccf Bugfix model mapper for PropertyTypeDisplay 2016-03-16 10:19:06 +01:00
Shannon Deminick 693b0dba24 Merge pull request #1161 from umbraco/temp-U4-4219
U4-4219 Can't Preview protected pages
2016-03-16 10:18:06 +01:00
Stephan 2004f6a51e U4-8154 - bugfix 2016-03-16 10:10:31 +01:00
Claus f650b6238c Merge branch 'arknu-U4-8026' into dev-v7 2016-03-16 07:57:59 +01:00
Claus 7c179a7868 U4-8026 Fixes up unit tests 2016-03-16 07:56:41 +01:00
bjarnef 7a7e0edfa7 Don't set dirty on form for examine dashboard search 2016-03-15 23:59:11 +01:00
bjarnef 69adec1d68 Merge branch 'dev-v7' of https://github.com/bjarnef/Umbraco-CMS into dev-v7 2016-03-15 20:23:58 +01:00
Stephan 0cf6548f86 U4-7109 - could not change language in Culture and Hostnames 2016-03-15 17:26:05 +01:00
Sebastiaan Janssen 111ee66b60 Update ModelsBuilder dependency for the NuGet package 2016-03-15 17:15:39 +01:00
Stephan fedcd6f970 Merge pull request #1176 from umbraco/temp-U4-8168
U4-8168 Cannot re-order/move locked property types - such as the lock…
2016-03-15 16:29:57 +01:00
Stephan 8e82ff5450 Merge pull request #1173 from umbraco/temp-U4-8012
U4-8012 Generic properties tab disappears on the edit Member Type win…
2016-03-15 16:24:21 +01:00
Stephan 81459c3659 Merge pull request #1174 from umbraco/temp-U4-8065
U4-8065 Inherited from is empty - reverts 10617d1bd52bdac57534a7d7b8…
2016-03-15 16:08:26 +01:00
Rune Hem Strand 8907c9855b Merge pull request #1172 from umbraco/temp-U4-7185
Temp u4 7185
2016-03-15 16:02:47 +01:00
Stephan e1bf30ec26 Merge pull request #1175 from umbraco/temp-U4-8106
U4-8106 Content type inheritance can be broken by compositions
2016-03-15 15:53:37 +01:00
Shannon 6bb9c5b81c U4-8168 Cannot re-order/move locked property types - such as the locked/system member type properties 2016-03-15 15:43:21 +01:00
Shannon 6aafbfb245 U4-8106 Content type inheritance can be broken by compositions 2016-03-15 15:25:05 +01:00
Shannon d5fe8c11c8 U4-8065 Inherited from is empty - reverts 10617d1bd5, turns out this is why we needed that property value 2016-03-15 15:08:53 +01:00
Shannon 3fdb122e91 U4-8012 Generic properties tab disappears on the edit Member Type window after upgrade to 7.4 2016-03-15 14:44:03 +01:00
Shannon Deminick 710dda164f Merge pull request #1166 from umbraco/temp-U4-7708
U4-7708 Using a RTE Macro Partial Form (SurfaceController) & Doctype …
2016-03-15 13:57:27 +01:00
Claus 07d0d82bd1 Merge branch 'U4-8026' of git://github.com/arknu/Umbraco-CMS into arknu-U4-8026 2016-03-15 13:47:10 +01:00
Claus 91eb3ea59e Merge pull request #1152 from AndyButland/u4-7888
Fixed U4-7888 - Cannot change default template for document type
2016-03-15 13:43:07 +01:00
Rune Strand 096f1b6ff9 add selected state to umbFolderGrid 2016-03-15 13:18:48 +01:00
Rune Strand f24c0d3e7a Update umbBreadcrumb to use custom controller 2016-03-15 13:18:48 +01:00
Rune Hem Strand 104338c817 A little bit of foldergrid+ 2016-03-15 13:18:48 +01:00
Mads Rasmussen 568f098445 umbOverlay first draft 2016-03-15 13:18:48 +01:00
Mads Rasmussen f46d595f00 fix example on umbStickyBar 2016-03-15 13:18:48 +01:00
Mads Rasmussen 46826ad590 add docs for umbPagination 2016-03-15 13:18:48 +01:00
Mads Rasmussen a8bd34b77e add docs for umbMediaGrid 2016-03-15 13:18:48 +01:00
Mads Rasmussen 40774cfff2 rename umbContentGrid controller 2016-03-15 13:18:48 +01:00
Mads Rasmussen 5dde898205 change controller name on umbGenerateAlias 2016-03-15 13:18:48 +01:00
Mads Rasmussen 249287e101 fix umbKeyboardShortcutsOverview example 2016-03-15 13:18:48 +01:00
Mads Rasmussen 3e458e2ba6 add documentation for umbEmptyState 2016-03-15 13:18:48 +01:00
Mads Rasmussen 4f293a8be1 fix umbTooltip example 2016-03-15 13:18:48 +01:00
Mads Rasmussen 3b9d9ab8c4 change umbChildSelector controller name 2016-03-15 13:18:48 +01:00
Mads Rasmussen 83f875dadd fix umbConfirmAction example 2016-03-15 13:18:48 +01:00
Mads Rasmussen 89df81d3df update umbButtonGroup example to match newest code 2016-03-15 13:18:48 +01:00
Mads Rasmussen 2e4ee42c90 fix small issue with umbButton example 2016-03-15 13:18:48 +01:00
Mads Rasmussen a03858a726 fix examples in umbEditorHeader 2016-03-15 13:18:48 +01:00
Mads Rasmussen 253174d4b3 umbEditorSubHeader: move some example pieces to other directive examples to make it less overwhelming 2016-03-15 13:18:48 +01:00
Mads Rasmussen 947889fae6 update umbFooterContent directives example with a form element 2016-03-15 13:18:48 +01:00
Mads Rasmussen 7ee0b582dd update umbEditorFooter example with a form element 2016-03-15 13:18:48 +01:00
Mads Rasmussen 7bec4efc60 update umbEditorView with a better example 2016-03-15 13:18:48 +01:00
Mads Rasmussen 571d8086c8 update umbContentGrid docs to match latest directive changes 2016-03-15 13:18:48 +01:00
Rune Strand 8abeefe6bb Fix merge conflict 2016-03-15 13:18:48 +01:00
Mads Rasmussen 0aaf3eea02 added documentation for umbChildSelector 2016-03-15 13:18:48 +01:00
Mads Rasmussen 8fc84f9b09 added documentation to umbLockedField 2016-03-15 13:18:48 +01:00
Mads Rasmussen 493b98a771 added documentation to umbGenerateAlias 2016-03-15 13:18:48 +01:00
Mads Rasmussen 114a9b4d33 added documentation for umbFolderGrid 2016-03-15 13:18:48 +01:00
Mads Rasmussen 824b1e7c08 added documentation for umbContentGrid 2016-03-15 13:18:48 +01:00
Mads Rasmussen dfa9b297db added documentation for umbStickyBar 2016-03-15 13:18:48 +01:00
Mads Rasmussen adceb24651 added documentation for umbConfirmAction 2016-03-15 13:18:48 +01:00
Mads Rasmussen c7f1a1419a added documentation for umbTooltip 2016-03-15 13:18:48 +01:00
Mads Rasmussen 8878b5e21c added documentation for umbButtonGroup 2016-03-15 13:18:48 +01:00
Mads Rasmussen 6ebb1d1b4b added documentation for umbButton 2016-03-15 13:18:48 +01:00
Mads Rasmussen 583cd2d1e9 added documentation for sub header directives 2016-03-15 13:18:48 +01:00
Mads Rasmussen 86c6b01e73 added documentation for editor directives 2016-03-15 13:18:48 +01:00
Mads Rasmussen 1170e222e3 added umbBreadcrumbs documentation - first draft 2016-03-15 13:18:48 +01:00
Mads Rasmussen fe004db7d5 added umbLoadIndicator documentation - first draft 2016-03-15 13:18:48 +01:00
Mads Rasmussen 9e75ffb332 added umbKeyboardShortcutsOverview documentation - first draft 2016-03-15 13:18:48 +01:00
Mads Rasmussen d0bb6b7aa4 fix broken directives overview + set marker on deprecated directives 2016-03-15 13:18:48 +01:00
Claus c306f94a6a Merge pull request #1154 from pynej/fix-stylesheet-tree-sync
Fix for issue causing the entire stylesheets tree to reload when …
2016-03-15 12:46:59 +01:00
Claus 11b2ec89fd Merge pull request #1167 from umbraco/temp-U4-8154
U4-8154 - bugfix Sql query expressions parsing
2016-03-15 12:36:52 +01:00
Claus 89596f00f1 Merge pull request #1151 from arknu/icon-transparency
Fix transparency for image icons in the tray
2016-03-15 09:54:36 +01:00
Claus 4fa6e70e72 Merge pull request #1140 from jamescoxhead/U4-7746
U4-7746 - use flat icon in partial views tree
2016-03-15 09:22:18 +01:00
Warren Buckley a5a0a84d46 Merge pull request #1163 from umbraco/temp-U4-7767
U4-7767 List View Filter needs debounce - many requests to handler me…
2016-03-14 16:12:19 +00:00
Warren Buckley 839431e6fa Merge pull request #1170 from umbraco/temp-U4-8157
U4-8157 Right-click on root node returns console error when it doesn'…
2016-03-14 14:28:39 +00:00
Stephan 5369a6fc56 Upgrade ModelsBuilder to 3.0.1 2016-03-14 13:37:49 +01:00
Claus 8a078e258f U4-8157 Right-click on root node returns console error when it doesn't has any actions
Ensured we don't use throw to stop the program flow if no menuUrl is defined on the node. It is a likely scenario that some root node don't have right click actions so its better to handle this.
2016-03-14 12:15:15 +01:00
Sebastiaan Janssen fb42574c34 Revert "U4-5334 Richtext editor inserts extra p - tags to html output" - apparently it does just as much harm as it does good
This reverts commit 9ad3b6a337.
2016-03-12 21:02:05 +01:00
AndyButland e3411f7212 Provided a check that a language was selected when sending to translation such that a message is returned to the user rather than an unexpected error 2016-03-12 19:26:45 +01:00
AndyButland 64ad8f660f Fixed issue with misasigned task assignee on send to translation 2016-03-12 19:17:51 +01:00
Sebastiaan Janssen 9ad3b6a337 U4-5334 Richtext editor inserts extra p - tags to html output
#U4-5334 Fixed
2016-03-12 12:58:53 +01:00
Jeremy Pyne 91da14b0c6 Second fix for partial views. 2016-03-11 14:56:55 -05:00
Jeremy Pyne f361e286ed This minor fix will restore the editors cursor in CoreArea editor boxes when they save the item. There is a check included to prevent this behavior is the server level code changes the file for some reason as then the cursor location could act unpredictably, so instead we just let it reset to the beginning of the file. 2016-03-11 14:44:21 -05:00
Stephan 65b16fbfe5 U4-8154 - bugfix Sql query expressions parsing 2016-03-11 14:18:08 +01:00
Stephan 6ad2853bce Merge pull request #1165 from umbraco/temp-U4-7949
U4-7949 The task runner has completed YSOD when using the Umbraco Pac…
2016-03-10 18:29:08 +01:00
Shannon e60e4e52fc U4-7708 Using a RTE Macro Partial Form (SurfaceController) & Doctype Hijack Controller causes problem with submissions 2016-03-10 18:00:14 +01:00
Sebastiaan Janssen b2407eab98 Merge pull request #1107 from bjarnef/dev-v7-tinymce-font-icons
Change icons for richtext editor config
2016-03-10 17:47:46 +01:00
Shannon 778c7a836b Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2016-03-10 15:52:43 +01:00
Shannon 11f9cdead0 U4-6366 Issue assigning member roles on MemberService.Saved event 2016-03-10 15:52:34 +01:00
Sebastiaan Janssen a1076d5443 Merge pull request #1160 from umbraco/temp-U4-6438
U4-6438 - fix dynamic extension methods when type loading goes bad
2016-03-10 15:49:15 +01:00
Shannon 4a11bf68f3 U4-7949 The task runner has completed YSOD when using the Umbraco Package installer 2016-03-10 15:23:52 +01:00
Sebastiaan Janssen fa64e73a43 Merge pull request #1164 from umbraco/temp-U4-5797
U4-5797 - fix PublishedContentType cache refresh for compositions
2016-03-10 14:04:46 +01:00
Stephan adf3e2dfe0 U4-5797 - fix PublishedContentType cache refresh for compositions 2016-03-10 13:59:50 +01:00
Shannon c4c86cf5ce U4-7767 List View Filter needs debounce - many requests to handler method 2016-03-10 13:02:20 +01:00
Sebastiaan Janssen 479aba8e1d Fixes unit test.. in the correct branch this time 2016-03-10 11:47:51 +01:00
Sebastiaan Janssen effe7c1669 Fixes unit test 2016-03-10 11:20:44 +01:00
Shannon 0c474e2aba U4-7670 True/false fields on Macro Picker don't save their setting nor read existing setting. - another null check required. 2016-03-10 10:06:20 +01:00
Shannon Deminick 4f5b34cdfe Merge pull request #1162 from pynej/codemirror-js-error
Fix for missing doc.setLine() function breaking code mirror editor.
2016-03-10 09:58:16 +01:00
Warren Buckley 0cb7f220ea Merge pull request #1149 from umbraco/temp-U4-4700
U4-4700 List View Doesn't Respect User Permissions
2016-03-10 08:52:38 +00:00
Jeremy Pyne 0995b2cb5a Fix for missing doc.setLine() function breaking code mirror editor. 2016-03-09 14:55:15 -05:00
Shannon af1fe425a2 udpates ext method to specify an explicit marker stage, updates UmbracoDefaultOwinStartup to be more flexible with the methods to override. 2016-03-09 19:37:37 +01:00
Shannon 22385d40db U4-4219 Can't Preview protected pages 2016-03-09 17:35:50 +01:00
Stephan 1b37475144 U4-6438 - fix dynamic extension methods when type loading goes bad 2016-03-09 15:55:41 +01:00
Mads Rasmussen 87667ec2d1 Fixes: U4-8016 Pick only images from media 2016-03-08 20:56:24 +01:00
Shannon be0bacd895 Ensures all angular views are cache busted so browser cache is not an issue after upgrading. 2016-03-08 17:23:54 +01:00
Shannon a2564bd0c3 ensures that requests are only made for ids that haven't already been queried. 2016-03-08 16:18:33 +01:00
Shannon 402a5c9d56 fixes bool check 2016-03-08 15:57:59 +01:00
Shannon 2a2f22c7d9 fixes js null issue with boolean.controller 2016-03-08 15:53:45 +01:00
Shannon 372a768dca U4-4700 List view doesn't respect user permissions - makes the buttons show/hide based on the selected items instead of the current item. 2016-03-08 15:53:22 +01:00
Sebastiaan Janssen f6e48243a6 U4-8088 NuGet upgrade of UmbracoCms pacakage doesn't add ModelsBuilder keys to web.config 2016-03-08 13:39:35 +01:00
Warren Buckley 94ea677ec0 Merge pull request #1146 from umbraco/temp-U4-7641
U4-7641 - enable content type copy
2016-03-08 09:38:16 +00:00
Sebastiaan Janssen 55e7159f7d Forgot to remove them from the nuspec files 2016-03-08 10:35:57 +01:00
Sebastiaan Janssen 390a94e323 U4-8054 Issue with NuGet Uninstall.ps1 (running on updates)
#U4-8054 Fixed
2016-03-08 10:34:19 +01:00
Shannon Deminick 19fb920aa1 Merge pull request #1150 from umbraco/temp-U4-7823
U4-7823 - stop flooding the log with errors getting media 0
2016-03-07 17:58:49 +01:00
Shannon Deminick f35e1604ca Merge pull request #1141 from umbraco/temp-U4-8030
U4-8030 - Fix RenderModelBinder issue with surface
2016-03-07 17:53:31 +01:00
Shannon b9765c3bec fixes RenderModelBinder to use base implementation,adds unit tests 2016-03-07 17:52:28 +01:00
Shannon d5a57c505c adds RenderModelBinderTests 2016-03-07 16:53:57 +01:00
Shannon 5f365241a8 updates RenderModelBinder to simply check for IPublishedContent or IRenderModel 2016-03-07 16:29:40 +01:00
Shannon 9c121f0044 Fixes RenderModelBinder to inherit from DefaultModelBinder and use the default logic if the model in the route values is not IRenderModel 2016-03-07 16:26:30 +01:00
Shannon f13bc07ddc Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2016-03-07 15:13:41 +01:00
Shannon a707d23692 Allows for specifying explicit product names by overriding the property in MigrationStartupHander 2016-03-07 15:13:31 +01:00
Simon Busborg 0929b7d42c Fixes U4-8113 Styling for property labels affect package meta data labels 2016-03-07 14:55:18 +01:00
Simon Busborg 35a9272b68 Fixes U4-8036 Umbraco.MultiNodeTreePicker checkbox doesn't appear after selecting something from list view 2016-03-07 14:45:30 +01:00
Shannon Deminick 112453a032 Merge pull request #1144 from umbraco/temp-U4-8077
U4-8077 - ensure product name in migration event handlers
2016-03-07 14:09:29 +01:00
Simon Busborg bba7367ba6 Fixes U4-8058 Labels are changed to block-level elements 2016-03-07 12:12:35 +01:00
bjarnef 367073e02e Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-03-03 17:58:36 +01:00
Jeremy Pyne 83e679ba5e Fix for issue causing the entire stylesheets tree to reload when selecting a item. 2016-03-02 16:00:33 -05:00
Sebastiaan Janssen 05c35b22bd Merge pull request #1148 from umbraco/temp-U4-7040
U4-7040 - Fix bug with permissions cache refresh
2016-03-02 15:03:47 +01:00
AndyButland 1a4322eb48 Fix issue with database field check that led to default template for content type not being set 2016-02-29 09:04:50 +00:00
Asbjørn Riis-Knudsen 4d950fb4d4 Fix transparency for image icons in the tray 2016-02-28 17:40:58 +01:00
Stephan 0d191fb8bd U4-7823 - stop flooding the log with errors getting media 0 2016-02-26 11:35:24 +01:00
Mads Rasmussen f6318fb6f3 Merge pull request #1147 from lars-erik/fix-u4-8082-nested-forms-and-submit-bug
Fixes: U4-8082 New overlays post forms in IE / Edge
2016-02-26 10:08:51 +01:00
Warren Buckley c7a3efadb1 Remove debug JSON in the view 2016-02-25 21:09:12 +00:00
Warren Buckley 956425dfbf Now updated so the create button hides if we do not have the Create permission 'C' 2016-02-25 21:06:25 +00:00
Warren Buckley c616354522 After reading src code for contentEditorHelper.configureContentEditorButtons it makes the same assumption that if the publish action 'U' is present then the user can also unpublish aka 'Z' 2016-02-25 20:49:56 +00:00
Stephan 17b29357d4 U4-7040 - Fix bug with permissions cache refresh 2016-02-25 17:43:38 +01:00
Stephan 36246b96d4 Fix bug with permissions cache refresh 2016-02-25 17:39:34 +01:00
Stephan 7d8791ec86 Fix ActionButtonsResolver (need review) 2016-02-25 17:05:44 +01:00
Stephan f349a9ae3e U4-7641 - bugfix 2016-02-25 16:26:20 +01:00
Warren Buckley 2719e2c231 WIP - ListView that grabs the current nodes permission from the editorState & use a neater object to return to the view rather than the lovely Magic String CHARs. Need help understanding that I don't get all the permissions to be expected 2016-02-25 15:19:42 +00:00
Lars-Erik Aabech 57a766098d Removed nested form and changed buttons to type="button" + action instead of ng-submit on form. 2016-02-25 16:04:37 +01:00
Stephan dafde545b0 U4-7641 - bugfix + implement for media types 2016-02-25 16:02:04 +01:00
Stephan 610538261e U4-7641 - enable content type copy 2016-02-25 15:26:03 +01:00
Simon Busborg f78cb8a970 Merge pull request #1119 from jchurchley/dev-v7
Fixes U4-7963 Listview columns not evenly spaced in Chrome
2016-02-25 14:52:17 +01:00
Asbjørn Riis-Knudsen e8f84cfec0 Add parens around all BinaryExpressions to make sure that errors such U4-8026 do not happen 2016-02-25 12:20:58 +01:00
Sebastiaan Janssen def276de01 Merge pull request #1143 from umbraco/temp-U4-8027
U4-8027 - fix ApplicationContext request cache (was null cache)
2016-02-25 10:46:31 +01:00
Stephan 293b170a56 U4-8027 - fix ApplicationContext request cache (was null cache) 2016-02-24 14:16:48 +01:00
Stephan 9f7b82e20f U4-8077 - ensure product name in migration event handlers 2016-02-24 13:59:15 +01:00
Warren Buckley 6ba4efc416 Merge pull request #1142 from umbraco/temp-U4-7570
Temp u4 7570
2016-02-24 11:12:59 +00:00
Simon Busborg 981fb39af6 Fixed crop slider 2016-02-24 09:14:13 +01:00
Sebastiaan Janssen c64f6f894e U4-8024 Unable to use MvcBuildViews since 7.4.0 upgrade because 'umbraco.cms.presentation.create.controls.content' has been removed
Removes files for which the codebehind no longer exists
2016-02-23 17:23:55 +01:00
Simon Busborg 3e73c2da43 Fixed width of cropper 2016-02-23 16:31:10 +01:00
Mads Rasmussen 26a8d23039 Fixes: U4-8063 Content type editor: Keyboard shortcut overview should close on escape 2016-02-23 15:09:27 +01:00
Mads Rasmussen 2632ef740c Fixes: U4-7570 Hide image, focal point and remove link until image has loaded 2016-02-23 13:55:05 +01:00
Sebastiaan Janssen f024dba864 Merge pull request #1139 from umbraco/temp-U4-8017
U4-8017 - fix issues with MySql InitColumnTypeMap
2016-02-22 19:05:41 +01:00
Stephan 9758851a4b Fix SqlCeSyntaxProviderTests 2016-02-22 18:55:49 +01:00
Stephan 04b3532e9d U4-8030 - Fix RenderModelBinder issue with surface 2016-02-22 18:38:06 +01:00
Sebastiaan Janssen 38e56f0fea Might make the build server happy? 2016-02-22 17:57:44 +01:00
Sebastiaan Janssen 462baf91e4 Merge pull request #1137 from umbraco/temp-U4-7914
U4-7914 - add PublishedContentRequest.Preparing event
2016-02-22 17:45:50 +01:00
James Coxhead 01bcd3b623 Changed partial views icon to icon-article 2016-02-22 16:15:31 +00:00
James Coxhead 64fd95bd22 Updated tree icons for partial views and partial view macros 2016-02-22 16:13:25 +00:00
Stephan f1366c7d29 U4-8017 - fix issues with MySql InitColumnTypeMap 2016-02-19 13:33:11 +01:00
Warren Buckley baaa9340e4 Merge pull request #1131 from umbraco/temp-U4-7918
Fixes U4-7918 Make icon picker for document type and list views consistent
2016-02-19 12:03:27 +00:00
Mads Rasmussen 183a5b5c43 U4-7472: fix macro parameter column width 2016-02-19 09:52:29 +01:00
Mads Rasmussen 1a0c095f40 Merge pull request #932 from engern/MacroParamSortOrder
Fixes U4-7472 - Should be possible to sort macro parameters
2016-02-19 09:27:27 +01:00
Lesley b72d52bf90 Fix U4-8029
The div was too wide so description text was unreadable.
2016-02-18 17:16:01 +00:00
Stephan ffada74aa4 Improve RenderModelBinder error msg when same type, different assemblies 2016-02-18 16:04:45 +01:00
Mads Rasmussen f2fc70f731 Merge pull request #982 from abryukhov/patch-4
U4-7616 - Nodes sort dialog - additional date formats
2016-02-18 14:19:06 +01:00
Simon Busborg 866b0113e7 Fixes grunt break 2016-02-18 12:43:09 +01:00
Simon Busborg 06c49daca7 Merge branch 'dev-v7-login-retina-umbraco-logo' of git://github.com/bjarnef/Umbraco-CMS into bjarnef-dev-v7-login-retina-umbraco-logo
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/less/pages/login.less
2016-02-18 12:42:17 +01:00
Stephan 9293008b94 U4-7914 - add PublishedContentRequest.Preparing event 2016-02-18 11:36:48 +01:00
Mads Rasmussen dbb9386d22 Fixes: U4-7660 [7.4 Fix] Added a default value to the Umbaco.TrueFalse datatype. Thanks Jeremy Pyne 2016-02-18 11:20:04 +01:00
Mads Rasmussen 51ed441b85 Merge branch 'u4-5123' of https://github.com/AndyButland/Umbraco-CMS into AndyButland-u4-5123
# Conflicts:
#	src/Umbraco.Web/PropertyEditors/ListViewPropertyEditor.cs
2016-02-18 10:00:22 +01:00
Simon Busborg f566fec665 Merge branch 'Acentrage-U4-6700' into dev-v7 2016-02-17 15:26:51 +01:00
Mads Rasmussen 9d92781a97 Merge pull request #949 from kgiszewski/dev-v7
Fix u4-7534
2016-02-17 15:04:14 +01:00
Simon Busborg 123bfe5afe Fixed merge conflict 2016-02-17 14:31:30 +01:00
Shannon Deminick 3383d2a2ac Merge pull request #1135 from umbraco/temp-U4-7601
U4-7601 - filter published content by composition
2016-02-17 13:31:07 +01:00
Sebastiaan Janssen d9f38a20af Merge remote-tracking branch 'origin/7.3.8' into dev-v7 2016-02-17 13:28:52 +01:00
Sebastiaan Janssen a91669abc0 Fixes unit tests 2016-02-17 13:28:11 +01:00
Stephan cc6dfd0c55 U4-7601 - refactor PR, case insensitive 2016-02-17 12:55:40 +01:00
Stephan d4802fcef6 Merge branch 'feature/is-composed-of' of https://github.com/AndyButland/Umbraco-CMS into temp-U4-7601 2016-02-17 12:44:18 +01:00
Sebastiaan Janssen 35c3208b77 Fixes merge error 2016-02-17 12:30:42 +01:00
Shannon 3b9db8a92f tries fixing test for appveyor 2016-02-17 12:25:40 +01:00
Sebastiaan Janssen 7debe17c58 Merge remote-tracking branch 'origin/7.3.8' into dev-v7
Conflicts:
	src/Umbraco.Web.UI/packages.config
2016-02-17 11:56:24 +01:00
Sebastiaan Janssen 1bfc1229bd Merge pull request #1134 from umbraco/temp-738-U4-7996
Upgrade SQL CE to hopefully fix SQL CE data loss bug
2016-02-17 11:54:25 +01:00
Shannon f941456af6 fixes namespace 2016-02-17 11:48:32 +01:00
Shannon 828e88e6f2 Merge remote-tracking branch 'origin/7.3.8' into dev-v7
Conflicts:
	src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs
	src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs
2016-02-17 11:46:33 +01:00
Sebastiaan Janssen 3d6fd2d785 Updates to SQL CE 4.0.0.1 2016-02-17 11:44:33 +01:00
Shannon e56881abc6 adds unit tests for new ext methods 2016-02-17 11:21:15 +01:00
Shannon d32991c30a re-organizing some namespaces for tests 2016-02-17 10:59:48 +01:00
Shannon 8758f9649b checks for null before assigning culture 2016-02-17 10:57:20 +01:00
Sebastiaan Janssen 07902e840f Merge pull request #1133 from rodyvansambeek/patch-2
Changed allow upload whitelist to disallow extensions
2016-02-17 10:53:05 +01:00
rodyvansambeek e807ee7d64 Changed allow upload whitelist to disallow extensions
It is not possible to upload files in 7.4.0 with an extension different then the imageTypes in the Umbraco.Sys.ServerVariables.umbracoSettings.imageFileTypes, in the single upload this was changed after beta 7.4.0-beta1 to Umbraco.Sys.ServerVariables.umbracoSettings.disallowedUploadFiles. However the change was not added to the drag-drop-uploader. This fixes that.
2016-02-17 10:30:57 +01:00
Shannon 6f0f1ab2c3 fixes wrong constant used 2016-02-17 10:22:37 +01:00
Shannon cd28240172 Moves strings to constants, adds ControllerContextExtensions to get the UmbracoContext from the hierarchy of ControllerContext's, changes RenderModelBinder to use this method to get the UmbracoContext, changes UmbracoViewPageOfTModel to use this method to get the UmbracoContext, adds RouteDataExtensions to get the UmbracoContext from routedata, adds extension methods on the HttpContext to get the UmbracoContext from it.
Conflicts:
	src/Umbraco.Web/Mvc/RenderModelBinder.cs
2016-02-17 10:22:22 +01:00
Sebastiaan Janssen 85ca85fd42 Merge pull request #1129 from umbraco/temp-U4-7577
U4-7577 Remove dependency on UmbracoContext in CreateServiceContext /…
2016-02-16 17:32:38 +01:00
Sebastiaan Janssen 4a10178697 Merge pull request #1123 from umbraco/temp-U4-8000
U4-8000 NullReferenceException in RenderModelBinder when performing an async controller action
2016-02-16 17:28:49 +01:00
Shannon ccba7f14a0 tries fixing test for appveyor 2016-02-16 16:26:21 +01:00
Sebastiaan Janssen b797e0d0c5 Merge pull request #1127 from umbraco/temp-U4-7953
U4-7953 Creating Templates via new DocType have camelCased aliases, b…
2016-02-16 15:39:35 +01:00
Sebastiaan Janssen 8220b033f3 Merge pull request #1125 from umbraco/temp-U4-7954
U4-7954 Error upgrading database to 7.4.0 - [ FK_cmsPropertyTypeGroup…
2016-02-16 15:20:53 +01:00
Shannon 6fffc8b45e U4-7577 Remove dependency on UmbracoContext in CreateServiceContext / RequestLifespanMessagesFactory 2016-02-16 15:07:42 +01:00
James Coxhead 3ce2b0e6a0 Updated database installer to use new media picker instead of legacy picker 2016-02-16 14:06:08 +00:00
Shannon b550b3dde3 Merge remote-tracking branch 'origin/7.3.8' into dev-v7 2016-02-16 14:52:14 +01:00
Shannon 7002291c41 adds tests for ShouldAuthenticateRequest for app configurations 2016-02-16 14:51:15 +01:00
Shannon 51bbf7ceb5 U4-7494 Installation Fails for 7.3.3 - Intermittent - Value cannot be null. Parameter name: sqlSyntax 2016-02-16 14:22:59 +01:00
Shannon 93d9f09fcc U4-7953 Creating Templates via new DocType have camelCased aliases, but from the Template section have PascalCase aliases 2016-02-16 14:20:29 +01:00
Sebastiaan Janssen 42a68cb770 U4-7494 Installation Fails for 7.3.3 - Intermittent - Value cannot be null. Parameter name: sqlSyntax 2016-02-16 14:00:28 +01:00
Shannon 1c2dec00fc bumps version 2016-02-16 13:32:03 +01:00
Shannon fcea4c7fdd Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2016-02-16 13:30:21 +01:00
Shannon b6ef4bf6b5 Merge branch '7.3.8' into dev-v7
Conflicts:
	build/UmbracoVersion.txt
	src/SolutionInfo.cs
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Core/Umbraco.Core.csproj
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
2016-02-16 13:29:59 +01:00
Shannon 82297a6ff1 U4-7929 Label datatype strips leading zeros 2016-02-16 13:23:37 +01:00
Warren Buckley 3bf79f0a23 Merge pull request #1102 from umbraco/temp-U4-7837
Fixes: U4-7837 Changing document type should refresh the current node
2016-02-16 12:22:56 +00:00
Kevin Jump 95863ad618 Stylesheet RegEx to capture multi class properties
Change the RegEx in Stylesheet Helper to capture mutli element classes
as stylesheet properties (See U4-7160)

Previously single class names "H1", "P", ".test" all work but multi
".btn btn-default" fail - this change fixes that
2016-02-16 11:36:56 +00:00
Shannon 3f5aa3aa2b U4-7954 Error upgrading database to 7.4.0 - [ FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup_id ] doesn't exist 2016-02-16 12:17:21 +01:00
Shannon cc5ac1a84c bumps version 2016-02-16 11:57:10 +01:00
Shannon 6373add383 U4-7922 Preview is not working 2016-02-16 11:53:54 +01:00
Shannon 180099b718 U4-7890 XSLT Macro's not working - "Cannot use this obsoleted overload when the current provider" 2016-02-16 11:52:16 +01:00
Shannon 65f15125e1 U4-7939 - fix routes cache 2016-02-16 11:48:09 +01:00
Shannon f026201c68 fixes wrong constant used 2016-02-16 11:35:38 +01:00
Shannon 640b2c0ee0 Moves strings to constants, adds ControllerContextExtensions to get the UmbracoContext from the hierarchy of ControllerContext's, changes RenderModelBinder to use this method to get the UmbracoContext, changes UmbracoViewPageOfTModel to use this method to get the UmbracoContext, adds RouteDataExtensions to get the UmbracoContext from routedata, adds extension methods on the HttpContext to get the UmbracoContext from it. 2016-02-16 11:17:47 +01:00
Shannon Deminick bef7ad1196 Merge pull request #1120 from lars-erik/fix-silly-long-grid-translation
Grid translations
2016-02-16 10:12:02 +01:00
Shannon Deminick 33c6c8b473 Merge pull request #1121 from umbraco/temp-U4-7950
Fixes another reported bug for U4-7950
2016-02-16 10:05:09 +01:00
Sebastiaan Janssen 0a26e482aa Fixes another reported bug for U4-7950 2016-02-16 09:01:28 +01:00
Lars-Erik Aabech d0de54e2d3 Grid translations:
Fixed a silly long translation of "Add content".
Added missing keys.
Fixed a few spelling mistakes.
2016-02-16 08:50:07 +01:00
bjarnef 6effcdfce9 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-02-15 18:52:30 +01:00
Stephan cbdabaa3b1 Merge pull request #1118 from umbraco/temp-U4-7950
Use CultureInfo.CurrentCulture if UmbracoContext.PublishedContentRequ…
2016-02-15 15:21:00 +01:00
John Churchley 65c97040b3 Fix Chrome issue listview columns not evenly spaced
http://issues.umbraco.org/issue/U4-7963#
2016-02-15 12:17:13 +00:00
Simon Busborg a33d7da211 Fixes: U4-7945 Grid's Reorder bar covers content
http://issues.umbraco.org/issue/U4-7945
2016-02-15 12:55:44 +01:00
Sebastiaan Janssen f31b6d9c2c Use CultureInfo.CurrentCulture if UmbracoContext.PublishedContentRequest is not available 2016-02-15 08:27:07 +01:00
Sebastiaan Janssen 367c945b42 Merge pull request #1117 from s-moon/patch-1
Minor text changes.
2016-02-14 11:08:19 +01:00
Stephen Moon b962fcdbc3 Minor text changes. 2016-02-13 21:31:13 +00:00
Simon Busborg 0f8a13d60a 7 in a row instead of 8, bumped font-size on icons to 30 2016-02-12 10:17:42 +01:00
Simon Busborg 5c1502c806 Removes umb-control-group when no icons displayed 2016-02-12 10:13:30 +01:00
Simon Busborg 3cdebf4427 Fixes U4-7918 Make icon picker for document type and list views consistent 2016-02-12 09:38:37 +01:00
Shannon e4e7c18460 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2016-02-11 18:07:42 +01:00
Shannon 5f246c533c Fixes issue when there are zero instructions in the db table and we've never synced before, in this case it will always cold boot because it will never saved the last synced, in this scenario also the indexes will not build because we've cleared the collection before they can run. 2016-02-11 18:07:31 +01:00
Sebastiaan Janssen 5323543ec0 Merge pull request #1115 from abryukhov/patch-3
Update UI language ru.xml
2016-02-11 17:36:28 +01:00
Shannon d44542694b Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2016-02-11 17:31:49 +01:00
Shannon 016a14e5c7 Fixes the image cropper where if you don't have any crops, save an image to a content item, then when you go create a new crop in the data type it wouldn't show up on the front-end or in the back office. 2016-02-11 17:31:37 +01:00
Alexander Bryukhov 52f4dfec80 Update UI language ru.xml
According new keys added to the 7.4.0 nightly build 164 (models builder keys)
2016-02-11 22:29:33 +06:00
Sebastiaan Janssen 4f6e023d77 Make sure that everybody working on the source actually gets these assembly references in web.config 2016-02-11 17:11:02 +01:00
Shannon 5e46750cc4 nuspec and version 2016-02-11 16:34:15 +01:00
Shannon d028b133f5 nuspec updated with MB 2016-02-11 16:27:58 +01:00
Shannon ca6821104b updated to MB 3.0.0 final 2016-02-11 16:26:21 +01:00
Shannon 1ea8c8280c Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2016-02-11 15:54:10 +01:00
Shannon 17ff952b52 Fixes the URL creating for media in the back office to use an IMedia instead of published media (since it's not published yet at the time) 2016-02-11 15:54:00 +01:00
Sebastiaan Janssen b4f64975a2 Merge pull request #1113 from umbraco/temp-U4-7936
U4-7936 Clicking the Recycle Bin shows "Session expired" login screen
2016-02-11 15:48:24 +01:00
Sebastiaan Janssen 1d8a5cf795 Merge pull request #1114 from umbraco/temp-u4-7729
U4-7729 7.4.0-Beta Cannot drag and Drop PDF on Media Section
2016-02-11 15:34:41 +01:00
Shannon dccee93700 fixes up some null checks and fixes up some string null checks - casting XElement to (string) explicitly avoids null reference exceptions when the XElement isn't actually present. 2016-02-11 15:11:11 +01:00
Per Ploug efeafb4471 U4-7729 7.4.0-Beta Cannot drag and Drop PDF on Media Section 2016-02-11 14:42:47 +01:00
Shannon Deminick 496efde5b3 Merge pull request #1093 from jonrandahl/patch-1
Update PackagingService.cs
2016-02-11 14:18:23 +01:00
Shannon Deminick 2b56854652 Merge pull request #1112 from umbraco/temp-U4-7939
U4-7939 - fix routes cache
2016-02-11 14:15:13 +01:00
Shannon 04e1d8c2bd U4-7936 Clicking the Recycle Bin shows "Session expired" login screen 2016-02-11 14:04:14 +01:00
Simon Busborg c7a7dd6ed5 Fixed disabled buttons 2016-02-11 13:12:13 +01:00
Sebastiaan Janssen 1eedbba97a Merge pull request #920 from darrenferguson/dev-v7
change the text "Reload nodes" to just "Reload" my editors don't know…
2016-02-11 12:04:45 +01:00
Stephan d6b46e7e78 U4-7939 - fix routes cache 2016-02-11 11:53:03 +01:00
Shannon 1b03a8f06c Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2016-02-11 11:51:11 +01:00
Shannon 726bef1edf adds notes 2016-02-11 11:50:59 +01:00
Sebastiaan Janssen 33aa04bb2f Updates ImageProcessor.Web 2016-02-11 10:35:52 +01:00
Rune Hem Strand a79333080a Merge pull request #1111 from umbraco/U4-7933
Fixes issue U4-7933
2016-02-11 09:49:09 +01:00
Sebastiaan Janssen d1f513df69 Updates ImageProcessor 2016-02-10 17:09:40 +01:00
Shannon 54ddbc264d Fixes U4-7906 2016-02-10 16:39:05 +01:00
Shannon 89f6089f8e U4-7873 - fix GetCulture issue with languages 2016-02-10 16:22:06 +01:00
Shannon Deminick cf0b72fd77 Merge pull request #1026 from christofur/U4-7763
U4-7763 Fix - added mock and references required for 'dev' Grunt task
2016-02-10 15:54:59 +01:00
Niels Hartvig 2c32530701 Too fast, removed the extra amp 2016-02-10 15:47:52 +01:00
Niels Hartvig d6d945a96e Adds animationprocessmode=false to avoid issues with anim gifs 2016-02-10 15:46:18 +01:00
Shannon Deminick 4b6aee7fd9 Merge pull request #1109 from abryukhov/patch-3
Update UI language ru.xml
2016-02-10 15:44:42 +01:00
Niels Hartvig 8bbeeb2eaf Fixes issue 7933 2016-02-10 15:38:49 +01:00
Shannon Deminick 5648617809 Merge pull request #1098 from umbraco/temp-U4-7891
U4-7891 Image Cropper needs a property value converter to return a strongly typed model, json or a string when requested.
2016-02-10 15:32:55 +01:00
Shannon 0a33b37f2d Fixes issue with U4-7695 and not merging crop values with pre-values properly 2016-02-10 15:31:04 +01:00
Sebastiaan Janssen 157bf0d1eb Include modelsbuilder App_Plugins files in csproj so that the build actually includes them 2016-02-10 14:57:41 +01:00
Shannon 2721c5cb12 adds dynamic caseinsensitive support for the image cropper model 2016-02-10 14:54:00 +01:00
Shannon fd984bd613 Ensures media.Url works properly 2016-02-10 14:53:58 +01:00
Shannon fe0ed2ceea Adds some notes and ensures that the ImageCropperValueConverter shadows the correct one. 2016-02-10 14:53:57 +01:00
Shannon 0829bae5b2 Fixes TextStringValueConverter to include the text box and multi-textbox (since it's like that in the Core one that this overrides), adds new converter for Image cropper including ToString converter & custom type converter to convert from the strongly typed object to JObject, adds test to support this, adds equatable methods for the strongly typed model so it can be easily compared. Ensures that the webboot manager does not include the core value converter for image cropper. 2016-02-10 14:53:56 +01:00
Stephan c3c1567c2e Merge pull request #1100 from umbraco/temp-U4-7881
U4-7881 - fix errors with compositions
2016-02-10 14:53:45 +01:00
Shannon 4a8b59bdfa putting back in ContentTypeId on PropertyTypeDisplay, turns out this IS used when we remove a composition, we need to know which properties are related to which type. have also fixed another potential bug regarding compositions + generic properties, before we were not setting the ContentTypeId correct for a composition property type on the generic properties tab. 2016-02-10 14:34:33 +01:00
Shannon af543c56ec moves model to correct namespace 2016-02-10 13:31:36 +01:00
Claus 4113def0b6 Fixes: U4-7881 version 7.4 beta - cannot add composition doctype to a doctype that has already been saved 2016-02-10 13:08:36 +01:00
Shannon Deminick c346e62176 Merge pull request #1108 from umbraco/temp-U4-7799
Fixes: U4-7799 ModelsBuilder button in Content Type Editor should sav…
2016-02-10 13:05:38 +01:00
Sebastiaan Janssen 94fdbb1983 U4-7669 Update Newtonsoft.Json dependency to v8.0.1 from v6.0.5 2016-02-10 13:04:50 +01:00
Shannon f32e688c1a Fixes the MB re-generate button - this will only be shown when the models are out of date. 2016-02-10 13:04:04 +01:00
Mads Rasmussen 0303196f42 show Ulog error message when models builder fails 2016-02-10 11:47:01 +01:00
Mads Rasmussen c8faf17017 Fixes: U4-7799 ModelsBuilder button in Content Type Editor should save the current content type 2016-02-10 11:47:00 +01:00
Sebastiaan Janssen b2cba310b9 U4-7720 Media grid doesn't display preview for animated gif
In preparation of an updated ImageProcessor build, everything that displays animated gifs in the backoffice can run into this issue, so we show the first frame only everywhere (better than just a broken image)
2016-02-10 11:39:00 +01:00
Sebastiaan Janssen 95522afda8 Merge pull request #1110 from umbraco/temp-U4-7925
U4-7925 Add dependency injection to Umbraco.Web.Trees.TreeController*
2016-02-10 10:57:15 +01:00
Shannon 1b84e33392 reinstall the RC2 version 2016-02-10 10:43:41 +01:00
Shannon 065ed5ed78 updates nuspec 2016-02-10 10:28:57 +01:00
Shannon 9e931b84db U4-7925 Add dependency injection to Umbraco.Web.Trees.TreeController* 2016-02-10 10:26:09 +01:00
Shannon be449a96f7 updates to MB rc2 2016-02-10 10:26:08 +01:00
Alexander Bryukhov a22bfb927a Update UI language ru.xml
According new keys added to the 7.4.0 nightly build 162
2016-02-09 22:18:11 +06:00
Sebastiaan Janssen 5b92b30f64 Don't include the uninstall file in nuspec, it's missing so the package won't build 2016-02-09 17:16:04 +01:00
Sebastiaan Janssen 5e8200ecb2 U4-7909 7.4-rc1 is missing references because it's using portable class libraries now
#U4-7909 Fixed
2016-02-09 17:10:43 +01:00
Sebastiaan Janssen 9b5ea3da21 Can't have an uninstall as it runs during Update-Package, removing configuration settings like umbracoConfigurationStatus triggering the fresh install screen all user settings are also reverted :/ 2016-02-09 17:10:14 +01:00
Sebastiaan Janssen d495b96434 U4-7924 NuGet web.config transform changes targetFramework 2016-02-09 16:29:20 +01:00
Sebastiaan Janssen 79edf81434 Just whitespace, formatting document 2016-02-09 16:00:02 +01:00
Sebastiaan Janssen b3620f1ca4 U4-7924 NuGet web.config transform removes <codedom>
#U4-7924 Fixed
2016-02-09 15:39:48 +01:00
Stephan b6a9734755 Fix ModelsBuilder integration 2016-02-09 11:46:26 +01:00
Shannon c4cedaddd2 Merge remote-tracking branch 'origin/master-v7' into dev-v7 2016-02-09 11:00:57 +01:00
Shannon b5a2b3dbbd U4-7922 Preview is not working 2016-02-09 10:56:15 +01:00
Mads Rasmussen dc4266852f Fixes: U4-7915 7.4 RC1: Cannot change grid background 2016-02-09 09:57:41 +01:00
Simon Busborg 881e8daafd Merge pull request #1104 from abryukhov/patch-3
Update UI language ru.xml
2016-02-08 18:51:20 +01:00
bjarnef 5176b68935 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7-tinymce-font-icons 2016-02-08 15:07:36 +01:00
bjarnef 0bfc5f1272 Change icons in tinymce config 2016-02-08 15:07:16 +01:00
Claus 54c1d25296 Fixes: U4-6407 Change Document Type feature on a node doesn't support compositions 2016-02-08 14:39:16 +01:00
Mads Rasmussen 624d3a9b82 fixes: U4-7905 val-highlight directive not highlighting error fields (red border) in 7.4.0 2016-02-08 13:35:59 +01:00
Mads Rasmussen d46d23b372 Fixes: U4-7732 Grid changes do not trigger Unsaved Changes notification 2016-02-08 12:07:45 +01:00
Mads Rasmussen aeba68782c fixes: U4-7903 Using shortcut for "add property" removes "add property"-field for other tabs in document type editor && U4-7904 Add property using shortcut - submit button text is missing 2016-02-08 10:54:58 +01:00
Mads Rasmussen ac60c63104 Fixes: U4-7900 The new content type editor: If you hit save while it generates an alias, the alias will be generatingAlias 2016-02-08 10:20:09 +01:00
Claus 6e0e48b6e4 Merge pull request #1103 from arknu/U4-7819
U4-7819: Use correct messages when saving Media and Member types
2016-02-08 09:24:42 +01:00
Alexander Bryukhov 0ea15ae22e Update UI language ru.xml
According new / changed keys of 7.4 nightly build 161
2016-02-07 11:37:06 +06:00
Asbjørn Riis-Knudsen 54548ffc68 U4-7819: Use correct messages when saving Media and Member types 2016-02-06 17:34:36 +01:00
bjarnef 39c18d4201 Merge branch 'dev-v7' of https://github.com/bjarnef/Umbraco-CMS into dev-v7 2016-02-05 15:54:48 +01:00
Claus fdc50f0635 Merge pull request #1101 from KevinJump/dev-v7-GetContent/MediaContainer-Fix
Fix GetContentTypeContainer and GetMediaTypeContainer
2016-02-05 15:15:56 +01:00
bjarnef 66ea8ae604 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-02-05 14:55:53 +01:00
Claus 44f2a9e96f Fixes: U4-7837 Changing document type should refresh the current node 2016-02-05 14:37:01 +01:00
Kevin Jump 11743ea322 Fix GetContentTypeContainer and GetMediaTypeContainer to use correct guid
updated to use DocumentTypeContainerGuid,  MediaTypeContainerGuid
contstants in calls.
2016-02-05 13:20:10 +00:00
Simon Busborg 4d74ec7785 Makes editor types tabs accessible. 2016-02-05 11:49:41 +01:00
Sebastiaan Janssen aa704a2065 Umbraco.ModelsBuilder.AspNet.dll is no longer needed 2016-02-05 11:28:12 +01:00
Mads Rasmussen 08844ea098 close user dialog when clicking on edit, history links and logout 2016-02-05 11:08:34 +01:00
Claus 3449b1efd3 Toggle password fields after successfully changing the password. 2016-02-05 10:43:37 +01:00
Claus 00d012162f Added a bunch of missing translations in user overlay. 2016-02-05 10:38:15 +01:00
bjarnef 6fc794ca2e Merge branch 'dev-v7' of https://github.com/bjarnef/Umbraco-CMS into dev-v7 2016-02-03 14:42:14 +01:00
Jon R. Humphrey 8b4d34a1e8 Update PackagingService.cs
I've made the changes to the code after running into the "sequence contains no matching element" error in my Starter Kit package install. We knew that there were no calls to .First()., .Last(), or .Single() in our code based on search results and checking for this call, however we were able to deduce that the issue was that we were including a new ImageCropper DataType without values based on Jeavon's [example:] [https://umbraco.com/follow-us/blog-archive/2014/5/30/developing-a-website-with-responsive-images-using-the-umbraco-v714-image-cropper/]

I know it's a simple fix but if it helps anyone else not run into the same thing then that's perfect!

Thank you for all your hard work on Umbraco, maybe someday I can do more!
2016-02-03 13:21:36 +00:00
bjarnef 4bcee1df71 Change property to maximum 2016-02-03 02:42:47 +01:00
bjarnef 8e2716d300 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7-U4-6425 2016-02-03 02:29:30 +01:00
bjarnef b8c7b09d25 Update styles + adjust sort of table row 2016-02-03 02:29:21 +01:00
bjarnef 741057b7d6 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7-U4-6425 2016-02-02 15:21:34 +01:00
bjarnef 769b74afef Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7-U4-6425 2016-02-02 15:15:49 +01:00
bjarnef 6d4364a8b9 Modify sortable table row 2016-02-02 03:47:10 +01:00
bjarnef efb7bc7689 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7-U4-6425 2016-02-01 22:02:42 +01:00
bjarnef 6536286ffa Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7-U4-6425 2016-02-01 13:34:22 +01:00
bjarnef 6f07898979 Max config adjustments 2016-02-01 02:13:05 +01:00
bjarnef 7cf4c33d15 Fix max number in config and other adjustments 2016-02-01 01:52:51 +01:00
bjarnef d75ebed53d Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7-U4-6425 2016-01-31 14:57:08 +01:00
bjarnef 3136981043 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7-U4-6425 2016-01-28 20:05:33 +01:00
bjarnef 893ca14859 Config for max items 2016-01-28 01:01:06 +01:00
bjarnef df958223b0 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-01-26 18:17:00 +01:00
bjarnef 1217d9f0b3 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-01-24 23:25:29 +01:00
bjarnef 1301897f39 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-01-22 22:02:51 +01:00
bjarnef 6d34fe416d Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-01-21 20:38:52 +01:00
bjarnef a884ece8b1 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-01-21 18:15:50 +01:00
bjarnef 0ffcc9b889 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-01-20 19:21:58 +01:00
bjarnef ee3131b63d Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-01-19 21:03:42 +01:00
bjarnef 4fd7182388 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2016-01-19 20:56:36 +01:00
Chris Perks 698617dc60 Added mock for externalLoginInfo, and dependency references required to run 'dev' Grunt task 2016-01-18 14:41:35 +00:00
Alexander Bryukhov ae85b7bf2b Nodes sort dialog - adding date formats
Adding dates processing for 'dd.MM.yyyy' formats
2015-12-28 23:00:08 +06:00
AndyButland b52c480da3 Added IPublishedContent extension method for filtering nodes based on composition alias
Created unit test for IsComposedOf
2015-12-22 16:27:12 +01:00
kgiszewski dada91f006 Fix u4-7534 2015-12-14 13:35:46 -05:00
engern 348694d9d4 Use same color as the rest 2015-11-29 12:22:22 +01:00
engern 855e3b3dcc Add the possibility to sort the macro parameters 2015-11-29 12:06:19 +01:00
engern 5a8ea4aa41 Merge branch 'dev-v7' of https://github.com/engern/Umbraco-CMS into dev-v7 2015-11-29 09:38:36 +01:00
engern 4bd465f666 Merge remote-tracking branch 'refs/remotes/umbraco/dev-v7' into dev-v7 2015-11-29 09:38:20 +01:00
Tommy Enger ad591c07cf Merge pull request #1 from umbraco/dev-v7
Update from original
2015-11-29 09:37:54 +01:00
Darren Ferguson 1cd00cb6f6 change the text "Reload nodes" to just "Reload" my editors don't know what a node is! 2015-11-20 18:11:13 +00:00
bjarnef cd3aaa47ca Add retina version of Umbraco logo in login screen 2015-11-19 00:25:05 +01:00
AndyButland a05cc03254 Allows position of the list view child items tab to be positioned within the tab list 2015-11-15 21:18:21 +01:00
AndyButland af244917f6 Fixed issue with ordering by custom property from inherited or composed doc type 2015-06-14 11:24:03 +02:00
AndyButland 7008d6b2fb Fix to issue with ordering by custom date field 2015-06-13 00:15:51 +02:00
AndyButland a1ae0f70bb Moved custom column list view order by sql variations into syntax providers 2015-06-12 09:15:36 +02:00
AndyButland 58f2694a90 Removed option to sort by media last edited date as currently only base table fields can be sorted and this isn't one. Trying to do so currently triggers an error. 2015-06-12 09:15:26 +02:00
AndyButland b9ff327536 Removed ability to sort member list view system fields other than those on the base table (others aren't handled so error) 2015-06-12 09:15:12 +02:00
AndyButland 5954c370ed Fixed issue with sorting on default member list view column of username 2015-06-12 09:15:05 +02:00
AndyButland 968927d472 Enabled sorting for custom columns on list view 2015-06-12 09:14:47 +02:00
603 changed files with 18133 additions and 17346 deletions
+141 -134
View File
@@ -1,134 +1,141 @@
*.obj
*.pdb
*.user
*.aps
*.pch
*.vspscc
.DS_Store
._.DS_Store
[Bb]in
[Db]ebug*/
obj/
[Rr]elease*/
_ReSharper*/
_NCrunch_*/
*.ncrunchsolution
*.ncrunchsolution.user
*.ncrunchproject
*.crunchsolution.cache
[Tt]est[Rr]esult*
[Bb]uild[Ll]og.*
*.[Pp]ublish.xml
*.suo
[sS]ource
[sS]andbox
umbraco.config
*.vs10x
App_Data/TEMP/*
[Uu]mbraco/[Pp]resentation/[Uu]mbraco/[Pp]lugins/*
[Uu]mbraco/[Pp]resentation/[Uu]ser[Cc]ontrols/*
[Uu]mbraco/[Pp]resentation/[Ss]cripts/*
[Uu]mbraco/[Pp]resentation/[Ff]onts/*
[Uu]mbraco/[Pp]resentation/[Cc]ss/*
src/Umbraco.Web.UI/[Cc]ss/*
src/Umbraco.Web.UI/App_Code/*
src/Umbraco.Web.UI/App_Data/*
src/Umbraco.Tests/App_Data/*
src/Umbraco.Web.UI/[Mm]edia/*
src/Umbraco.Web.UI/[Mm]aster[Pp]ages/*
src/Umbraco.Web.UI/[Mm]acro[Ss]cripts/*
!src/Umbraco.Web.UI/[Mm]acro[Ss]cripts/[Ww]eb.[Cc]onfig
src/Umbraco.Web.UI/[Xx]slt/*
src/Umbraco.Web.UI/[Ii]mages/*
src/Umbraco.Web.UI/[Ss]cripts/*
src/Umbraco.Web.UI/Web.*.config.transformed
umbraco/presentation/umbraco/plugins/uComponents/uComponentsInstaller.ascx
umbraco/presentation/packages/uComponents/MultiNodePicker/CustomTreeService.asmx
_BuildOutput/*
*.ncrunchsolution
build/UmbracoCms.AllBinaries*zip
build/UmbracoCms.WebPI*zip
build/UmbracoCms*zip
build/UmbracoExamine.PDF*zip
build/*.nupkg
src/Umbraco.Tests/config/applications.config
src/Umbraco.Tests/config/trees.config
src/Umbraco.Web.UI/web.config
*.orig
src/Umbraco.Tests/config/404handlers.config
src/Umbraco.Web.UI/[Vv]iews/*.cshtml
src/Umbraco.Web.UI/[Vv]iews/*.vbhtml
src/Umbraco.Tests/[Cc]onfig/umbracoSettings.config
src/Umbraco.Web.UI/[Vv]iews/*
src/packages/
src/packages/repositories.config
src/Umbraco.Web.UI/[Ww]eb.config
*.transformed
webpihash.txt
node_modules
src/Umbraco.Web.UI/[Uu]mbraco/[Ll]ib/*
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/umbraco.*
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/routes.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/app.dev.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/loader.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/loader.dev.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/main.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/app.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.panel.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.palettes.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.loader.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.front.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.config.js
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.js
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.css
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.html
src/Umbraco.Web.UI/[Uu]mbraco/[Aa]ssets/*
src/Umbraco.Web.UI.Client/[Bb]uild/*
src/Umbraco.Web.UI.Client/[Bb]uild/[Bb]elle/
src/Umbraco.Web.UI/[Uu]ser[Cc]ontrols/
build/_BuildOutput/
src/Umbraco.Web.UI.Client/src/[Ll]ess/*.css
tools/NDepend/
src/Umbraco.Web.UI/App_Plugins/*
src/*.psess
src/*.vspx
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/routes.js.*
NDependOut/*
*.ndproj
QueryResult.htm
*.ndproj
src/Umbraco.Web.UI/[Uu]mbraco/[Aa]ssets/*
src/Umbraco.Web.UI/[Uu]mbraco/[Ll]ib/*
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.html
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.js
src/Umbraco.Web.UI/[Cc]onfig/appSettings.config
src/Umbraco.Web.UI/[Cc]onfig/connectionStrings.config
src/Umbraco.Web.UI/umbraco/plugins/*
src/Umbraco.Web.UI/umbraco/js/init.js
build/ApiDocs/*
build/ApiDocs/Output/*
src/Umbraco.Web.UI.Client/bower_components/*
/src/Umbraco.Web.UI/Umbraco/preview
#Ignore Rule for output of generated documentation files from Grunt docserve
src/Umbraco.Web.UI.Client/docs/api
src/*.boltdata/
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.loader.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.palettes.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.panel.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.config.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.front.js
src/umbraco.sln.ide/*
build/UmbracoCms.*/
src/.vs/
src/Umbraco.Web.UI/umbraco/js/install.loader.js
*.obj
*.pdb
*.user
*.aps
*.pch
*.vspscc
.DS_Store
._.DS_Store
[Bb]in
[Db]ebug*/
obj/
[Rr]elease*/
_ReSharper*/
_NCrunch_*/
*.ncrunchsolution
*.ncrunchsolution.user
*.ncrunchproject
*.crunchsolution.cache
[Tt]est[Rr]esult*
[Bb]uild[Ll]og.*
*.[Pp]ublish.xml
*.suo
[sS]ource
[sS]andbox
umbraco.config
*.vs10x
App_Data/TEMP/*
[Uu]mbraco/[Pp]resentation/[Uu]mbraco/[Pp]lugins/*
[Uu]mbraco/[Pp]resentation/[Uu]ser[Cc]ontrols/*
[Uu]mbraco/[Pp]resentation/[Ss]cripts/*
[Uu]mbraco/[Pp]resentation/[Ff]onts/*
[Uu]mbraco/[Pp]resentation/[Cc]ss/*
src/Umbraco.Web.UI/[Cc]ss/*
src/Umbraco.Web.UI/App_Code/*
src/Umbraco.Web.UI/App_Data/*
src/Umbraco.Tests/App_Data/*
src/Umbraco.Web.UI/[Mm]edia/*
src/Umbraco.Web.UI/[Mm]aster[Pp]ages/*
src/Umbraco.Web.UI/[Mm]acro[Ss]cripts/*
!src/Umbraco.Web.UI/[Mm]acro[Ss]cripts/[Ww]eb.[Cc]onfig
src/Umbraco.Web.UI/[Xx]slt/*
src/Umbraco.Web.UI/[Ii]mages/*
src/Umbraco.Web.UI/[Ss]cripts/*
src/Umbraco.Web.UI/Web.*.config.transformed
umbraco/presentation/umbraco/plugins/uComponents/uComponentsInstaller.ascx
umbraco/presentation/packages/uComponents/MultiNodePicker/CustomTreeService.asmx
_BuildOutput/*
*.ncrunchsolution
build/UmbracoCms.AllBinaries*zip
build/UmbracoCms.WebPI*zip
build/UmbracoCms*zip
build/UmbracoExamine.PDF*zip
build/*.nupkg
src/Umbraco.Tests/config/applications.config
src/Umbraco.Tests/config/trees.config
src/Umbraco.Web.UI/web.config
*.orig
src/Umbraco.Tests/config/404handlers.config
src/Umbraco.Web.UI/[Vv]iews/*.cshtml
src/Umbraco.Web.UI/[Vv]iews/*.vbhtml
src/Umbraco.Tests/[Cc]onfig/umbracoSettings.config
src/Umbraco.Web.UI/[Vv]iews/*
src/packages/
src/packages/repositories.config
src/Umbraco.Web.UI/[Ww]eb.config
*.transformed
webpihash.txt
node_modules
src/Umbraco.Web.UI/[Uu]mbraco/[Ll]ib/*
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/umbraco.*
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/routes.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/app.dev.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/loader.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/loader.dev.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/main.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/app.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.panel.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.palettes.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.loader.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.front.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.config.js
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.js
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.css
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.html
src/Umbraco.Web.UI/[Uu]mbraco/[Aa]ssets/*
src/Umbraco.Web.UI.Client/[Bb]uild/*
src/Umbraco.Web.UI.Client/[Bb]uild/[Bb]elle/
src/Umbraco.Web.UI/[Uu]ser[Cc]ontrols/
build/_BuildOutput/
src/Umbraco.Web.UI.Client/src/[Ll]ess/*.css
tools/NDepend/
src/Umbraco.Web.UI/App_Plugins/*
src/*.psess
src/*.vspx
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/routes.js.*
NDependOut/*
*.ndproj
QueryResult.htm
*.ndproj
src/Umbraco.Web.UI/[Uu]mbraco/[Aa]ssets/*
src/Umbraco.Web.UI/[Uu]mbraco/[Ll]ib/*
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.html
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.js
src/Umbraco.Web.UI/[Cc]onfig/appSettings.config
src/Umbraco.Web.UI/[Cc]onfig/connectionStrings.config
src/Umbraco.Web.UI/umbraco/plugins/*
src/Umbraco.Web.UI/umbraco/js/init.js
build/ApiDocs/*
build/ApiDocs/Output/*
src/Umbraco.Web.UI.Client/bower_components/*
/src/Umbraco.Web.UI/Umbraco/preview
#Ignore Rule for output of generated documentation files from Grunt docserve
src/Umbraco.Web.UI.Client/docs/api
src/*.boltdata/
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.loader.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.palettes.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.panel.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.config.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.front.js
src/umbraco.sln.ide/*
build/UmbracoCms.*/
src/.vs/
src/Umbraco.Web.UI/umbraco/js/install.loader.js
src/Umbraco.Tests/media
tools/docfx/*
apidocs/_site/*
apidocs/api/*
build/docs.zip
build/ui-docs.zip
build/csharp-docs.zip
+6 -6
View File
@@ -13,13 +13,13 @@ If you're interested in making changes to Belle make sure to read the [Belle Rea
## Umbraco - the simple, flexible and friendly ASP.NET CMS ##
**More than 177,000 sites trust Umbraco**
**More than 350,000 sites trust Umbraco**
For the first time on the Microsoft platform a free user and developer friendly CMS that makes it quick and easy to create websites - or a breeze to build complex web applications. Umbraco has award-winning integration capabilities and supports ASP.NET MVC or Web Forms, including User and Custom Controls, out of the box. It's a developers dream and your users will love it too.
For the first time on the Microsoft platform, there is a free user and developer friendly CMS that makes it quick and easy to create websites - or a breeze to build complex web applications. Umbraco has award-winning integration capabilities and supports ASP.NET MVC or Web Forms, including User and Custom Controls, out of the box. It's a developer's dream and your users will love it too.
Used by more than 177,000 active websites including [http://daviscup.com](http://daviscup.com), [http://heinz.com](http://heinz.com), [http://peugeot.com](http://peugeot.com), [http://www.hersheys.com/](http://www.hersheys.com/) and **The Official ASP.NET and IIS.NET website from Microsoft** ([http://asp.net](http://asp.net) / [http://iis.net](http://iis.net)) you can be sure that the technology is proven, stable and scales.
Used by more than 350,000 active websites including [http://daviscup.com](http://daviscup.com), [http://heinz.com](http://heinz.com), [http://peugeot.com](http://peugeot.com), [http://www.hersheys.com/](http://www.hersheys.com/) and **The Official ASP.NET and IIS.NET website from Microsoft** ([http://asp.net](http://asp.net) / [http://iis.net](http://iis.net)), you can be sure that the technology is proven, stable and scales.
To view more examples please visit [http://umbraco.com/why-umbraco/#caseStudies](http://umbraco.com/why-umbraco/#caseStudies)
To view more examples, please visit [http://umbraco.com/why-umbraco/#caseStudies](http://umbraco.com/why-umbraco/#caseStudies)
## Downloading ##
@@ -35,6 +35,6 @@ If you want to contribute back to Umbraco you should check out our [guide to con
## Found a bug? ##
Another way you can contribute to Umbraco is by providing issue reports, for information on how to submit an issue report refer to our [online guide for reporting issues](http://our.umbraco.org/contribute/report-an-issue-or-request-a-feature).
Another way you can contribute to Umbraco is by providing issue reports. For information on how to submit an issue report refer to our [online guide for reporting issues](http://our.umbraco.org/contribute/report-an-issue-or-request-a-feature).
To view existing issues please visit [http://issues.umbraco.org](http://issues.umbraco.org)
To view existing issues, please visit [http://issues.umbraco.org](http://issues.umbraco.org).
+18
View File
@@ -0,0 +1,18 @@
apiRules:
- include:
uidRegex: ^Umbraco\.Core
- exclude:
uidRegex: ^umbraco\.Web\.org
- include:
uidRegex: ^Umbraco\.Web
- exclude:
hasAttribute:
uid: System.ComponentModel.EditorBrowsableAttribute
ctorArguments:
- System.ComponentModel.EditorBrowsableState.Never
- exclude:
uidRegex: ^umbraco\.
- exclude:
uidRegex: ^CookComputing\.
- exclude:
uidRegex: ^.*$
+75
View File
@@ -0,0 +1,75 @@
{
"metadata": [
{
"src": [
{
"files": [
"Umbraco.Core/Umbraco.Core.csproj",
"Umbraco.Web/Umbraco.Web.csproj"
],
"exclude": [
"**/obj/**",
"**/bin/**",
"_site/**"
],
"cwd": "../src"
}
],
"dest": "../apidocs/api",
"filter": "../apidocs/docfx.filter.yml"
}
],
"build": {
"content": [
{
"files": [
"api/**.yml",
"api/index.md"
]
},
{
"files": [
"articles/**.md",
"articles/**/toc.yml",
"toc.yml",
"*.md"
],
"exclude": [
"obj/**",
"_site/**"
]
}
],
"resource": [
{
"files": [
"images/**"
],
"exclude": [
"obj/**",
"_site/**"
]
}
],
"overwrite": [
{
"files": [
"**.md"
],
"exclude": [
"obj/**",
"_site/**"
]
}
],
"globalMetadata": {
"_appTitle": "Umbraco c# Api docs",
"_enableSearch": true,
"_disableContribution": false
},
"dest": "_site",
"template": [
"default", "umbracotemplate"
]
}
}
+7
View File
@@ -0,0 +1,7 @@
# Umbraco c# API reference
## Quick Links:
### [Umbraco.Core](api/Umbraco.Core.html) docs
### [Umbraco.Web](api/Umbraco.Web.html) docs
+5
View File
@@ -0,0 +1,5 @@
- name: Umbraco.Core Documentation
href: https://our.umbraco.org/apidocs/csharp/api/Umbraco.Core.html
- name: Umbraco.Web Documentation
href: https://our.umbraco.org/apidocs/csharp/api/Umbraco.Web.html
@@ -0,0 +1,257 @@
{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
{{^_disableContribution}}
{{#sourceurl}}<a href="{{sourceurl}}" class="btn btn-primary pull-right mobile-hide">{{__global.viewSource}}</a>{{/sourceurl}}
{{/_disableContribution}}
<h1 id="{{id}}" data-uid="{{uid}}">{{>partials/title}}</h1>
<div class="markdown level0 summary">{{{summary}}}</div>
<div class="markdown level0 conceptual">{{{conceptual}}}</div>
{{#inheritance.0}}
<div class="inheritance">
<h5>{{__global.inheritance}}</h5>
{{#inheritance}}
<div class="level{{index}}">{{{specName.0.value}}}</div>
{{/inheritance}}
<div class="level{{item.level}}"><span class="xref">{{item.name.0.value}}</span></div>
</div>
{{/inheritance.0}}
<h6><strong>{{__global.namespace}}</strong>:{{namespace}}</h6>
<h6><strong>{{__global.assembly}}</strong>:{{assemblies.0}}.dll</h6>
<h5 id="{{id}}_syntax">{{__global.syntax}}</h5>
<div class="codewrapper">
<pre><code class="lang-{{_lang}} hljs">{{syntax.content.0.value}}</code></pre>
</div>
{{#syntax.parameters.0}}
<h5 class="parameters">{{__global.parameters}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.name}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
{{/syntax.parameters.0}}
{{#syntax.parameters}}
<tr>
<td>{{{type.specName.0.value}}}</td>
<td><em>{{{id}}}</em></td>
<td>{{{description}}}</td>
</tr>
{{/syntax.parameters}}
{{#syntax.parameters.0}}
</tbody>
</table>
{{/syntax.parameters.0}}
{{#syntax.return}}
<h5 class="returns">{{__global.returns}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{{type.specName.0.value}}}</td>
<td>{{{description}}}</td>
</tr>
</tbody>
</table>
{{/syntax.return}}
{{#syntax.typeParameters.0}}
<h5 class="typeParameters">{{__global.typeParameters}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.name}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
{{/syntax.typeParameters.0}}
{{#syntax.typeParameters}}
<tr>
<td><em>{{{id}}}</em></td>
<td>{{{description}}}</td>
</tr>
{{/syntax.typeParameters}}
{{#syntax.typeParameters.0}}
</tbody>
</table>
{{/syntax.typeParameters.0}}
{{#remarks}}
<h5 id="{{id}}_remarks"><strong>{{__global.remarks}}</strong></h5>
<div class="markdown level0 remarks">{{{remarks}}}</div>
{{/remarks}}
{{#example.0}}
<h5 id="{{id}}_examples"><strong>{{__global.examples}}</strong></h5>
{{/example.0}}
{{#example}}
{{{.}}}
{{/example}}
{{#children}}
<h3 id="{{id}}">{{>partials/classSubtitle}}</h3>
{{#children}}
{{^_disableContribution}}
{{#sourceurl}}
<span class="small pull-right mobile-hide">
<a href="{{sourceurl}}">{{__global.viewSource}}</a>
</span>{{/sourceurl}}
{{/_disableContribution}}
<h4 id="{{id}}" data-uid="{{uid}}">{{name.0.value}}</h4>
<div class="markdown level1 summary">{{{summary}}}</div>
<div class="markdown level1 conceptual">{{{conceptual}}}</div>
<h5 class="decalaration">{{__global.declaration}}</h5>
{{#syntax}}
<div class="codewrapper">
<pre><code class="lang-{{_lang}} hljs">{{syntax.content.0.value}}</code></pre>
</div>
{{#parameters.0}}
<h5 class="parameters">{{__global.parameters}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.name}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
{{/parameters.0}}
{{#parameters}}
<tr>
<td>{{{type.specName.0.value}}}</td>
<td><em>{{{id}}}</em></td>
<td>{{{description}}}</td>
</tr>
{{/parameters}}
{{#parameters.0}}
</tbody>
</table>
{{/parameters.0}}
{{#return}}
<h5 class="returns">{{__global.returns}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{{type.specName.0.value}}}</td>
<td>{{{description}}}</td>
</tr>
</tbody>
</table>
{{/return}}
{{#typeParameters.0}}
<h5 class="typeParameters">{{__global.typeParameters}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.name}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
{{/typeParameters.0}}
{{#typeParameters}}
<tr>
<td><em>{{{id}}}</em></td>
<td>{{{description}}}</td>
</tr>
{{/typeParameters}}
{{#typeParameters.0}}
</tbody>
</table>
{{/typeParameters.0}}
{{#fieldValue}}
<h5 class="fieldValue">{{__global.fieldValue}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{{type.specName.0.value}}}</td>
<td>{{{description}}}</td>
</tr>
</tbody>
</table>
{{/fieldValue}}
{{#propertyValue}}
<h5 class="propertyValue">{{__global.propertyValue}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{{type.specName.0.value}}}</td>
<td>{{{description}}}</td>
</tr>
</tbody>
</table>
{{/propertyValue}}
{{#eventType}}
<h5 class="eventType">{{__global.eventType}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.description}}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{{type.specName.0.value}}}</td>
<td>{{{description}}}</td>
</tr>
</tbody>
</table>
{{/eventType}}
{{/syntax}}
{{#remarks}}
<h5 id="{{id}}_remarks">{{__global.remarks}}</h5>
<div class="markdown level1 remarks">{{{remarks}}}</div>
{{/remarks}}
{{#example.0}}
<h5 id="{{id}}_examples">{{__global.examples}}</h5>
{{/example.0}}
{{#example}}
{{{.}}}
{{/example}}
{{#exceptions.0}}
<h5 class="exceptions">{{__global.exceptions}}</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{{__global.type}}</th>
<th>{{__global.condition}}</th>
</tr>
</thead>
<tbody>
{{/exceptions.0}}
{{#exceptions}}
<tr>
<td>{{{type.specName.0.value}}}</td>
<td>{{{description}}}</td>
</tr>
{{/exceptions}}
{{#exceptions.0}}
</tbody>
</table>
{{/exceptions.0}}
{{/children}}
{{/children}}
@@ -0,0 +1,13 @@
{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
<footer>
<div class="grad-bottom"></div>
<div class="footer">
<div class="container">
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
<span>Copyright © 2016 Umbraco<br>Generated by <strong>DocFX</strong></span>
</div>
</div>
</footer>
@@ -0,0 +1,18 @@
{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}</title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}">
<meta name="generator" content="docfx {{_docfxVersion}}">
{{#_description}}<meta name="description" content="{{_description}}">{{/_description}}
<link rel="icon" type="image/png" href="https://our.umbraco.org/assets/images/app-icons/favicon.png">
<link rel="stylesheet" href="{{_rel}}styles/docfx.vendor.css">
<link rel="stylesheet" href="{{_rel}}styles/docfx.css">
<link rel="stylesheet" href="{{_rel}}styles/main.css">
<meta property="docfx:navrel" content="{{_navRel}}">
<meta property="docfx:tocrel" content="{{_tocRel}}">
{{#_enableSearch}}<meta property="docfx:rel" content="{{_rel}}">{{/_enableSearch}}
</head>
@@ -0,0 +1,18 @@
{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
{{^_disableContribution}}
{{#sourceurl}}
<a href="{{sourceurl}}" class="btn btn-primary pull-right mobile-hide">{{__global.viewSource}}</a>
{{/sourceurl}}
{{/_disableContribution}}
<h1 id="{{id}}" data-uid="{{uid}}">{{>partials/title}}</h1>
<div class="markdown level0 summary">{{{summary}}}</div>
<div class="markdown level0 conceptual">{{{conceptual}}}</div>
<div class="markdown level0 remarks">{{{remarks}}}</div>
{{#children}}
<h3 id="{{id}}">{{>partials/namespaceSubtitle}}</h3>
{{#children}}
<h4>{{{specName.0.value}}}</h4>
<section>{{{summary}}}</section>
{{/children}}
{{/children}}
@@ -0,0 +1,22 @@
{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
<nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/" alt="Our Umbraco"></a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<form class="navbar-form navbar-right" role="search" id="search">
<div class="form-group">
<input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
</div>
</form>
</div>
</div>
</nav>
@@ -0,0 +1,101 @@
{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}}
{{^_disableContribution}}
{{#sourceurl}}<a href="{{sourceurl}}" class="btn btn-primary pull-right mobile-hide">View Source</a>{{/sourceurl}}
{{/_disableContribution}}
<h1 id="{{htmlId}}" data-uid="{{uid}}" class="text-capitalize">{{name}}</h1>
{{#summary}}
<div class="markdown level0 summary">{{{summary}}}</div>
{{/summary}}
{{#description}}
<div class="markdown level0 description">{{{description}}}</div>
{{/description}}
{{#conceptual}}
<div class="markdown level0 conceptual">{{{conceptual}}}</div>
{{/conceptual}}
{{#children}}
{{^_disableContribution}}
{{#sourceurl}}
<span class="small pull-right mobile-hide">
<a href="{{sourceurl}}">View Source</a>
</span>{{/sourceurl}}
{{/_disableContribution}}
<h3 id="{{htmlId}}" data-uid="{{uid}}" class="text-capitalize">{{operationId}}</h3>
{{#summary}}
<div class="markdown level1 summary">{{{summary}}}</div>
{{/summary}}
{{#description}}
<div class="markdown level1 description">{{{description}}}</div>
{{/description}}
{{#conceptual}}
<div class="markdown level1 conceptual">{{{conceptual}}}</div>
{{/conceptual}}
<h5>Request</h5>
<div class="codewrapper">
<pre><code class="lang-restApi hljs">{{operation}} {{path}}</code></pre>
</div>
{{#parameters.0}}
<h5>Parameters</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Value</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
{{/parameters.0}}
{{#parameters}}
<tr>
<td><em>{{#required}}*{{/required}}{{name}}</em></td>
<td>{{type}}</td>
<td>{{default}}</td>
<td>{{{description}}}</td>
</tr>
{{/parameters}}
{{#parameters.0}}
</tbody>
</table>
{{/parameters.0}}
{{#responses.0}}
<div class="responses">
<h5>Responses</h5>
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>Status Code</th>
<th>Description</th>
<th>Samples</th>
</tr>
</thead>
<tbody>
{{/responses.0}}
{{#responses}}
<tr>
<td><span class="status">{{statusCode}}</span></td>
<td>{{{description}}}</td>
<td class="sample-response">
{{#examples}}
<div class="mime-type">
<i>Mime type: </i><span class="mime">{{mimeType}}</span>
</div>
<pre class="response-content"><code class="lang-js json hljs">{{content}}</code></pre>
{{/examples}}
</td>
</tr>
{{/responses}}
{{#responses.0}}
</tbody>
</table>
</div>
{{/responses.0}}
{{#footer}}
<div class="markdown level1 api-footer">{{{footer}}}</div>
{{/footer}}
{{/children}}
{{#footer}}
<div class="markdown level0 api-footer">{{{footer}}}</div>
{{/footer}}
+73
View File
@@ -0,0 +1,73 @@
body {
color: rgba(0,0,0,.8);
}
.navbar-inverse {
background: #a3db78;
}
.navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-text {
color: rgba(0,0,0,.8);
}
.navbar-inverse {
border-color: transparent;
}
.sidetoc {
background-color: #f5fbf1;
}
body .toc {
background-color: #f5fbf1;
}
.sidefilter {
background-color: #daf0c9;
}
.subnav {
background-color: #f5fbf1;
}
.navbar-inverse .navbar-nav>.active>a {
color: rgba(0,0,0,.8);
background-color: #daf0c9;
}
.navbar-inverse .navbar-nav>.active>a:focus, .navbar-inverse .navbar-nav>.active>a:hover {
color: rgba(0,0,0,.8);
background-color: #daf0c9;
}
.btn-primary {
color: rgba(0,0,0,.8);
background-color: #fff;
border-color: rgba(0,0,0,.8);
}
.btn-primary:hover {
background-color: #daf0c9;
color: rgba(0,0,0,.8);
border-color: rgba(0,0,0,.8);
}
.toc .nav > li > a {
color: rgba(0,0,0,.8);
}
button, a {
color: #f36f21;
}
button:hover,
button:focus,
a:hover,
a:focus {
color: #143653;
text-decoration: none;
}
.navbar-header .navbar-brand {
background: url(https://our.umbraco.org/assets/images/logo.svg) left center no-repeat;
background-size: 40px auto;
width:50px;
}
.toc .nav > li.active > a {
color: #f36f21;
}
+51
View File
@@ -0,0 +1,51 @@
version: '{build}'
shallow_clone: true
build_script:
- cmd: >-
cd build
SET "release="
FOR /F "skip=1 delims=" %%i IN (UmbracoVersion.txt) DO IF NOT DEFINED release SET "release=%%i"
SET PATH=C:\Program Files (x86)\MSBuild\14.0\Bin;%PATH%
ECHO %PATH%
ECHO Building Release %release% build%APPVEYOR_BUILD_NUMBER%
SET nuGetFolder=%CD%\..\src\packages\
..\src\.nuget\NuGet.exe sources Add -Name MyGetUmbracoCore -Source https://www.myget.org/F/umbracocore/api/v2/ >NUL
..\src\.nuget\NuGet.exe install ..\src\Umbraco.Web.UI\packages.config -OutputDirectory %nuGetFolder% -Verbosity quiet
IF EXIST ..\src\umbraco.businesslogic\packages.config ..\src\.nuget\NuGet.exe install ..\src\umbraco.businesslogic\packages.config -OutputDirectory %nuGetFolder% -Verbosity quiet
..\src\.nuget\NuGet.exe install ..\src\Umbraco.Core\packages.config -OutputDirectory %nuGetFolder% -Verbosity quiet
SET MSBUILD="C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe"
%MSBUILD% "../src/Umbraco.Tests/Umbraco.Tests.csproj" /verbosity:minimal
build.bat %release% build%APPVEYOR_BUILD_NUMBER%
ECHO %PATH%
test:
assemblies: src\Umbraco.Tests\bin\Debug\Umbraco.Tests.dll
artifacts:
- path: build\UmbracoCms.*
notifications:
- provider: Slack
auth_token:
secure: v2csJi2V5ghR0rPdODK8GJdOGNCA+XaK84iQ9MdPOClqB+VU+40ybdKp6gPirGSH
channel: '#build-umbraco-core'
on_build_success: false
on_build_failure: true
on_build_status_changed: false
-170
View File
@@ -1,170 +0,0 @@
/* File : TOC.css
// Author : Eric Woodruff (Eric@EWoodruff.us)
// Updated : 09/07/2007
//
// Stylesheet for the table of content
*/
*
{
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
}
body
{
font-family: Segoe UI, Arial, Verdana, Helvetica, sans-serif;
font-size: 0.9em;
background-color: white;
color: White;
overflow: hidden;
}
input
{
padding:5px;
margin: 3px 0px 3px 0px
}
img
{
border: 0;
margin-left: 5px;
margin-right: 2px;
}
img.TreeNodeImg
{
cursor: pointer;
}
img.TOCLink
{
cursor: pointer;
margin-left: 0;
margin-right: 0;
}
a.SelectedNode, a.UnselectedNode
{
color: #333;
text-decoration: none;
padding: 1px 3px 1px 3px;
white-space: nowrap;
}
a.SelectedNode
{
background-color: #ffffff;
border: solid 1px #999999;
padding: 0px 2px 0px 2px;
}
a.UnselectedNode:hover, a.SelectedNode:hover
{
background-color: #cccccc;
border: solid 1px #999999;
padding: 0px 2px 0px 2px;
}
.Visible
{
display: block;
margin-left: 2em;
}
.Hidden
{
display: none;
}
.Tree
{
background-color: #fff;
color: #333;
width: 300px;
overflow: auto;
}
.TreeNode, .TreeItem
{
white-space: nowrap;
margin: 2px 2px 2px 2px;
}
.TOCDiv
{
position: relative;
float: left;
width: 300px;
height: 100%;
}
.TOCSizer
{
clear: none;
float: left;
width: 10px;
height: 100%;
background-image: url("Splitter.gif");
background-position:center center;
background-repeat:no-repeat;
position: relative;
cursor: w-resize;
border-left: solid 1px #CCC;
}
.TopicContent
{
position: relative;
float: right;
background-color: white;
height: 100%;
}
.SearchOpts
{
padding: 5px 5px 10px 5px;
color: black;
width: 300px;
border-bottom: solid lightgrey 1px;
height: 110px !important;
}
.NavOpts
{
padding: 5px 5px 6px 5px;
color: black;
width: 300px;
border-bottom: solid lightgrey 1px;
}
.NavOpts img {
display:inline-block;
margin: 0px 5px 0px 5px;
}
.IndexOpts
{
padding: 5px 5px 6px 5px;
color: black;
width: 300px;
border-bottom: solid lightgrey 1px;
}
.IndexItem
{
white-space: nowrap;
margin: 2px 2px 2px 2px;
}
.IndexSubItem
{
white-space: nowrap;
margin: 2px 2px 2px 12px;
}
.PaddedText
{
margin: 10px 10px 10px 10px;
}
-172
View File
@@ -1,172 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<!-- The configuration and platform will be used to determine which
assemblies to include from solution and project documentation
sources -->
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{cb4d85f1-7390-40ee-b41f-a724bb8fddea}</ProjectGuid>
<SHFBSchemaVersion>1.9.5.0</SHFBSchemaVersion>
<!-- AssemblyName, Name, and RootNamespace are not used by SHFB but Visual
Studio adds them anyway -->
<AssemblyName>Documentation</AssemblyName>
<RootNamespace>Documentation</RootNamespace>
<Name>Documentation</Name>
<!-- SHFB properties -->
<FrameworkVersion>.NET Framework 4.5</FrameworkVersion>
<OutputPath>.\Output\</OutputPath>
<HtmlHelpName>UmbracoClassLibrary</HtmlHelpName>
<Language>en-US</Language>
<BuildAssemblerVerbosity>OnlyErrors</BuildAssemblerVerbosity>
<BuildLogFile>csharp-api-docs.log</BuildLogFile>
<HelpFileFormat>Website</HelpFileFormat>
<IndentHtml>True</IndentHtml>
<KeepLogFile>False</KeepLogFile>
<DisableCodeBlockComponent>False</DisableCodeBlockComponent>
<CppCommentsFixup>False</CppCommentsFixup>
<CleanIntermediates>True</CleanIntermediates>
<SyntaxFilters>CSharp</SyntaxFilters>
<SdkLinkTarget>Blank</SdkLinkTarget>
<RootNamespaceContainer>False</RootNamespaceContainer>
<PresentationStyle>VS2010</PresentationStyle>
<Preliminary>False</Preliminary>
<NamingMethod>Guid</NamingMethod>
<HelpTitle>Umbraco .Net Class Library</HelpTitle>
<ContentPlacement>AboveNamespaces</ContentPlacement>
<VisibleItems>Attributes, InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected</VisibleItems>
<ComponentConfigurations />
<DocumentationSources>
<DocumentationSource sourceFile="..\..\src\Umbraco.Core\Umbraco.Core.csproj" />
<DocumentationSource sourceFile="..\..\src\Umbraco.Core\bin\Release\Umbraco.Core.xml" />
<DocumentationSource sourceFile="..\..\src\Umbraco.Web\Umbraco.Web.csproj" />
<DocumentationSource sourceFile="..\..\src\Umbraco.Web\bin\Release\umbraco.xml" /></DocumentationSources>
<WebsiteSdkLinkType>None</WebsiteSdkLinkType>
<HtmlSdkLinkType>None</HtmlSdkLinkType>
<IncludeFavorites>False</IncludeFavorites>
<BinaryTOC>True</BinaryTOC>
<MissingTags>Summary, AutoDocumentCtors, AutoDocumentDispose</MissingTags>
<TransformComponentArguments>
<Argument Key="logoFile" Value="" />
<Argument Key="logoHeight" Value="" />
<Argument Key="logoWidth" Value="" />
<Argument Key="logoAltText" Value="" />
<Argument Key="logoPlacement" Value="left" />
<Argument Key="logoAlignment" Value="left" />
</TransformComponentArguments>
<ApiFilter>
<Filter entryType="Namespace" fullName="CookComputing.Blogger" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="CookComputing.MetaWeblog" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="dashboardUtilities" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="presentation.umbraco.webservices" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco" isExposed="False" xmlns="">
<Filter entryType="Class" fullName="umbraco.content" filterName="content" isExposed="True" />
<Filter entryType="Delegate" fullName="umbraco.content.ContentCacheDatabaseLoadXmlStringEventHandler" filterName="content.ContentCacheDatabaseLoadXmlStringEventHandler" isExposed="False" />
<Filter entryType="Delegate" fullName="umbraco.content.ContentCacheLoadNodeEventHandler" filterName="content.ContentCacheLoadNodeEventHandler" isExposed="False" />
<Filter entryType="Delegate" fullName="umbraco.content.DocumentCacheEventHandler" filterName="content.DocumentCacheEventHandler" isExposed="False" />
<Filter entryType="Delegate" fullName="umbraco.content.RefreshContentEventHandler" filterName="content.RefreshContentEventHandler" isExposed="False" />
<Filter entryType="Class" fullName="umbraco.ContentExtensions" filterName="ContentExtensions" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.ContentTypeExtensions" filterName="ContentTypeExtensions" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.item" filterName="item" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.library" filterName="library" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.macro" filterName="macro" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.MacroCacheContent" filterName="MacroCacheContent" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.MacroRenderingEventArgs" filterName="MacroRenderingEventArgs" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.MediaExtensions" filterName="MediaExtensions" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.MemberExtensions" filterName="MemberExtensions" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.page" filterName="page" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.PreValueExtensions" filterName="PreValueExtensions" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.RelationTypeExtensions" filterName="RelationTypeExtensions" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.template" filterName="template" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.UmbracoObjectTypeExtensions" filterName="UmbracoObjectTypeExtensions" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.uQuery" filterName="uQuery" isExposed="True" />
<Filter entryType="Interface" fullName="umbraco.uQuery.IGetProperty" filterName="uQuery.IGetProperty" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.uQuery.Members" filterName="uQuery.Members" isExposed="True" />
<Filter entryType="Enumeration" fullName="umbraco.uQuery.UmbracoObjectType" filterName="uQuery.UmbracoObjectType" isExposed="True" />
</Filter>
<Filter entryType="Namespace" fullName="umbraco.cms.presentation" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.create.controls" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.developer" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.developer.RelationTypes" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.developer.RelationTypes.TreeMenu" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.members" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.settings" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.settings.modal" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.settings.scripts" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.settings.stylesheet" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.cms.presentation.user" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.controls" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.controls.GenericProperties" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.controls.Images" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.controls.Tree" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.developer" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.dialogs" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.js" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.layoutControls" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.NodeFactory" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.actions" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.channels" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.channels.businesslogic" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.create" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.developer.packages" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.dialogs" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.masterpages" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.members" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.nodeFactory" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.org.umbraco.update" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.plugins.tinymce3" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.preview" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.Search" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.settings" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.templateControls" isExposed="False" xmlns="">
<Filter entryType="Class" fullName="umbraco.presentation.templateControls.Item" filterName="Item" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.presentation.templateControls.ItemRenderer" filterName="ItemRenderer" isExposed="True" />
<Filter entryType="Class" fullName="umbraco.presentation.templateControls.Macro" filterName="Macro" isExposed="True" />
<Filter entryType="Enumeration" fullName="umbraco.presentation.templateControls.Macro.RenderEvents" filterName="Macro.RenderEvents" isExposed="False" />
</Filter>
<Filter entryType="Namespace" fullName="umbraco.presentation.tinymce3" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.translation" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.channels" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.controls" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.create" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.developer.Xslt" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.dialogs" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.masterpages" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.members" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.plugins.tinymce3" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.Search" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.translation" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco.webservices" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.umbraco_client.tinymce3.plugins.spellchecker" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.urlRewriter" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.Web.UI" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.presentation.webservices" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.scripting" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.settings" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="Umbraco.Web.org.umbraco.our" isExposed="False" xmlns="" />
<Filter entryType="Namespace" fullName="umbraco.webservices" isExposed="False" xmlns="" /></ApiFilter>
</PropertyGroup>
<!-- There are no properties for these groups. AnyCPU needs to appear in
order for Visual Studio to perform the build. The others are optional
common platform types that may appear. -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' ">
</PropertyGroup>
<!-- Import the SHFB build targets -->
<Import Project="$(SHFBROOT)\SandcastleHelpFileBuilder.targets" />
</Project>
+2 -2
View File
@@ -175,8 +175,8 @@
<!-- Copy SQL CE -->
<ItemGroup>
<SQLCE4Files
Include="..\src\packages\SqlServerCE.4.0.0.0\**\*.*"
Exclude="..\src\packages\SqlServerCE.4.0.0.0\lib\**\*;..\src\packages\SqlServerCE.4.0.0.0\**\*.nu*"
Include="..\src\packages\SqlServerCE.4.0.0.1\**\*.*"
Exclude="..\src\packages\SqlServerCE.4.0.0.1\lib\**\*;..\src\packages\SqlServerCE.4.0.0.1\**\*.nu*"
/>
</ItemGroup>
+20
View File
@@ -0,0 +1,20 @@
@ECHO OFF
SETLOCAL
SET release=%1
ECHO Installing Npm NuGet Package
SET nuGetFolder=%CD%\..\src\packages\
ECHO Configured packages folder: %nuGetFolder%
ECHO Current folder: %CD%
%CD%\..\src\.nuget\NuGet.exe install Npm.js -OutputDirectory %nuGetFolder% -Verbosity quiet
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\"
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%
Powershell.exe -ExecutionPolicy Unrestricted -File .\BuildDocs.ps1
+91 -18
View File
@@ -1,27 +1,100 @@
##We cannot continue if sandcastle is not installed determined by env variable: SHFBROOT
$PSScriptFilePath = (Get-Item $MyInvocation.MyCommand.Path);
$RepoRoot = (get-item $PSScriptFilePath).Directory.Parent.FullName;
$SolutionRoot = Join-Path -Path $RepoRoot "src";
$ToolsRoot = Join-Path -Path $RepoRoot "tools";
$DocFx = Join-Path -Path $ToolsRoot "docfx\docfx.exe"
$DocFxFolder = (Join-Path -Path $ToolsRoot "docfx")
$DocFxJson = Join-Path -Path $RepoRoot "apidocs\docfx.json"
$7Zip = Join-Path -Path $ToolsRoot "7zip\7za.exe"
$DocFxSiteOutput = Join-Path -Path $RepoRoot "apidocs\_site\*.*"
$NgDocsSiteOutput = Join-Path -Path $RepoRoot "src\Umbraco.Web.UI.Client\docs\api\*.*"
$ProgFiles86 = [Environment]::GetEnvironmentVariable("ProgramFiles(x86)");
$MSBuild = "$ProgFiles86\MSBuild\14.0\Bin\MSBuild.exe"
if (-not (Test-Path Env:\SHFBROOT))
{
throw "The docs cannot be build, install Sandcastle help file builder"
################ Do the UI docs
"Changing to Umbraco.Web.UI.Client folder"
cd ..
cd src\Umbraco.Web.UI.Client
Write-Host $(Get-Location)
"Creating build folder so MSBuild doesn't run the whole grunt build"
if (-Not (Test-Path "build")) {
md "build"
}
$PSScriptFilePath = (Get-Item $MyInvocation.MyCommand.Path).FullName
$BuildRoot = Split-Path -Path $PSScriptFilePath -Parent
$OutputPath = Join-Path -Path $BuildRoot -ChildPath "ApiDocs\Output"
$ProjFile = Join-Path -Path $BuildRoot -ChildPath "ApiDocs\csharp-api-docs.shfbproj"
"Installing node"
# Check if Install-Product exists, should only exist on the build server
if (Get-Command Install-Product -errorAction SilentlyContinue)
{
Install-Product node ''
}
"Building docs with project file: $ProjFile"
"Installing node modules"
& npm install
$MSBuild = "$Env:SYSTEMROOT\Microsoft.NET\Framework\v4.0.30319\msbuild.exe"
"Installing grunt"
& npm install -g grunt-cli
# build it!
& $MSBuild "$ProjFile"
"Moving back to build folder"
cd ..
cd ..
cd build
Write-Host $(Get-Location)
# remove files left over
Remove-Item $BuildRoot\* -include csharp-api-docs.shfbproj_*
& grunt --gruntfile ../src/umbraco.web.ui.client/gruntfile.js docs
# copy our custom styles in
Copy-Item $BuildRoot\ApiDocs\TOC.css $OutputPath\TOC.css
# change baseUrl
$BaseUrl = "https://our.umbraco.org/apidocs/ui/"
$IndexPath = "../src/umbraco.web.ui.client/docs/api/index.html"
(Get-Content $IndexPath).replace('location.href.replace(rUrl, indexFile)', "`'" + $BaseUrl + "`'") | Set-Content $IndexPath
# zip it
""
"Done!"
& $7Zip a -tzip ui-docs.zip $NgDocsSiteOutput -r
################ Do the c# docs
# Build the solution in debug mode
$SolutionPath = Join-Path -Path $SolutionRoot -ChildPath "umbraco.sln"
& $MSBuild "$SolutionPath" /p:Configuration=Debug /maxcpucount /t:Clean
if (-not $?)
{
throw "The MSBuild process returned an error code."
}
& $MSBuild "$SolutionPath" /p:Configuration=Debug /maxcpucount
if (-not $?)
{
throw "The MSBuild process returned an error code."
}
# Go get docfx if we don't hae it
$FileExists = Test-Path $DocFx
If ($FileExists -eq $False) {
If(!(Test-Path $DocFxFolder))
{
New-Item $DocFxFolder -type directory
}
$DocFxZip = Join-Path -Path $ToolsRoot "docfx\docfx.zip"
$DocFxSource = "https://github.com/dotnet/docfx/releases/download/v1.9.4/docfx.zip"
Invoke-WebRequest $DocFxSource -OutFile $DocFxZip
#unzip it
& $7Zip e $DocFxZip "-o$DocFxFolder"
}
#clear site
If(Test-Path(Join-Path -Path $RepoRoot "apidocs\_site"))
{
Remove-Item $DocFxSiteOutput -recurse
}
# run it!
& $DocFx metadata $DocFxJson
& $DocFx build $DocFxJson
# zip it
& $7Zip a -tzip csharp-docs.zip $DocFxSiteOutput -r
+2 -3
View File
@@ -32,8 +32,8 @@
<dependency id="AutoMapper" version="[3.0.0, 3.1.0)" />
<dependency id="Newtonsoft.Json" version="[6.0.8, 9.0.0)" />
<dependency id="Examine" version="[0.1.68, 1.0.0)" />
<dependency id="ImageProcessor" version="[2.3.2, 3.0.0)" />
<dependency id="ImageProcessor.Web" version="[4.5.1, 5.0.0)" />
<dependency id="ImageProcessor" version="[2.3.3, 3.0.0)" />
<dependency id="ImageProcessor.Web" version="[4.5.3, 5.0.0)" />
<dependency id="semver" version="[1.1.2, 2.0.0)" />
<dependency id="UrlRewritingNet" version="[2.0.7, 3.0.0)" />
<dependency id="Markdown" version="[1.14.4, 2.0.0)" />
@@ -72,7 +72,6 @@
<file src="..\_BuildOutput\WebApp\bin\UmbracoExamine.dll" target="lib\UmbracoExamine.dll" />
<file src="..\_BuildOutput\WebApp\bin\UmbracoExamine.xml" target="lib\UmbracoExamine.xml" />
<file src="tools\install.core.ps1" target="tools\install.ps1" />
<file src="tools\uninstall.core.ps1" target="tools\uninstall.ps1" />
<!-- Added to be able to produce a symbols package -->
<file src="..\_BuildOutput\bin\SQLCE4Umbraco.pdb" target="lib" />
+2 -4
View File
@@ -16,8 +16,8 @@
<tags>umbraco</tags>
<dependencies>
<dependency id="UmbracoCms.Core" version="[$version$]" />
<dependency id="Newtonsoft.Json" version="[6.0.5, 7.0.0)" />
<dependency id="Umbraco.ModelsBuilder" version="[3.0.0-RC1, 3.0.0)" />
<dependency id="Newtonsoft.Json" version="[6.0.8, 9.0.0)" />
<dependency id="Umbraco.ModelsBuilder" version="[3.0.2, 4.0.0)" />
</dependencies>
</metadata>
<files>
@@ -33,11 +33,9 @@
<file src="..\_BuildOutput\WebApp\umbraco\**" target="UmbracoFiles\umbraco" />
<file src="..\_BuildOutput\WebApp\umbraco_client\**" target="UmbracoFiles\umbraco_client" />
<file src="tools\install.ps1" target="tools\install.ps1" />
<file src="tools\uninstall.ps1" target="tools\uninstall.ps1" />
<file src="tools\Readme.txt" target="tools\Readme.txt" />
<file src="tools\ReadmeUpgrade.txt" target="tools\ReadmeUpgrade.txt" />
<file src="tools\Web.config.install.xdt" target="Content\Web.config.install.xdt" />
<file src="tools\Web.config.uninstall.xdt" target="Content\Web.config.uninstall.xdt" />
<file src="tools\applications.config.install.xdt" target="Content\config\applications.config.install.xdt" />
<file src="tools\ClientDependency.config.install.xdt" target="Content\config\ClientDependency.config.install.xdt" />
<file src="tools\Dashboard.config.install.xdt" target="Content\config\Dashboard.config.install.xdt" />
+180 -25
View File
@@ -7,8 +7,8 @@
<section name="ExamineLuceneIndexSets" type="Examine.LuceneEngine.Config.IndexSets, Examine" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="SetAttributes(type,requirePermission)" />
<sectionGroup name="applicationSettings" xdt:Locator="Match(name)">
<section name="umbraco.presentation.Properties.Settings" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</sectionGroup>
<section name="umbraco.presentation.Properties.Settings" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</sectionGroup>
<sectionGroup name="system.web.webPages.razor" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<sectionGroup name="umbracoConfiguration" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing">
<section name="settings" type="Umbraco.Core.Configuration.UmbracoSettings.UmbracoSettingsSection, Umbraco.Core" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
@@ -21,8 +21,10 @@
<appSettings xdt:Transform="InsertIfMissing" />
<appSettings>
<add key="owin:appStartup" value="UmbracoDefaultOwinStartup" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
<add key="Umbraco.ModelsBuilder.Enable" value="false" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
<add key="Umbraco.ModelsBuilder.ModelsMode" value="Nothing" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
</appSettings>
<umbracoConfiguration xdt:Transform="InsertIfMissing">
<settings configSource="config\umbracoSettings.config" xdt:Locator="Match(configSource)" xdt:Transform="InsertIfMissing" />
<BaseRestExtensions configSource="config\BaseRestExtensions.config" xdt:Locator="Match(configSource)" xdt:Transform="InsertIfMissing" />
@@ -37,7 +39,7 @@
<DbProviderFactories xdt:Transform="InsertIfMissing">
<remove invariant="System.Data.SqlServerCe.4.0" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe" xdt:Locator="Match(invariant)" xdt:Transform="SetAttributes(invariant,description,type)" />
<remove invariant="MySql.Data.MySqlClient" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<remove invariant="MySql.Data.MySqlClient" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<add invariant="MySql.Data.MySqlClient" xdt:Locator="Match(invariant)" xdt:Transform="Remove" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<add invariant="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" xdt:Locator="Match(invariant)" xdt:Transform="SetAttributes(type)" />
@@ -48,13 +50,15 @@
<system.web xdt:Transform="InsertIfMissing" />
<system.web>
<siteMap xdt:Transform="Remove" />
<siteMap xdt:Transform="InsertIfMissing">
<siteMap xdt:Transform="InsertIfMissing">
<providers xdt:Transform="InsertIfMissing">
<remove name="MySqlSiteMapProvider" xdt:Transform="InsertIfMissing" />
</providers>
</siteMap>
</siteMap>
<httpRuntime xdt:Transform="InsertIfMissing" />
<httpRuntime targetFramework="4.5" maxRequestLength="51200" fcnMode="Single" xdt:Transform="SetAttributes(targetFramework,fcnMode,maxRequestLength)" />
<httpRuntime maxRequestLength="51200" fcnMode="Single" xdt:Transform="SetAttributes(fcnMode,maxRequestLength)" />
<httpRuntime targetFramework="4.5" xdt:Locator="Condition(count(@targetFramework) != 1)" xdt:Transform="SetAttributes(targetFramework)" />
<membership defaultProvider="DefaultMembershipProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove" />
<roleManager defaultProvider="DefaultRoleProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove"/>
<profile defaultProvider="DefaultProfileProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove"/>>
@@ -63,8 +67,7 @@
<compilation>
<assemblies xdt:Transform="InsertIfMissing" />
<assemblies>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)"
xdt:Transform="InsertIfMissing" />
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
@@ -78,6 +81,56 @@
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Collections.Concurrent, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ComponentModel.Annotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ComponentModel.EventBasedAsync, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Diagnostics.Contracts, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Diagnostics.Debug, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Diagnostics.Tools, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Diagnostics.Tracing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Dynamic.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Globalization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.IO, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Linq.Expressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Linq.Parallel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Linq.Queryable, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Net.NetworkInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Net.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Net.Requests, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ObjectModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Emit, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Emit.ILGeneration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Emit.Lightweight, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Resources.ResourceManager, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.InteropServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.InteropServices.WindowsRuntime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Serialization.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Serialization.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Serialization.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Security.Principal, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.Duplex, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.NetTcp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Text.Encoding, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Text.Encoding.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Text.RegularExpressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Threading, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Threading.Tasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Threading.Tasks.Parallel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Xml.ReaderWriter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Xml.XDocument, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Xml.XmlSerializer, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
</assemblies>
</compilation>
@@ -86,11 +139,113 @@
<remove assembly="System.Web.Http" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Net.Http" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Collections" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Collections.Concurrent" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ComponentModel" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ComponentModel.Annotations" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ComponentModel.EventBasedAsync" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Diagnostics.Contracts" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Diagnostics.Debug" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Diagnostics.Tools" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Diagnostics.Tracing" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Dynamic.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Globalization" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.IO" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Linq" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Linq.Expressions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Linq.Parallel" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Linq.Queryable" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Net.NetworkInformation" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Net.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Net.Requests" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ObjectModel" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Emit" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Emit.ILGeneration" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Emit.Lightweight" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Resources.ResourceManager" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.InteropServices" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.InteropServices.WindowsRuntime" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Numerics" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Serialization.Json" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Serialization.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Serialization.Xml" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Security.Principal" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.Duplex" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.Http" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.NetTcp" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.Security" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Text.Encoding" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Text.Encoding.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Text.RegularExpressions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Threading" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Threading.Tasks" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Threading.Tasks.Parallel" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Xml.ReaderWriter" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Xml.XDocument" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Xml.XmlSerializer" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
</assemblies>
</compilation>
<compilation>
<assemblies>
<remove assembly="System.Web.Http" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Net.Http" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Collections" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Collections.Concurrent" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ComponentModel" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ComponentModel.Annotations" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ComponentModel.EventBasedAsync" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Diagnostics.Contracts" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Diagnostics.Debug" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Diagnostics.Tools" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Diagnostics.Tracing" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Dynamic.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Globalization" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.IO" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Linq" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Linq.Expressions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Linq.Parallel" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Linq.Queryable" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Net.NetworkInformation" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Net.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Net.Requests" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ObjectModel" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Emit" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Emit.ILGeneration" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Emit.Lightweight" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Resources.ResourceManager" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.InteropServices" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.InteropServices.WindowsRuntime" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Numerics" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Serialization.Json" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Serialization.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Serialization.Xml" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Security.Principal" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.Duplex" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.Http" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.NetTcp" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.Security" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Text.Encoding" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Text.Encoding.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Text.RegularExpressions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Threading" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Threading.Tasks" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Threading.Tasks.Parallel" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Xml.ReaderWriter" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Xml.XDocument" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Xml.XmlSerializer" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
</assemblies>
</compilation>
@@ -125,6 +280,8 @@
<add name="umbracoRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="viewstateMoverModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="umbracoBaseRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<!-- Note, we're removing the one that starts with a space here, don't correct it -->
<!-- This to fix a quirk we for a lot of releases where we added it with the space by default -->
<add name=" UmbracoModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="UmbracoModule" type="Umbraco.Web.UmbracoModule,umbraco" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
</modules>
@@ -149,16 +306,14 @@
<requestLimits maxAllowedContentLength="52428800" xdt:Transform="InsertIfMissing" />
</requestFiltering>
</security>
</system.webServer>
<system.codedom xdt:Transform="Remove" />
</system.webServer>
<runtime xdt:Transform="InsertIfMissing" />
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xdt:Transform="InsertIfMissing" />
</runtime>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='HtmlAgilityPack')" xdt:Transform="Remove" />
@@ -171,7 +326,7 @@
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security.OAuth')" xdt:Transform="Remove" />
<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='System.Net.Http.Formatting')" xdt:Transform="Remove" />
</assemblyBinding>
</runtime>
@@ -180,7 +335,7 @@
<dependentAssembly>
<assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.4.9.0" newVersion="1.4.9.0" />
</dependentAssembly>
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
@@ -196,7 +351,7 @@
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
@@ -208,16 +363,16 @@
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<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 xdt:Transform="Insert">
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<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>
@@ -225,19 +380,19 @@
</runtime>
<system.web.webPages.razor xdt:Transform="Remove" />
<location path="umbraco" xdt:Locator="Match(path)" xdt:Transform="InsertIfMissing" />
<location path="umbraco" xdt:Locator="Match(path)">
<system.webServer xdt:Transform="InsertIfMissing">
<urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" xdt:Transform="SetAttributes(doStaticCompression,doDynamicCompression,dynamicCompressionBeforeCache)" />
<urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" xdt:Transform="SetAttributes(doStaticCompression,doDynamicCompression,dynamicCompressionBeforeCache)" />
</system.webServer>
</location>
<location path="App_Plugins" xdt:Locator="Match(path)" xdt:Transform="InsertIfMissing" />
<location path="App_Plugins" xdt:Locator="Match(path)">
<system.webServer xdt:Transform="InsertIfMissing">
<urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" xdt:Transform="SetAttributes(doStaticCompression,doDynamicCompression,dynamicCompressionBeforeCache)" />
<urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" xdt:Transform="SetAttributes(doStaticCompression,doDynamicCompression,dynamicCompressionBeforeCache)" />
</system.webServer>
</location>
</configuration>
@@ -1,90 +0,0 @@
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<configSections xdt:Transform="InsertIfMissing" />
<configSections>
<section name="BaseRestExtensions" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<section name="FileSystemProviders" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<section name="ExamineLuceneIndexSets" type="Examine.LuceneEngine.Config.IndexSets, Examine" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<sectionGroup name="applicationSettings" xdt:Locator="Match(name)">
<section name="umbraco.presentation.Properties.Settings" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</sectionGroup>
<sectionGroup name="system.web.webPages.razor" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<sectionGroup name="umbracoConfiguration" xdt:Locator="Match(name)" xdt:Transform="Remove"/>
</configSections>
<ExamineLuceneIndexSets xdt:Transform="Remove"/>
<urlrewritingnet xdt:Transform="Remove"/>
<microsoft.scripting xdt:Transform="Remove"/>
<clientDependency xdt:Transform="Remove"/>
<Examine xdt:Transform="Remove"/>
<log4net xdt:Transform="Remove"/>
<appSettings>
<add key="umbracoConfigurationStatus" xdt:Locator="Match(key)" xdt:Transform="Remove"/>
<add key="umbracoReservedUrls" xdt:Locator="Match(key)" xdt:Transform="Remove"/>
<add key="umbracoReservedPaths" xdt:Locator="Match(key)" xdt:Transform="Remove"/>
<add key="umbracoPath" xdt:Locator="Match(key)" xdt:Transform="Remove"/>
<add key="umbracoHideTopLevelNodeFromPath" xdt:Locator="Match(key)" xdt:Transform="Remove"/>
<add key="umbracoUseDirectoryUrls" xdt:Locator="Match(key)" xdt:Transform="Remove"/>
<add key="umbracoTimeOutInMinutes" xdt:Locator="Match(key)" xdt:Transform="Remove"/>
<add key="umbracoDefaultUILanguage" xdt:Locator="Match(key)" xdt:Transform="Remove"/>
<add key="umbracoUseSSL" xdt:Locator="Match(key)" xdt:Transform="Remove"/>
<add key="owin:appStartup" value="UmbracoDefaultOwinStartup" xdt:Locator="Match(key,value)" xdt:Transform="Remove" />
</appSettings>
<umbracoConfiguration xdt:Transform="Remove"/>
<FileSystemProviders xdt:Transform="Remove" />
<BaseRestExtensions xdt:Transform="Remove" />
<connectionStrings>
<remove name="umbracoDbDSN" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="umbracoDbDSN" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</connectionStrings>
<system.web>
<pages>
<controls>
<add tagPrefix="umbraco" xdt:Locator="Match(tagPrefix)" xdt:Transform="Remove" />
</controls>
</pages>
<httpModules>
<add name="UmbracoModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</httpModules>
<httpHandlers>
<add type="umbraco.presentation.channels.api, umbraco" xdt:Locator="Match(type)" xdt:Transform="Remove" />
<add type="umbraco.presentation.channels.wordApi, umbraco" xdt:Locator="Match(type)" xdt:Transform="Remove" />
</httpHandlers>
<compilation>
<buildProviders>
<add type="umbraco.MacroEngines.RazorBuildProvider, umbraco.MacroEngines" xdt:Locator="Match(type)" xdt:Transform="Remove" />
<add type="umbraco.MacroEngines.RazorBuildProvider, umbraco.MacroEngines" xdt:Locator="Match(type)" xdt:Transform="Remove" />
<add type="umbraco.MacroEngines.RazorBuildProvider, umbraco.MacroEngines" xdt:Locator="Match(type)" xdt:Transform="Remove" />
</buildProviders>
</compilation>
<membership>
<providers>
<add name="UmbracoMembershipProvider" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="UsersMembershipProvider" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</providers>
</membership>
<roleManager>
<providers>
<add name="UmbracoRoleProvider" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</providers>
</roleManager>
</system.web>
<system.webServer>
<modules>
<remove name="UmbracoModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="UmbracoModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</modules>
<handlers>
<remove name="Channels" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<remove name="Channels_Word" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="Channels" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="Channels_Word" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</handlers>
</system.webServer>
<location path="umbraco" xdt:Locator="Match(path)" xdt:Transform="Remove" />/>
<location path="App_Plugins" xdt:Locator="Match(path)" xdt:Transform="Remove" />/>
</configuration>
+1
View File
@@ -49,6 +49,7 @@ if ($project) {
if(Test-Path $umbracoBinFolder\umbraco.editorControls.dll) { Remove-Item $umbracoBinFolder\umbraco.editorControls.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.MacroEngines.dll) { Remove-Item $umbracoBinFolder\umbraco.MacroEngines.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.ModelsBuilder.dll) { Remove-Item $umbracoBinFolder\Umbraco.ModelsBuilder.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.ModelsBuilder.AspNet.dll) { Remove-Item $umbracoBinFolder\Umbraco.ModelsBuilder.AspNet.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.providers.dll) { Remove-Item $umbracoBinFolder\umbraco.providers.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.Web.UI.dll) { Remove-Item $umbracoBinFolder\Umbraco.Web.UI.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\UmbracoExamine.dll) { Remove-Item $umbracoBinFolder\UmbracoExamine.dll -Force -Confirm:$false }
+21 -1
View File
@@ -77,8 +77,28 @@ if ($project) {
{
$packageWebConfigSource = Join-Path $installPath "UmbracoFiles\Web.config"
Copy-Item $packageWebConfigSource $destinationWebConfig -Force
}
# Copy files that don't get automatically copied for Website projects
# We do this here, when copyWebconfig is true because we only want to do it for new installs
# If this is an upgrade then the files should already be there
$splashesSource = Join-Path $installPath "UmbracoFiles\Config\splashes\*.*"
$splashesDestination = Join-Path $projectPath "Config\splashes\"
New-Item $splashesDestination -Type directory
Copy-Item $splashesSource $splashesDestination -Force
$sqlCe64Source = Join-Path $installPath "UmbracoFiles\bin\amd64\*"
$sqlCe64Destination = Join-Path $projectPath "bin\amd64\"
Copy-Item $sqlCe64Source $sqlCe64Destination -Force
$sqlCex86Source = Join-Path $installPath "UmbracoFiles\bin\x86\*"
$sqlCex86Destination = Join-Path $projectPath "bin\x86\"
Copy-Item $sqlCex86source $sqlCex86Destination -Force
$umbracoUIXMLSource = Join-Path $installPath "UmbracoFiles\Umbraco\Config\Create\UI.xml"
$umbracoUIXMLDestination = Join-Path $projectPath "Umbraco\Config\Create\UI.xml"
Copy-Item $umbracoUIXMLSource $umbracoUIXMLDestination -Force
}
$installFolder = Join-Path $projectPath "Install"
if(Test-Path $installFolder) {
Remove-Item $installFolder -Force -Recurse -Confirm:$false
-48
View File
@@ -1,48 +0,0 @@
param($installPath, $toolsPath, $package, $project)
Write-Host "installPath:" "${installPath}"
Write-Host "toolsPath:" "${toolsPath}"
Write-Host " "
if ($project) {
# Create paths and list them
$projectPath = (Get-Item $project.Properties.Item("FullPath").Value).FullName
Write-Host "projectPath:" "${projectPath}"
$backupPath = Join-Path $projectPath "App_Data\NuGetBackup"
Write-Host "backupPath:" "${backupPath}"
$umbracoBinFolder = Join-Path $projectPath "bin"
Write-Host "umbracoBinFolder:" "${umbracoBinFolder}"
# Remove backups
Write-Host "removing backups:" "${backupPath}"
if(Test-Path $backupPath) { Remove-Item -Recurse -Force $backupPath -Confirm:$false }
# Delete files Umbraco ships with
Write-Host "removing dlls:" "${umbracoBinFolder}"
if(Test-Path $umbracoBinFolder\businesslogic.dll) { Remove-Item $umbracoBinFolder\businesslogic.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\cms.dll) { Remove-Item $umbracoBinFolder\cms.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\controls.dll) { Remove-Item $umbracoBinFolder\controls.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\interfaces.dll) { Remove-Item $umbracoBinFolder\interfaces.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\log4net.dll) { Remove-Item $umbracoBinFolder\log4net.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.ApplicationBlocks.Data.dll) { Remove-Item $umbracoBinFolder\Microsoft.ApplicationBlocks.Data.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\SQLCE4Umbraco.dll) { Remove-Item $umbracoBinFolder\SQLCE4Umbraco.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Data.SqlServerCe.dll) { Remove-Item $umbracoBinFolder\System.Data.SqlServerCe.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Data.SqlServerCe.Entity.dll) { Remove-Item $umbracoBinFolder\System.Data.SqlServerCe.Entity.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\TidyNet.dll) { Remove-Item $umbracoBinFolder\TidyNet.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.dll) { Remove-Item $umbracoBinFolder\umbraco.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.Core.dll) { Remove-Item $umbracoBinFolder\Umbraco.Core.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.DataLayer.dll) { Remove-Item $umbracoBinFolder\umbraco.DataLayer.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.editorControls.dll) { Remove-Item $umbracoBinFolder\umbraco.editorControls.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.MacroEngines.dll) { Remove-Item $umbracoBinFolder\umbraco.MacroEngines.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.providers.dll) { Remove-Item $umbracoBinFolder\umbraco.providers.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.Web.UI.dll) { Remove-Item $umbracoBinFolder\Umbraco.Web.UI.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\UmbracoExamine.dll) { Remove-Item $umbracoBinFolder\UmbracoExamine.dll -Force -Confirm:$false }
$amd64Folder = Join-Path $umbracoBinFolder "amd64"
if(Test-Path $amd64Folder) { Remove-Item $amd64Folder -Force -Recurse -Confirm:$false }
$x86Folder = Join-Path $umbracoBinFolder "x86"
if(Test-Path $x86Folder) { Remove-Item $x86Folder -Force -Recurse -Confirm:$false }
}
-39
View File
@@ -1,39 +0,0 @@
param($installPath, $toolsPath, $package, $project)
Write-Host "installPath:" "${installPath}"
Write-Host "toolsPath:" "${toolsPath}"
Write-Host " "
if ($project) {
# Create paths and list them
$projectPath = (Get-Item $project.Properties.Item("FullPath").Value).FullName
Write-Host "projectPath:" "${projectPath}"
$backupPath = Join-Path $projectPath "App_Data\NuGetBackup"
Write-Host "backupPath:" "${backupPath}"
$appBrowsers = Join-Path $projectPath "App_Browsers"
Write-Host "appBrowsers:" "${appBrowsers}"
$appData = Join-Path $projectPath "App_Data"
Write-Host "appData:" "${appData}"
# Remove backups
Write-Host "removing backups:" "${backupPath}"
if(Test-Path $backupPath) { Remove-Item -Recurse -Force $backupPath -Confirm:$false }
# Remove app_data files
Write-Host "removing app_data files:" "${appData}"
if(Test-Path $appData\packages) { Remove-Item $appData\packages -Recurse -Force -Confirm:$false }
Write-Host "removing app_browsers:" "${appBrowsers}"
if(Test-Path $appBrowsers\Form.browser) { Remove-Item $appBrowsers\Form.browser -Force -Confirm:$false }
if(Test-Path $appBrowsers\w3cvalidator.browser) { Remove-Item $appBrowsers\w3cvalidator.browser -Force -Confirm:$false }
# Remove umbraco and umbraco_files
$umbracoFolder = Join-Path $projectPath "Umbraco"
Write-Host "removing umbraco folder:" "${umbracoFolder}"
if(Test-Path $umbracoFolder) { Remove-Item $umbracoFolder -Recurse -Force -Confirm:$false }
$umbracoClientFolder = Join-Path $projectPath "Umbraco_Client"
Write-Host "removing umbraco client folder:" "${umbracoClientFolder}"
if(Test-Path $umbracoClientFolder) { Remove-Item $umbracoClientFolder -Recurse -Force -Confirm:$false }
}
+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.4.0
RC1
7.5.0
+8 -6
View File
@@ -47,13 +47,15 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\SqlServerCE.4.0.0.0\lib\System.Data.SqlServerCe.dll</HintPath>
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\SqlServerCE.4.0.0.1\lib\System.Data.SqlServerCe.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="System.Data.SqlServerCe.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\SqlServerCE.4.0.0.0\lib\System.Data.SqlServerCe.Entity.dll</HintPath>
<Reference Include="System.Data.SqlServerCe.Entity, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\SqlServerCE.4.0.0.1\lib\System.Data.SqlServerCe.Entity.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
+1 -1
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="SqlServerCE" version="4.0.0.0" targetFramework="net40" />
<package id="SqlServerCE" version="4.0.0.1" targetFramework="net45" />
</packages>
+2 -2
View File
@@ -11,5 +11,5 @@ using System.Resources;
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("7.4.0")]
[assembly: AssemblyInformationalVersion("7.4.0-RC1")]
[assembly: AssemblyFileVersion("7.5.0")]
[assembly: AssemblyInformationalVersion("7.5.0")]
+22 -8
View File
@@ -1,18 +1,22 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
using Umbraco.Core.Packaging;
using Umbraco.Core.Persistence.Migrations;
using Umbraco.Core.Profiling;
using Umbraco.Core.Services;
using Umbraco.Core.Sync;
namespace Umbraco.Core
{
/// <summary>
/// <summary>
/// the Umbraco Application context
/// </summary>
/// <remarks>
@@ -183,6 +187,7 @@ namespace Umbraco.Core
readonly ManualResetEventSlim _isReadyEvent = new ManualResetEventSlim(false);
private DatabaseContext _databaseContext;
private ServiceContext _services;
private PackageMigrationsContext _packageMigrationsContext;
public bool IsReady
{
@@ -212,17 +217,19 @@ namespace Umbraco.Core
public bool IsConfigured
{
get { return _configured.Value; }
get { return _umbracoVersionConfigured.Value; }
}
/// <summary>
/// If the db is configured, there is a database context and there is an umbraco schema, but we are not 'configured' , then it means we are upgrading
/// If the db is configured, there is a database context and there is an umbraco schema,
/// but we are: (not 'configured' OR there's pending migrations), then it means we are upgrading
/// </summary>
public bool IsUpgrading
{
get
{
if (IsConfigured == false
if ((IsConfigured == false || PackageMigrationsContext.HasPendingPackageMigrations)
&& DatabaseContext != null
&& DatabaseContext.IsDatabaseConfigured)
{
@@ -268,7 +275,8 @@ namespace Umbraco.Core
// ReSharper disable once InconsistentNaming
internal string _umbracoApplicationUrl;
private Lazy<bool> _configured;
private Lazy<bool> _umbracoVersionConfigured;
internal MainDom MainDom { get; private set; }
private void Init()
@@ -277,7 +285,7 @@ namespace Umbraco.Core
MainDom.Acquire();
//Create the lazy value to resolve whether or not the application is 'configured'
_configured = new Lazy<bool>(() =>
_umbracoVersionConfigured = new Lazy<bool>(() =>
{
try
{
@@ -318,9 +326,10 @@ namespace Umbraco.Core
LogHelper.Error<ApplicationContext>("Error determining if application is configured, returning false", ex);
return false;
}
});
});
}
_packageMigrationsContext = new PackageMigrationsContext(DatabaseContext, Services.MigrationEntryService, ProfilingLogger.Logger);
}
private string ConfigurationStatus
{
@@ -343,6 +352,11 @@ namespace Umbraco.Core
throw new Exception("ApplicationContext has already been initialized.");
}
internal PackageMigrationsContext PackageMigrationsContext
{
get { return _packageMigrationsContext; }
}
/// <summary>
/// Gets the current DatabaseContext
/// </summary>
+2 -2
View File
@@ -4,7 +4,7 @@ using System.Collections.Generic;
namespace Umbraco.Core.Cache
{
/// <summary>
/// An abstract class for implementing a basic cache provider
/// An interface for implementing a basic cache provider
/// </summary>
public interface ICacheProvider
{
@@ -65,4 +65,4 @@ namespace Umbraco.Core.Cache
object GetCacheItem(string cacheKey, Func<object> getCacheItem);
}
}
}
@@ -6,6 +6,8 @@
bool HideDisabledUsersInBackoffice { get; }
bool AllowPasswordReset { get; }
string AuthCookieName { get; }
string AuthCookieDomain { get; }
@@ -28,6 +28,18 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
}
}
[ConfigurationProperty("allowPasswordReset")]
internal InnerTextConfigurationElement<bool> AllowPasswordReset
{
get
{
return new OptionalInnerTextConfigurationElement<bool>(
(InnerTextConfigurationElement<bool>)this["allowPasswordReset"],
//set the default
true);
}
}
[ConfigurationProperty("authCookieName")]
internal InnerTextConfigurationElement<string> AuthCookieName
{
@@ -62,6 +74,11 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
get { return HideDisabledUsersInBackoffice; }
}
bool ISecuritySection.AllowPasswordReset
{
get { return AllowPasswordReset; }
}
string ISecuritySection.AuthCookieName
{
get { return AuthCookieName; }
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
{
public class UmbracoVersion
{
private static readonly Version Version = new Version("7.4.0");
private static readonly Version Version = new Version("7.5.0");
/// <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 "RC1"; } }
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
@@ -32,12 +32,7 @@ namespace Umbraco.Core.Configuration
public static SemVersion GetSemanticVersion()
{
return new SemVersion(
Current.Major,
Current.Minor,
Current.Build,
CurrentComment.IsNullOrWhiteSpace() ? null : CurrentComment,
Current.Revision > 0 ? Current.Revision.ToInvariantString() : null);
return Current.GetSemanticVersion();
}
}
}
+4 -1
View File
@@ -143,7 +143,10 @@ namespace Umbraco.Core
/// </summary>
public const string LockObject = "87A9F1FF-B1E4-4A25-BABB-465A4A47EC41";
/// <summary>
/// Guid for a Lock object.
/// </summary>
public static readonly Guid LockObjectGuid = new Guid(LockObject);
}
}
}
+13 -4
View File
@@ -11,7 +11,7 @@ namespace Umbraco.Core
{
/// <summary>
/// Used to prefix generic properties that are internal content properties
/// </summary>
/// </summary>
public const string InternalGenericPropertiesPrefix = "_umb_";
/// <summary>
@@ -74,7 +74,7 @@ namespace Umbraco.Core
/// </summary>
[Obsolete("GUIDs are no longer used to reference Property Editors, use the Alias constant instead. This will be removed in future versions")]
public const string DictionaryPicker = "17B70066-F764-407D-AB05-3717F1E1C513";
/// <summary>
/// Guid for the Dropdown list datatype.
/// </summary>
@@ -352,7 +352,7 @@ namespace Umbraco.Core
/// </summary>
[Obsolete("GUIDs are no longer used to reference Property Editors, use the Alias constant instead. This will be removed in future versions")]
public const string UltimatePicker = "CDBF0B5D-5CB2-445F-BC12-FCAAEC07CF2C";
/// <summary>
/// Guid for the UltraSimpleEditor datatype.
/// </summary>
@@ -369,7 +369,7 @@ namespace Umbraco.Core
/// </summary>
[Obsolete("GUIDs are no longer used to reference Property Editors, use the Alias constant instead. This will be removed in future versions")]
public const string UmbracoUserControlWrapper = "D15E1281-E456-4B24-AA86-1DDA3E4299D5";
/// <summary>
/// Guid for the Upload field datatype.
/// </summary>
@@ -419,6 +419,15 @@ namespace Umbraco.Core
/// Alias for the email address property editor
/// </summary>
public const string EmailAddressAlias = "Umbraco.EmailAddress";
public static class PreValueKeys
{
/// <summary>
/// Pre-value name used to indicate a field that can be used to override the database field to which data for the associated
/// property is saved
/// </summary>
public const string DataValueType = "umbracoDataValueType";
}
}
}
}
+6
View File
@@ -10,6 +10,12 @@ namespace Umbraco.Core
/// </summary>
public static class Web
{
public const string UmbracoContextDataToken = "umbraco-context";
public const string UmbracoDataToken = "umbraco";
public const string PublishedDocumentRequestDataToken = "umbraco-doc-request";
public const string CustomRouteDataToken = "umbraco-custom-route";
public const string UmbracoRouteDefinitionDataToken = "umbraco-route-def";
/// <summary>
/// The preview cookie name
/// </summary>
+6 -1
View File
@@ -500,7 +500,12 @@ namespace Umbraco.Core
//the database migration objects
MigrationResolver.Current = new MigrationResolver(
ProfilingLogger.Logger,
() => PluginManager.ResolveTypes<IMigration>());
() => PluginManager.ResolveTypes<IMigration>())
{
//This needs to be resolved before it's frozen because we need to find migrations to determine
// if Umbraco IsConfigured
CanResolveBeforeFrozen = true
};
// todo: remove once we drop IPropertyEditorValueConverter support.
PropertyEditorValueConvertersResolver.Current = new PropertyEditorValueConvertersResolver(
@@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Reflection;
namespace Umbraco.Core.Dynamics
{
/// <summary>
/// This will check enable dynamic access to properties and methods in a case insensitive manner
/// </summary>
/// <typeparam name="T"></typeparam>
/// <remarks>
/// This works by using reflection on the type - the reflection lookup is lazy so it will not execute unless a dynamic method needs to be accessed
/// </remarks>
public abstract class CaseInsensitiveDynamicObject<T> : DynamicObject
where T: class
{
/// <summary>
/// Used for dynamic access for case insensitive property access
/// </summary>`
private static readonly Lazy<IDictionary<string, Func<T, object>>> CaseInsensitivePropertyAccess = new Lazy<IDictionary<string, Func<T, object>>>(() =>
{
var props = typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public)
.DistinctBy(x => x.Name);
return props.Select(propInfo =>
{
var name = propInfo.Name.ToLowerInvariant();
Func<T, object> getVal = propInfo.GetValue;
return new KeyValuePair<string, Func<T, object>>(name, getVal);
}).ToDictionary(x => x.Key, x => x.Value);
});
/// <summary>
/// Used for dynamic access for case insensitive property access
/// </summary>
private static readonly Lazy<IDictionary<string, Tuple<ParameterInfo[], Func<T, object[], object>>>> CaseInsensitiveMethodAccess
= new Lazy<IDictionary<string, Tuple<ParameterInfo[], Func<T, object[], object>>>>(() =>
{
var props = typeof(T).GetMethods(BindingFlags.Instance | BindingFlags.Public)
.Where(x => x.IsSpecialName == false && x.IsVirtual == false)
.DistinctBy(x => x.Name);
return props.Select(methodInfo =>
{
var name = methodInfo.Name.ToLowerInvariant();
Func<T, object[], object> getVal = methodInfo.Invoke;
var val = new Tuple<ParameterInfo[], Func<T, object[], object>>(methodInfo.GetParameters(), getVal);
return new KeyValuePair<string, Tuple<ParameterInfo[], Func<T, object[], object>>>(name, val);
}).ToDictionary(x => x.Key, x => x.Value);
});
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
var name = binder.Name.ToLowerInvariant();
if (CaseInsensitiveMethodAccess.Value.ContainsKey(name) == false)
return base.TryInvokeMember(binder, args, out result);
var val = CaseInsensitiveMethodAccess.Value[name];
var parameters = val.Item1;
var callback = val.Item2;
var fullArgs = new List<object>(args);
if (args.Length <= parameters.Length)
{
//need to fill them up if they're optional
for (var i = args.Length; i < parameters.Length; i++)
{
if (parameters[i].IsOptional)
{
fullArgs.Add(parameters[i].DefaultValue);
}
}
if (fullArgs.Count == parameters.Length)
{
result = callback((T)(object)this, fullArgs.ToArray());
return true;
}
}
return base.TryInvokeMember(binder, args, out result);
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
var name = binder.Name.ToLowerInvariant();
if (CaseInsensitivePropertyAccess.Value.ContainsKey(name) == false)
return base.TryGetMember(binder, out result);
result = CaseInsensitivePropertyAccess.Value[name]((T)(object)this);
return true;
}
}
}
@@ -64,7 +64,7 @@ namespace Umbraco.Core.Dynamics
/// </summary>
public class DynamicXmlConverter : TypeConverter
{
public override bool CanConvertTo(ITypeDescriptorContext context, Type sourceType)
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
var convertableTypes = new[]
{
@@ -78,8 +78,8 @@ namespace Umbraco.Core.Dynamics
typeof(RawXmlDocument)
};
return convertableTypes.Any(x => TypeHelper.IsTypeAssignableFrom(x, sourceType))
|| base.CanConvertFrom(context, sourceType);
return convertableTypes.Any(x => TypeHelper.IsTypeAssignableFrom(x, destinationType))
|| base.CanConvertFrom(context, destinationType);
}
public override object ConvertTo(
@@ -5,8 +5,10 @@ using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Linq.Expressions;
using System.Text;
using System.Web.Services.Description;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Dynamics
{
@@ -20,6 +22,20 @@ namespace Umbraco.Core.Dynamics
/// </summary>
private static readonly ConcurrentDictionary<Tuple<Type, string, int>, MethodInfo[]> MethodCache = new ConcurrentDictionary<Tuple<Type, string, int>, MethodInfo[]>();
private static IEnumerable<Type> GetTypes(Assembly a)
{
try
{
return TypeFinder.GetTypesWithFormattedException(a);
}
catch (ReflectionTypeLoadException ex)
{
// is this going to flood the log?
LogHelper.Error(typeof (ExtensionMethodFinder), "Failed to get types.", ex);
return Enumerable.Empty<Type>();
}
}
/// <summary>
/// Returns the enumerable of all extension method info's in the app domain = USE SPARINGLY!!!
/// </summary>
@@ -36,7 +52,7 @@ namespace Umbraco.Core.Dynamics
// assemblies that contain extension methods
.Where(a => a.IsDefined(typeof (ExtensionAttribute), false))
// types that contain extension methods
.SelectMany(a => a.GetTypes()
.SelectMany(a => GetTypes(a)
.Where(t => t.IsDefined(typeof (ExtensionAttribute), false) && t.IsSealed && t.IsGenericType == false && t.IsNested == false))
// actual extension methods
.SelectMany(t => t.GetMethods(BindingFlags.Static | BindingFlags.Public)
@@ -45,9 +61,9 @@ namespace Umbraco.Core.Dynamics
.Concat(typeof (Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public))
//If we don't do this then we'll be scanning all assemblies each time!
.ToArray(),
//only cache for 5 minutes
timeout: TimeSpan.FromMinutes(5),
timeout: TimeSpan.FromMinutes(5),
//each time this is accessed it will be for 5 minutes longer
isSliding:true);
@@ -57,7 +73,7 @@ namespace Umbraco.Core.Dynamics
/// Returns all extension methods found matching the definition
/// </summary>
/// <param name="runtimeCache">
/// The runtime cache is used to temporarily cache all extension methods found in the app domain so that
/// The runtime cache is used to temporarily cache all extension methods found in the app domain so that
/// while we search for individual extension methods, the process will be reasonably 'quick'. We then statically
/// cache the MethodInfo's that we are looking for and then the runtime cache will expire and give back all that memory.
/// </param>
@@ -78,7 +94,7 @@ namespace Umbraco.Core.Dynamics
{
var candidates = GetAllExtensionMethodsInAppDomain(runtimeCache);
// filter by name
// filter by name
var filtr1 = candidates.Where(m => m.Name == name);
// filter by args count
@@ -102,7 +118,7 @@ namespace Umbraco.Core.Dynamics
return filtr3.ToArray();
});
}
private static MethodInfo DetermineMethodFromParams(IEnumerable<MethodInfo> methods, Type genericType, IEnumerable<object> args)
@@ -123,12 +139,12 @@ namespace Umbraco.Core.Dynamics
types = method.GetParameters().Select(pi => pi.ParameterType).Skip(1)
});
//This type comparer will check
//This type comparer will check
var typeComparer = new DelegateEqualityComparer<Type>(
//Checks if the argument type passed in can be assigned from the parameter type in the method. For
//Checks if the argument type passed in can be assigned from the parameter type in the method. For
// example, if the argument type is HtmlHelper<MyModel> but the method parameter type is HtmlHelper then
// it will match because the argument is assignable to that parameter type and will be able to execute
TypeHelper.IsTypeAssignableFrom,
TypeHelper.IsTypeAssignableFrom,
//This will not ever execute but if it does we need to get the hash code of the string because the hash
// code of a type is random
type => type.FullName.GetHashCode());
@@ -159,7 +175,7 @@ namespace Umbraco.Core.Dynamics
.ToArray();
var methods = GetAllExtensionMethods(runtimeCache, thisType, name, args.Length).ToArray();
return DetermineMethodFromParams(methods, genericType, args);
}
}
+63 -24
View File
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.ComponentModel;
using Semver;
using Umbraco.Core.Configuration;
using Umbraco.Core.Persistence.Migrations;
namespace Umbraco.Core.Events
@@ -13,23 +14,49 @@ namespace Umbraco.Core.Events
/// </summary>
/// <param name="eventObject"></param>
/// <param name="targetVersion"></param>
/// <param name="productName"></param>
/// <param name="canCancel"></param>
/// <param name="configuredVersion"></param>
public MigrationEventArgs(IList<IMigration> eventObject, SemVersion configuredVersion, SemVersion targetVersion, bool canCancel)
: base(eventObject, canCancel)
{
ConfiguredSemVersion = configuredVersion;
TargetSemVersion = targetVersion;
}
public MigrationEventArgs(IList<IMigration> eventObject, SemVersion configuredVersion, SemVersion targetVersion, string productName, bool canCancel)
: this(eventObject, null, configuredVersion, targetVersion, productName, canCancel)
{ }
[Obsolete("Use constructor accepting UmbracoVersion instances instead")]
/// <summary>
/// Constructor accepting multiple migrations that are used in the migration runner
/// </summary>
/// <param name="eventObject"></param>
/// <param name="targetVersion"></param>
/// <param name="canCancel"></param>
/// <param name="configuredVersion"></param>
[Obsolete("Use constructor accepting a product name instead.")]
[EditorBrowsable(EditorBrowsableState.Never)]
public MigrationEventArgs(IList<IMigration> eventObject, SemVersion configuredVersion, SemVersion targetVersion, bool canCancel)
: this(eventObject, null, configuredVersion, targetVersion, GlobalSettings.UmbracoMigrationName, canCancel)
{ }
[Obsolete("Use constructor accepting SemVersion instances and a product name instead.")]
[EditorBrowsable(EditorBrowsableState.Never)]
public MigrationEventArgs(IList<IMigration> eventObject, Version configuredVersion, Version targetVersion, bool canCancel)
: base(eventObject, canCancel)
{
ConfiguredSemVersion = new SemVersion(configuredVersion);
TargetSemVersion = new SemVersion(targetVersion);
}
: this(eventObject, null, new SemVersion(configuredVersion), new SemVersion(targetVersion), GlobalSettings.UmbracoMigrationName, canCancel)
{ }
/// <summary>
/// Constructor accepting multiple migrations that are used in the migration runner
/// </summary>
/// <param name="eventObject"></param>
/// <param name="migrationContext"></param>
/// <param name="targetVersion"></param>
/// <param name="productName"></param>
/// <param name="canCancel"></param>
/// <param name="configuredVersion"></param>
internal MigrationEventArgs(IList<IMigration> eventObject, MigrationContext migrationContext, SemVersion configuredVersion, SemVersion targetVersion, string productName, bool canCancel)
: base(eventObject, canCancel)
{
MigrationContext = migrationContext;
ConfiguredSemVersion = configuredVersion;
TargetSemVersion = targetVersion;
ProductName = productName;
}
/// <summary>
/// Constructor accepting multiple migrations that are used in the migration runner
@@ -39,12 +66,15 @@ namespace Umbraco.Core.Events
/// <param name="targetVersion"></param>
/// <param name="canCancel"></param>
/// <param name="configuredVersion"></param>
[Obsolete("Use constructor accepting a product name instead.")]
[EditorBrowsable(EditorBrowsableState.Never)]
internal MigrationEventArgs(IList<IMigration> eventObject, MigrationContext migrationContext, SemVersion configuredVersion, SemVersion targetVersion, bool canCancel)
: base(eventObject, canCancel)
{
MigrationContext = migrationContext;
ConfiguredSemVersion = configuredVersion;
TargetSemVersion = targetVersion;
ProductName = GlobalSettings.UmbracoMigrationName;
}
/// <summary>
@@ -53,21 +83,28 @@ namespace Umbraco.Core.Events
/// <param name="eventObject"></param>
/// <param name="configuredVersion"></param>
/// <param name="targetVersion"></param>
public MigrationEventArgs(IList<IMigration> eventObject, SemVersion configuredVersion, SemVersion targetVersion)
: base(eventObject)
{
ConfiguredSemVersion = configuredVersion;
TargetSemVersion = targetVersion;
}
/// <param name="productName"></param>
public MigrationEventArgs(IList<IMigration> eventObject, SemVersion configuredVersion, SemVersion targetVersion, string productName)
: this(eventObject, null, configuredVersion, targetVersion, productName, false)
{ }
[Obsolete("Use constructor accepting UmbracoVersion instances instead")]
/// <summary>
/// Constructor accepting multiple migrations that are used in the migration runner
/// </summary>
/// <param name="eventObject"></param>
/// <param name="configuredVersion"></param>
/// <param name="targetVersion"></param>
[Obsolete("Use constructor accepting a product name instead.")]
[EditorBrowsable(EditorBrowsableState.Never)]
public MigrationEventArgs(IList<IMigration> eventObject, SemVersion configuredVersion, SemVersion targetVersion)
: this(eventObject, null, configuredVersion, targetVersion, GlobalSettings.UmbracoMigrationName, false)
{ }
[Obsolete("Use constructor accepting SemVersion instances and a product name instead.")]
[EditorBrowsable(EditorBrowsableState.Never)]
public MigrationEventArgs(IList<IMigration> eventObject, Version configuredVersion, Version targetVersion)
: base(eventObject)
{
ConfiguredSemVersion = new SemVersion(configuredVersion);
TargetSemVersion = new SemVersion(targetVersion);
}
: this(eventObject, null, new SemVersion(configuredVersion), new SemVersion(targetVersion), GlobalSettings.UmbracoMigrationName, false)
{ }
/// <summary>
/// Returns all migrations that were used in the migration runner
@@ -95,6 +132,8 @@ namespace Umbraco.Core.Events
public SemVersion TargetSemVersion { get; private set; }
public string ProductName { get; private set; }
internal MigrationContext MigrationContext { get; private set; }
}
}
+2
View File
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
@@ -155,6 +156,7 @@ namespace Umbraco.Core.Models
/// Language of the data contained within this Content object.
/// </summary>
[Obsolete("This is not used and will be removed from the codebase in future versions")]
[EditorBrowsable(EditorBrowsableState.Never)]
public string Language
{
get { return _language; }
+3 -6
View File
@@ -487,11 +487,8 @@ namespace Umbraco.Core.Models
var oldPropertyGroup = PropertyGroups.FirstOrDefault(x =>
x.PropertyTypes.Any(y => y.Alias == propertyTypeAlias));
// reset PropertyGroupId, which will be re-evaluated when the content type
// is saved - what is important is group.PropertyTypes - see code in
// ContentTypeBaseRepository.PersistUpdatedBaseContentType
propertyType.PropertyGroupId = new Lazy<int>(() => default(int));
propertyType.ResetDirtyProperties(); // PropertyGroupId must not be dirty
// set new group
propertyType.PropertyGroupId = newPropertyGroup == null ? null : new Lazy<int>(() => newPropertyGroup.Id, false);
// remove from old group, if any - add to new group, if any
if (oldPropertyGroup != null)
@@ -540,7 +537,7 @@ namespace Umbraco.Core.Models
// re-assign the group's properties to no group
foreach (var property in group.PropertyTypes)
{
property.PropertyGroupId = new Lazy<int>(() => 0);
property.PropertyGroupId = null;
_propertyTypes.Add(property);
}
@@ -6,10 +6,6 @@ namespace Umbraco.Core.Models
/// <summary>
/// Enum of the various DbTypes for which the Property values are stored
/// </summary>
/// <remarks>
/// Object is added to support complex values from PropertyEditors,
/// but will be saved under the Ntext column.
/// </remarks>
[Serializable]
[DataContract]
public enum DataTypeDatabaseType
+2
View File
@@ -1,4 +1,5 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using Umbraco.Core.Persistence.Mappers;
@@ -21,6 +22,7 @@ namespace Umbraco.Core.Models
bool Published { get; }
[Obsolete("This will be removed in future versions")]
[EditorBrowsable(EditorBrowsableState.Never)]
string Language { get; set; }
/// <summary>
+7 -1
View File
@@ -7,6 +7,12 @@ namespace Umbraco.Core.Models
/// </summary
public interface IMediaType : IContentTypeComposition
{
/// <summary>
/// Creates a deep clone of the current entity with its identity/alias and it's property identities reset
/// </summary>
/// <param name="newAlias"></param>
/// <returns></returns>
IMediaType DeepCloneWithResetIdentities(string newAlias);
}
}
+1 -2
View File
@@ -1,5 +1,4 @@
using System;
using Semver;
using Semver;
using Umbraco.Core.Models.EntityBase;
namespace Umbraco.Core.Models
@@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Logging;
using Umbraco.Core.PropertyEditors.ValueConverters;
namespace Umbraco.Core.Models
{
internal static class MediaExtensions
{
/// <summary>
/// Hack: we need to put this in a real place, this is currently just used to render the urls for a media item in the back office
/// </summary>
/// <returns></returns>
public static string GetUrl(this IMedia media, string propertyAlias, ILogger logger)
{
var propertyType = media.PropertyTypes.FirstOrDefault(x => x.Alias.InvariantEquals(propertyAlias));
if (propertyType != null)
{
var val = media.Properties[propertyType];
if (val != null)
{
var jsonString = val.Value as string;
if (jsonString != null)
{
if (propertyType.PropertyEditorAlias == Constants.PropertyEditors.ImageCropperAlias)
{
if (jsonString.DetectIsJson())
{
try
{
var json = JsonConvert.DeserializeObject<JObject>(jsonString);
if (json["src"] != null)
{
return json["src"].Value<string>();
}
}
catch (Exception ex)
{
logger.Error<ImageCropperValueConverter>("Could not parse the string " + jsonString + " to a json object", ex);
return string.Empty;
}
}
else
{
return jsonString;
}
}
else if (propertyType.PropertyEditorAlias == Constants.PropertyEditors.UploadFieldAlias)
{
return jsonString;
}
//hrm, without knowing what it is, just adding a string here might not be very nice
}
}
}
return string.Empty;
}
/// <summary>
/// Hack: we need to put this in a real place, this is currently just used to render the urls for a media item in the back office
/// </summary>
/// <returns></returns>
public static string[] GetUrls(this IMedia media, IContentSection contentSection, ILogger logger)
{
var links = new List<string>();
var autoFillProperties = contentSection.ImageAutoFillProperties.ToArray();
if (autoFillProperties.Any())
{
links.AddRange(
autoFillProperties
.Select(field => media.GetUrl(field.Alias, logger))
.Where(link => link.IsNullOrWhiteSpace() == false));
}
return links.ToArray();
}
}
}
+25
View File
@@ -38,5 +38,30 @@ namespace Umbraco.Core.Models
: base(parent, alias)
{
}
/// <summary>
/// Creates a deep clone of the current entity with its identity/alias and it's property identities reset
/// </summary>
/// <returns></returns>
public IMediaType DeepCloneWithResetIdentities(string alias)
{
var clone = (MediaType)DeepClone();
clone.Alias = alias;
clone.Key = Guid.Empty;
foreach (var propertyGroup in clone.PropertyGroups)
{
propertyGroup.ResetIdentity();
propertyGroup.ResetDirtyProperties(false);
}
foreach (var propertyType in clone.PropertyTypes)
{
propertyType.ResetIdentity();
propertyType.ResetDirtyProperties(false);
}
clone.ResetIdentity();
clone.ResetDirtyProperties(false);
return clone;
}
}
}
+48 -4
View File
@@ -124,10 +124,54 @@ namespace Umbraco.Core.Models
bool typeValidation = _propertyType.IsPropertyTypeValid(value);
if (typeValidation == false)
throw new Exception(
string.Format(
"Type validation failed. The value type: '{0}' does not match the DataType in PropertyType with alias: '{1}'",
value == null ? "null" : value.GetType().Name, Alias));
{
// Normally we'll throw an exception here. However if the property is of a type that can have it's data field (dataInt, dataVarchar etc.)
// changed, we might have a value of the now "wrong" type. As of May 2016 Label is the only built-in property editor that supports this.
// In that case we should try to parse the value and return null if that's not possible rather than throwing an exception.
if (value != null && _propertyType.CanHaveDataValueTypeChanged())
{
var stringValue = value.ToString();
switch (_propertyType.DataTypeDatabaseType)
{
case DataTypeDatabaseType.Nvarchar:
case DataTypeDatabaseType.Ntext:
value = stringValue;
break;
case DataTypeDatabaseType.Integer:
int integerValue;
if (int.TryParse(stringValue, out integerValue) == false)
{
// Edge case, but if changed from decimal --> integer, the above tryparse will fail. So we'll try going
// via decimal too to return the integer value rather than zero.
decimal decimalForIntegerValue;
if (decimal.TryParse(stringValue, out decimalForIntegerValue))
{
integerValue = (int)decimalForIntegerValue;
}
}
value = integerValue;
break;
case DataTypeDatabaseType.Decimal:
decimal decimalValue;
decimal.TryParse(stringValue, out decimalValue);
value = decimalValue;
break;
case DataTypeDatabaseType.Date:
DateTime dateValue;
DateTime.TryParse(stringValue, out dateValue);
value = dateValue;
break;
}
}
else
{
throw new Exception(
string.Format(
"Type validation failed. The value type: '{0}' does not match the DataType in PropertyType with alias: '{1}'",
value == null ? "null" : value.GetType().Name, Alias));
}
}
SetPropertyValueAndDetectChanges(o =>
{
+16 -1
View File
@@ -1,5 +1,6 @@
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text.RegularExpressions;
@@ -221,8 +222,9 @@ namespace Umbraco.Core.Models
}
/// <summary>
/// Gets or Sets the PropertyGroup's Id for which this PropertyType belongs
/// Gets or sets the identifier of the PropertyGroup this PropertyType belongs to.
/// </summary>
/// <remarks>For generic properties, the value is <c>null</c>.</remarks>
[DataMember]
internal Lazy<int> PropertyGroupId
{
@@ -424,6 +426,19 @@ namespace Umbraco.Core.Models
return false;
}
/// <summary>
/// Checks the underlying property editor prevalues to see if the one that allows changing of the database field
/// to which data is saved (dataInt, dataVarchar etc.) is included. If so that means the field could be changed when the data
/// type is saved.
/// </summary>
/// <returns></returns>
internal bool CanHaveDataValueTypeChanged()
{
var propertyEditor = PropertyEditorResolver.Current.GetByAlias(_propertyEditorAlias);
return propertyEditor.PreValueEditor.Fields
.SingleOrDefault(x => x.Key == Constants.PropertyEditors.PreValueKeys.DataValueType) != null;
}
/// <summary>
/// Validates the Value from a Property according to the validation settings
/// </summary>
@@ -1,9 +1,6 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Web.Caching;
using System.Web.UI;
using Umbraco.Core.Cache;
namespace Umbraco.Core.Models.PublishedContent
@@ -16,6 +13,7 @@ namespace Umbraco.Core.Models.PublishedContent
public class PublishedContentType
{
private readonly PublishedPropertyType[] _propertyTypes;
private readonly HashSet<string> _compositionAliases;
// fast alias-to-index xref containing both the raw alias and its lowercase version
private readonly Dictionary<string, int> _indexes = new Dictionary<string, int>();
@@ -27,6 +25,7 @@ namespace Umbraco.Core.Models.PublishedContent
{
Id = contentType.Id;
Alias = contentType.Alias;
_compositionAliases = new HashSet<string>(contentType.CompositionAliases(), StringComparer.InvariantCultureIgnoreCase);
_propertyTypes = contentType.CompositionPropertyTypes
.Select(x => new PublishedPropertyType(this, x))
.ToArray();
@@ -34,10 +33,11 @@ namespace Umbraco.Core.Models.PublishedContent
}
// internal so it can be used for unit tests
internal PublishedContentType(int id, string alias, IEnumerable<PublishedPropertyType> propertyTypes)
internal PublishedContentType(int id, string alias, IEnumerable<string> compositionAliases, IEnumerable<PublishedPropertyType> propertyTypes)
{
Id = id;
Alias = alias;
_compositionAliases = new HashSet<string>(compositionAliases, StringComparer.InvariantCultureIgnoreCase);
_propertyTypes = propertyTypes.ToArray();
foreach (var propertyType in _propertyTypes)
propertyType.ContentType = this;
@@ -45,8 +45,8 @@ namespace Umbraco.Core.Models.PublishedContent
}
// create detached content type - ie does not match anything in the DB
internal PublishedContentType(string alias, IEnumerable<PublishedPropertyType> propertyTypes)
: this (0, alias, propertyTypes)
internal PublishedContentType(string alias, IEnumerable<string> compositionAliases, IEnumerable<PublishedPropertyType> propertyTypes)
: this(0, alias, compositionAliases, propertyTypes)
{ }
private void InitializeIndexes()
@@ -63,6 +63,7 @@ namespace Umbraco.Core.Models.PublishedContent
public int Id { get; private set; }
public string Alias { get; private set; }
public HashSet<string> CompositionAliases { get { return _compositionAliases; } }
#endregion
@@ -113,10 +114,25 @@ namespace Umbraco.Core.Models.PublishedContent
internal static void ClearContentType(int id)
{
Logging.LogHelper.Debug<PublishedContentType>("Clear content type w/id {0}.", () => id);
// requires a predicate because the key does not contain the ID
// faster than key strings comparisons anyway
// we don't support "get all" at the moment - so, cheating
var all = ApplicationContext.Current.ApplicationCache.StaticCache.GetCacheItemsByKeySearch<PublishedContentType>("PublishedContentType_").ToArray();
// the one we want to clear
var clr = all.FirstOrDefault(x => x.Id == id);
if (clr == null) return;
// those that have that one in their composition aliases
// note: CompositionAliases contains all recursive aliases
var oth = all.Where(x => x.CompositionAliases.InvariantContains(clr.Alias)).Select(x => x.Id);
// merge ids
var ids = oth.Concat(new[] { clr.Id }).ToArray();
// clear them all at once
// we don't support "clear many at once" at the moment - so, cheating
ApplicationContext.Current.ApplicationCache.StaticCache.ClearCacheObjectTypes<PublishedContentType>(
(key, value) => value.Id == id);
(key, value) => ids.Contains(value.Id));
}
internal static void ClearDataType(int id)
@@ -164,6 +164,9 @@ namespace Umbraco.Core.Models.PublishedContent
private void InitializeConverters()
{
//TODO: Look at optimizing this method, it gets run for every property type for the document being rendered at startup,
// every precious second counts!
var converters = PropertyValueConvertersResolver.Current.Converters.ToArray();
var defaultConvertersWithAttributes = PropertyValueConvertersResolver.Current.DefaultConverters;
@@ -1,4 +1,5 @@
using Umbraco.Core.Persistence;
using System;
using Umbraco.Core.Persistence;
namespace Umbraco.Core.Models.Rdbms
{
@@ -18,5 +19,8 @@ namespace Umbraco.Core.Models.Rdbms
[Column("contenttypeNodeId")]
public int ContentTypeNodeId { get; set; }
[Column("PropertyGroupUniqueID")]
public Guid UniqueId { get; set; }
}
}
@@ -51,5 +51,8 @@ namespace Umbraco.Core.Models.Rdbms
[Column("dbType")]
public string DbType { get; set; }
[Column("UniqueID")]
public Guid UniqueId { get; set; }
}
}
@@ -0,0 +1,114 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Semver;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.Migrations;
using Umbraco.Core.Services;
namespace Umbraco.Core.Packaging
{
internal class PackageMigrationsContext
{
private readonly DatabaseContext _dbContext;
private readonly IMigrationEntryService _migrationEntryService;
private readonly ILogger _logger;
public PackageMigrationsContext(DatabaseContext dbContext,
IMigrationEntryService migrationEntryService,
ILogger logger)
{
_dbContext = dbContext;
_migrationEntryService = migrationEntryService;
_logger = logger;
ResetPendingPackageMigrations();
}
//List of product names and their maximum sem version registered in migrations
private Lazy<ReadOnlyDictionary<string, SemVersion>> _packageVersionsConfigured;
/// <summary>
/// Called to initialize or when package migrations have executed - since an app restart is mandatory
/// </summary>
internal void ResetPendingPackageMigrations()
{
_packageVersionsConfigured = new Lazy<ReadOnlyDictionary<string, SemVersion>>(() =>
{
var result = new Dictionary<string, SemVersion>();
//The versions are the same in config, but are they the same in the database. We can only check this
// if we have a db context available, if we don't then we are not installed anyways
if (_dbContext.IsDatabaseConfigured && _dbContext.CanConnect)
{
//Now we can check if there are any package migrations that haven't been executed.
//Find and group the packages that have migrations.
//Then we need to determine if there are outstanding migrations that need to be run based on the
// migration versions stored in the db compared to the available migrations.
var packageMigrations = MigrationResolver.Current.MigrationMetaData
.Where(x => x.ProductName != GlobalSettings.UmbracoMigrationName)
.GroupBy(x => x.ProductName)
.ToArray();
var packageMigrationProductNames = packageMigrations.Select(x => x.Key).Distinct().ToArray();
var allPackageDbEntries = _migrationEntryService.FindEntries(packageMigrationProductNames)
.ToArray();
foreach (var packageMigration in packageMigrations)
{
var packageDbVersions = allPackageDbEntries
.Where(x => x.MigrationName.InvariantEquals(packageMigration.Key))
.Select(x => x.Version);
var notExecuted = packageMigration
.Select(x => x.TargetVersion.GetSemanticVersion())
.Except(packageDbVersions)
.ToArray();
if (notExecuted.Any())
{
var maxVersion = notExecuted.Max();
result.Add(packageMigration.Key, maxVersion);
_logger.Debug<ApplicationContext>(
string.Format("The migration {0} for version: '{1} has not been executed, there is no record in the database",
packageMigration.Key,
maxVersion.ToSemanticString()));
}
}
}
return new ReadOnlyDictionary<string, SemVersion>(result);
});
}
/// <summary>
/// Returns true if there are pending package migrations that need to be executed
/// </summary>
internal bool HasPendingPackageMigrations
{
get { return _packageVersionsConfigured.Value.Any(); }
}
/// <summary>
/// Returns the list of package migration names that need to be executed
/// </summary>
internal ReadOnlyDictionary<string, SemVersion> GetPendingPackageMigrations()
{
return _packageVersionsConfigured.Value;
}
/// <summary>
/// Returns the list of package migration names and versions that need to be executed
/// with the following format: PackageProductName (2.0.0)
/// </summary>
/// <returns></returns>
internal IEnumerable<string> GetPendingPackageMigrationFriendlyNames()
{
return _packageVersionsConfigured.Value.Select(x => string.Format("{0} ({1})", x.Key, x.Value));
}
}
}
@@ -75,6 +75,7 @@ namespace Umbraco.Core.Persistence.Factories
group.Id = groupDto.Id.Value;
}
group.Key = groupDto.UniqueId;
group.Name = groupDto.Text;
group.SortOrder = groupDto.SortOrder;
group.PropertyTypes = new PropertyTypeCollection();
@@ -114,7 +115,8 @@ namespace Umbraco.Core.Persistence.Factories
ValidationRegExp = typeDto.ValidationRegExp,
PropertyGroupId = new Lazy<int>(() => tempGroupDto.Id.Value),
CreateDate = memberType.CreateDate,
UpdateDate = memberType.UpdateDate
UpdateDate = memberType.UpdateDate,
Key = typeDto.UniqueId
};
//on initial construction we don't want to have dirty properties tracked
// http://issues.umbraco.org/issue/U4-1946
@@ -164,9 +166,10 @@ namespace Umbraco.Core.Persistence.Factories
Name = typeDto.Name,
SortOrder = typeDto.SortOrder,
ValidationRegExp = typeDto.ValidationRegExp,
PropertyGroupId = new Lazy<int>(() => default(int)),
PropertyGroupId = null,
CreateDate = dto.CreateDate,
UpdateDate = dto.CreateDate
UpdateDate = dto.CreateDate,
Key = typeDto.UniqueId
};
propertyTypes.Add(propertyType);
@@ -134,13 +134,16 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1043, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1043", SortOrder = 2, UniqueId = new Guid("1df9f033-e6d4-451f-b8d2-e0cbc50a836f"), Text = "Image Cropper", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1044, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1044", SortOrder = 0, UniqueId = new Guid("d59be02f-1df9-4228-aa1e-01917d806cda"), Text = Constants.Conventions.MemberTypes.DefaultAlias, NodeObjectType = new Guid(Constants.ObjectTypes.MemberType), CreateDate = DateTime.Now });
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1045, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1045", SortOrder = 2, UniqueId = new Guid("7E3962CC-CE20-4FFC-B661-5897A894BA7E"), Text = "Multiple Media Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
//TODO: We're not creating these for 7.0
//_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1039, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1039", SortOrder = 2, UniqueId = new Guid("06f349a9-c949-4b6a-8660-59c10451af42"), Text = "Ultimate Picker", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
//_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1038, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1038", SortOrder = 2, UniqueId = new Guid("1251c96c-185c-4e9b-93f4-b48205573cbd"), Text = "Simple Editor", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
//_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = 1042, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1,1042", SortOrder = 2, UniqueId = new Guid("0a452bd5-83f9-4bc3-8403-1286e13fb77e"), Text = "Macro Container", NodeObjectType = new Guid(Constants.ObjectTypes.DataType), CreateDate = DateTime.Now });
// all lock objects
_database.Insert("umbracoNode", "id", false, new NodeDto { NodeId = Constants.System.ServersLock, Trashed = false, ParentId = -1, UserId = 0, Level = 1, Path = "-1," + Constants.System.ServersLock, SortOrder = 1, UniqueId = new Guid("0AF5E610-A310-4B6F-925F-E928D5416AF7"), Text = "LOCK: Servers", NodeObjectType = Constants.ObjectTypes.LockObjectGuid, CreateDate = DateTime.Now });
}
private void CreateCmsContentTypeData()
@@ -237,8 +240,8 @@ namespace Umbraco.Core.Persistence.Migrations.Initial
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 14, DataTypeId = -42, PropertyEditorAlias = Constants.PropertyEditors.DropDownListAlias, DbType = "Integer" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 15, DataTypeId = -43, PropertyEditorAlias = Constants.PropertyEditors.CheckBoxListAlias, DbType = "Nvarchar" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 16, DataTypeId = 1034, PropertyEditorAlias = Constants.PropertyEditors.ContentPickerAlias, DbType = "Integer" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 17, DataTypeId = 1035, PropertyEditorAlias = Constants.PropertyEditors.MediaPickerAlias, DbType = "Integer" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 18, DataTypeId = 1036, PropertyEditorAlias = Constants.PropertyEditors.MemberPickerAlias, DbType = "Integer" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 17, DataTypeId = 1035, PropertyEditorAlias = Constants.PropertyEditors.MultipleMediaPickerAlias, DbType = "Nvarchar" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 21, DataTypeId = 1040, PropertyEditorAlias = Constants.PropertyEditors.RelatedLinksAlias, DbType = "Ntext" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 22, DataTypeId = 1041, PropertyEditorAlias = Constants.PropertyEditors.TagsAlias, DbType = "Ntext" });
_database.Insert("cmsDataType", "pk", false, new DataTypeDto { PrimaryKey = 24, DataTypeId = 1043, PropertyEditorAlias = Constants.PropertyEditors.ImageCropperAlias, DbType = "Ntext" });
@@ -33,6 +33,11 @@ namespace Umbraco.Core.Persistence.Migrations
get { return Values; }
}
public IEnumerable<MigrationAttribute> MigrationMetaData
{
get { return Values.SelectMany(x => x.GetType().GetCustomAttributes<MigrationAttribute>(false)).WhereNotNull(); }
}
/// <summary>
/// This will ctor the IMigration instances
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
@@ -27,18 +28,21 @@ namespace Umbraco.Core.Persistence.Migrations
private readonly IMigration[] _migrations;
[Obsolete("Use the ctor that specifies all dependencies instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public MigrationRunner(Version currentVersion, Version targetVersion, string productName)
: this(LoggerResolver.Current.Logger, currentVersion, targetVersion, productName)
{
}
[Obsolete("Use the ctor that specifies all dependencies instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public MigrationRunner(ILogger logger, Version currentVersion, Version targetVersion, string productName)
: this(logger, currentVersion, targetVersion, productName, null)
{
}
[Obsolete("Use the ctor that specifies all dependencies instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public MigrationRunner(ILogger logger, Version currentVersion, Version targetVersion, string productName, params IMigration[] migrations)
: this(ApplicationContext.Current.Services.MigrationEntryService, logger, new SemVersion(currentVersion), new SemVersion(targetVersion), productName, migrations)
{
@@ -90,9 +94,8 @@ namespace Umbraco.Core.Persistence.Migrations
var migrations = isUpgrade
? OrderedUpgradeMigrations(foundMigrations).ToList()
: OrderedDowngradeMigrations(foundMigrations).ToList();
if (Migrating.IsRaisedEventCancelled(new MigrationEventArgs(migrations, _currentVersion, _targetVersion, true), this))
if (Migrating.IsRaisedEventCancelled(new MigrationEventArgs(migrations, _currentVersion, _targetVersion, _productName, true), this))
{
_logger.Warn<MigrationRunner>("Migration was cancelled by an event");
return false;
@@ -121,7 +124,7 @@ namespace Umbraco.Core.Persistence.Migrations
throw;
}
Migrated.RaiseEvent(new MigrationEventArgs(migrations, migrationContext, _currentVersion, _targetVersion, false), this);
Migrated.RaiseEvent(new MigrationEventArgs(migrations, migrationContext, _currentVersion, _targetVersion, _productName, false), this);
return true;
}
@@ -294,7 +297,6 @@ namespace Umbraco.Core.Persistence.Migrations
{
_migrationEntryService.CreateEntry(_productName, _targetVersion);
}
}
}
@@ -0,0 +1,32 @@
using System.Linq;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionFourOneZero
{
[Migration("4.1.0", 0, GlobalSettings.UmbracoMigrationName)]
public class AddPreviewXmlTable : MigrationBase
{
public AddPreviewXmlTable(ISqlSyntaxProvider sqlSyntax, ILogger logger)
: base(sqlSyntax, logger)
{
}
public override void Up()
{
var tableName = "cmsPreviewXml";
var tables = SqlSyntax.GetTablesInSchema(Context.Database).ToArray();
if (tables.InvariantContains(tableName)) return;
Create.Table(tableName)
.WithColumn("nodeId").AsInt32().NotNullable()
.WithColumn("versionId").AsGuid().NotNullable()
.WithColumn("timestamp").AsDateTime().NotNullable()
.WithColumn("xml").AsString();
}
public override void Down()
{ }
}
}
@@ -32,17 +32,19 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven
{
if (database != null)
{
var dtSql = new Sql().Select("nodeId").From<DataTypeDto>().Where<DataTypeDto>(dto => dto.PropertyEditorAlias == Constants.PropertyEditors.RelatedLinksAlias);
var dtSql = new Sql().Select("nodeId")
.From<DataTypeDto>(SqlSyntax)
.Where<DataTypeDto>(dto => dto.PropertyEditorAlias == Constants.PropertyEditors.RelatedLinksAlias);
var dataTypeIds = database.Fetch<int>(dtSql);
if (dataTypeIds.Any() == false) return string.Empty;
if (!dataTypeIds.Any()) return string.Empty;
// need to use dynamic, as PropertyDataDto has new properties
// need to use dynamic, as PropertyDataDto has new properties (eg decimal...) in further versions that don't exist yet
var propertyData = database.Fetch<dynamic>("SELECT * FROM cmsPropertyData"
+ " WHERE propertyTypeId in (SELECT id from cmsPropertyType where dataTypeID IN (@dataTypeIds))", new { dataTypeIds = dataTypeIds });
if (!propertyData.Any()) return string.Empty;
+ " WHERE propertyTypeId in (SELECT id from cmsPropertyType where dataTypeID IN (@dataTypeIds))", new { /*dataTypeIds =*/ dataTypeIds });
if (propertyData.Any() == false) return string.Empty;
var nodesIdsWithProperty = propertyData.Select(x => x.NodeId).Distinct().ToArray();
var nodesIdsWithProperty = propertyData.Select(x => (int) x.contentNodeId).Distinct().ToArray();
var cmsContentXmlEntries = new List<ContentXmlDto>();
//We're doing an "IN" query here but SQL server only supports 2100 query parameters so we're going to split on that
@@ -54,32 +56,32 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven
cmsContentXmlEntries.AddRange(database.Fetch<ContentXmlDto>("WHERE nodeId in (@nodeIds)", new { nodeIds = batch }));
}
var propertyTypeIds = propertyData.Select(x => x.PropertyTypeId).Distinct();
var propertyTypeIds = propertyData.Select(x => (int) x.propertytypeid).Distinct();
//NOTE: We are writing the full query because we've added a column to the PropertyTypeDto in later versions so one of the columns
// won't exist yet
var propertyTypes = database.Fetch<PropertyTypeDto>("SELECT * FROM cmsPropertyType WHERE id in (@propertyTypeIds)", new { propertyTypeIds = propertyTypeIds });
foreach (var data in propertyData)
{
if (string.IsNullOrEmpty(data.Text) == false)
if (string.IsNullOrEmpty(data.dataNtext) == false)
{
XmlDocument xml;
//fetch the current data (that's in xml format)
try
{
xml = new XmlDocument();
xml.LoadXml(data.Text);
xml.LoadXml(data.dataNtext);
}
catch (Exception ex)
{
int dataId = data.id;
int dataNodeId = data.nodeId;
string dataText = data.dataNText;
Logger.Error<UpdateRelatedLinksData>("The data stored for property id " + dataId + " on document " + dataNodeId +
int dataNodeId = data.contentNodeId;
string dataText = data.dataNtext;
Logger.Error<UpdateRelatedLinksData>("The data stored for property id " + dataId + " on document " + dataNodeId +
" is not valid XML, the data will be removed because it cannot be converted to the new format. The value was: " + dataText, ex);
data.dataNText = "";
data.dataNtext = "";
database.Update("cmsPropertyData", "id", data, new[] { "dataNText" });
UpdateXmlTable(propertyTypes, data, cmsContentXmlEntries, database);
@@ -113,7 +115,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven
}
//store the serialized data
data.dataNText = JsonConvert.SerializeObject(links);
data.dataNtext = JsonConvert.SerializeObject(links);
database.Update("cmsPropertyData", "id", data, new[] { "dataNText" });
@@ -130,20 +132,20 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven
throw new DataLossException("Cannot downgrade from a version 7 database to a prior version, the database schema has already been modified");
}
private static void UpdateXmlTable(List<PropertyTypeDto> propertyTypes, PropertyDataDto data, List<ContentXmlDto> cmsContentXmlEntries, Database database)
private static void UpdateXmlTable(List<PropertyTypeDto> propertyTypes, dynamic data, List<ContentXmlDto> cmsContentXmlEntries, Database database)
{
//now we need to update the cmsContentXml table
var propertyType = propertyTypes.SingleOrDefault(x => x.Id == data.PropertyTypeId);
var propertyType = propertyTypes.SingleOrDefault(x => x.Id == data.propertytypeid);
if (propertyType != null)
{
var xmlItem = cmsContentXmlEntries.SingleOrDefault(x => x.NodeId == data.NodeId);
var xmlItem = cmsContentXmlEntries.SingleOrDefault(x => x.NodeId == data.contentNodeId);
if (xmlItem != null)
{
var x = XElement.Parse(xmlItem.Xml);
var prop = x.Element(propertyType.Alias);
if (prop != null)
{
prop.ReplaceAll(new XCData(data.Text));
prop.ReplaceAll(new XCData(data.dataNtext));
database.Update(xmlItem);
}
}
@@ -0,0 +1,57 @@
using System;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFiveZero
{
// This migration exists for 7.3.0 but it seems like it was not always running properly
// if you're upgrading from 7.3.0 or higher than we add this migration, if you're upgrading
// from 7.3.0 or lower then you will already get this migration in the migration to get to 7.3.0
[Migration("7.3.0", "7.5.0", 10, GlobalSettings.UmbracoMigrationName)]
public class EnsureServersLockObject : MigrationBase
{
public EnsureServersLockObject(ISqlSyntaxProvider sqlSyntax, ILogger logger)
: base(sqlSyntax, logger)
{ }
public override void Up()
{
// that lock object should have been part of BaseDataCreation since 7.3.0 but
// for some reason it was not, so it was created during migrations but not during
// new installs, so for ppl that upgrade, make sure they have it
EnsureLockObject(Constants.System.ServersLock, "0AF5E610-A310-4B6F-925F-E928D5416AF7", "LOCK: Servers");
}
public override void Down()
{
// not implemented
}
private void EnsureLockObject(int id, string uniqueId, string text)
{
var exists = Context.Database.Exists<NodeDto>(id);
if (exists) return;
Insert
.IntoTable("umbracoNode")
.EnableIdentityInsert()
.Row(new
{
id = id, // NodeId
trashed = false,
parentId = -1,
nodeUser = 0,
level = 1,
path = "-1," + id,
sortOrder = 0,
uniqueId = new Guid(uniqueId),
text = text,
nodeObjectType = new Guid(Constants.ObjectTypes.LockObject),
createDate = DateTime.Now
});
}
}
}
@@ -20,7 +20,17 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenFourZer
if (columns.Any(x => x.TableName.InvariantEquals("cmsPropertyTypeGroup") && x.ColumnName.InvariantEquals("parentGroupId")) == false)
return;
Delete.ForeignKey("FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup_id").OnTable("cmsPropertyTypeGroup");
//This constraing can be based on old aliases, before removing them, check they exist
var constraints = SqlSyntax.GetConstraintsPerColumn(Context.Database).Distinct().ToArray();
if (constraints.Any(x => x.Item1.InvariantEquals("cmsPropertyTypeGroup") && x.Item3.InvariantEquals("FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup_id")))
{
Delete.ForeignKey("FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup_id").OnTable("cmsPropertyTypeGroup");
}
if (constraints.Any(x => x.Item1.InvariantEquals("cmsPropertyTypeGroup") && x.Item3.InvariantEquals("FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup")))
{
Delete.ForeignKey("FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup").OnTable("cmsPropertyTypeGroup");
}
Delete.Column("parentGroupId").FromTable("cmsPropertyTypeGroup");
}
@@ -128,6 +128,34 @@ namespace Umbraco.Core.Persistence.Querying
right = Visit(b.Right);
}
}
else if (operand == "=")
{
// deal with (x == true|false) - most common
var constRight = b.Right as ConstantExpression;
if (constRight != null && constRight.Type == typeof (bool))
return ((bool) constRight.Value) ? VisitNotNot(b.Left) : VisitNot(b.Left);
right = Visit(b.Right);
// deal with (true|false == x) - why not
var constLeft = b.Left as ConstantExpression;
if (constLeft != null && constLeft.Type == typeof (bool))
return ((bool) constLeft.Value) ? VisitNotNot(b.Right) : VisitNot(b.Right);
left = Visit(b.Left);
}
else if (operand == "<>")
{
// deal with (x != true|false) - most common
var constRight = b.Right as ConstantExpression;
if (constRight != null && constRight.Type == typeof(bool))
return ((bool) constRight.Value) ? VisitNot(b.Left) : VisitNotNot(b.Left);
right = Visit(b.Right);
// deal with (true|false != x) - why not
var constLeft = b.Left as ConstantExpression;
if (constLeft != null && constLeft.Type == typeof(bool))
return ((bool) constLeft.Value) ? VisitNot(b.Right) : VisitNotNot(b.Right);
left = Visit(b.Left);
}
else
{
left = Visit(b.Left);
@@ -152,7 +180,7 @@ namespace Umbraco.Core.Persistence.Querying
case "COALESCE":
return string.Format("{0}({1},{2})", operand, left, right);
default:
return left + " " + operand + " " + right;
return "(" + left + " " + operand + " " + right + ")";
}
}
@@ -231,25 +259,47 @@ namespace Umbraco.Core.Persistence.Querying
switch (u.NodeType)
{
case ExpressionType.Not:
var o = Visit(u.Operand);
//use a Not equal operator instead of <> since we don't know that <> works in all sql servers
switch (u.Operand.NodeType)
{
case ExpressionType.MemberAccess:
//In this case it wil be a false property , i.e. x => !Trashed
SqlParameters.Add(true);
return string.Format("NOT ({0} = @0)", o);
default:
//In this case it could be anything else, such as: x => !x.Path.StartsWith("-20")
return string.Format("NOT ({0})", o);
}
return VisitNot(u.Operand);
default:
return Visit(u.Operand);
}
}
private string VisitNot(Expression exp)
{
var o = Visit(exp);
// use a "NOT (...)" syntax instead of "<>" since we don't know whether "<>" works in all sql servers
// also, x.StartsWith(...) translates to "x LIKE '...%'" which we cannot "<>" and have to "NOT (...")
switch (exp.NodeType)
{
case ExpressionType.MemberAccess:
// false property , i.e. x => !Trashed
SqlParameters.Add(true);
return string.Format("NOT ({0} = @{1})", o, SqlParameters.Count - 1);
default:
// could be anything else, such as: x => !x.Path.StartsWith("-20")
return "NOT (" + o + ")";
}
}
private string VisitNotNot(Expression exp)
{
var o = Visit(exp);
switch (exp.NodeType)
{
case ExpressionType.MemberAccess:
// true property, i.e. x => Trashed
SqlParameters.Add(true);
return string.Format("({0} = @{1})", o, SqlParameters.Count - 1);
default:
// could be anything else, such as: x => x.Path.StartsWith("-20")
return o;
}
}
protected virtual string VisitNewArray(NewArrayExpression na)
{
@@ -105,6 +105,7 @@ namespace Umbraco.Core.Persistence.Repositories
#region Overrides of PetaPocoRepositoryBase<IContent>
protected override Sql GetBaseQuery(bool isCount)
{
var sqlx = string.Format("LEFT OUTER JOIN {0} {1} ON ({1}.{2}={0}.{2} AND {1}.{3}=1)",
@@ -241,8 +242,8 @@ namespace Umbraco.Core.Persistence.Repositories
// see: http://issues.umbraco.org/issue/U4-6322 & http://issues.umbraco.org/issue/U4-5982
var descendants = GetPagedResultsByQuery<DocumentDto, Content>(query, pageIndex, pageSize, out total,
new Tuple<string, string>("cmsDocument", "nodeId"),
ProcessQuery, "Path", Direction.Ascending);
ProcessQuery, "Path", Direction.Ascending, true);
var xmlItems = (from descendant in descendants
let xml = serializer(descendant)
select new ContentXmlDto { NodeId = descendant.Id, Xml = xml.ToDataString() }).ToArray();
@@ -766,10 +767,11 @@ namespace Umbraco.Core.Persistence.Repositories
/// <param name="totalRecords">Total records query would return without paging</param>
/// <param name="orderBy">Field to order by</param>
/// <param name="orderDirection">Direction to order by</param>
/// <param name="orderBySystemField">Flag to indicate when ordering by system field</param>
/// <param name="filter">Search text filter</param>
/// <returns>An Enumerable list of <see cref="IContent"/> objects</returns>
public IEnumerable<IContent> GetPagedResultsByQuery(IQuery<IContent> query, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, string filter = "")
string orderBy, Direction orderDirection, bool orderBySystemField, string filter = "")
{
//NOTE: This uses the GetBaseQuery method but that does not take into account the required 'newest' field which is
@@ -788,7 +790,7 @@ namespace Umbraco.Core.Persistence.Repositories
return GetPagedResultsByQuery<DocumentDto, Content>(query, pageIndex, pageSize, out totalRecords,
new Tuple<string, string>("cmsDocument", "nodeId"),
ProcessQuery, orderBy, orderDirection,
ProcessQuery, orderBy, orderDirection, orderBySystemField,
filterCallback);
}
@@ -914,7 +914,7 @@ AND umbracoNode.id <> @id",
//check for default templates
bool? isDefaultTemplate = Convert.ToBoolean(ct.dtIsDefault);
int? templateId = ct.dtTemplateId;
if (currDefaultTemplate == -1 && isDefaultTemplate.HasValue && templateId.HasValue)
if (currDefaultTemplate == -1 && isDefaultTemplate.HasValue && isDefaultTemplate.Value && templateId.HasValue)
{
currDefaultTemplate = templateId.Value;
}
@@ -1212,5 +1212,19 @@ AND umbracoNode.id <> @id",
{
return PerformExists(id);
}
public string GetUniqueAlias(string alias)
{
// alias is unique accross ALL content types!
var aliasColumn = SqlSyntax.GetQuotedColumnName("alias");
var aliases = Database.Fetch<string>(@"SELECT cmsContentType." + aliasColumn + @" FROM cmsContentType
INNER JOIN umbracoNode ON cmsContentType.nodeId = umbracoNode.id
WHERE cmsContentType." + aliasColumn + @" LIKE @pattern",
new { pattern = alias + "%", objectType = NodeObjectTypeId });
var i = 1;
string test;
while (aliases.Contains(test = alias + i)) i++;
return test;
}
}
}
@@ -84,9 +84,10 @@ namespace Umbraco.Core.Persistence.Repositories
/// <param name="totalRecords">Total records query would return without paging</param>
/// <param name="orderBy">Field to order by</param>
/// <param name="orderDirection">Direction to order by</param>
/// <param name="orderBySystemField">Flag to indicate when ordering by system field</param>
/// <param name="filter">Search text filter</param>
/// <returns>An Enumerable list of <see cref="IContent"/> objects</returns>
IEnumerable<IContent> GetPagedResultsByQuery(IQuery<IContent> query, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, string filter = "");
string orderBy, Direction orderDirection, bool orderBySystemField, string filter = "");
}
}
@@ -32,5 +32,13 @@ namespace Umbraco.Core.Persistence.Repositories
/// </param>
/// <returns></returns>
IEnumerable<string> GetAllContentTypeAliases(params Guid[] objectTypes);
/// <summary>
/// Derives a unique alias from an existing alias.
/// </summary>
/// <param name="alias">The original alias.</param>
/// <returns>The original alias with a number appended to it, so that it is unique.</returns>
/// /// <remarks>Unique accross all content, media and member types.</remarks>
string GetUniqueAlias(string alias);
}
}
@@ -9,7 +9,7 @@ namespace Umbraco.Core.Persistence.Repositories
{
public interface IMediaRepository : IRepositoryVersionable<int, IMedia>, IRecycleBinRepository<IMedia>, IDeleteMediaFilesRepository
{
/// <summary>
/// Used to add/update published xml for the media item
/// </summary>
@@ -33,9 +33,10 @@ namespace Umbraco.Core.Persistence.Repositories
/// <param name="totalRecords">Total records query would return without paging</param>
/// <param name="orderBy">Field to order by</param>
/// <param name="orderDirection">Direction to order by</param>
/// <param name="orderBySystemField">Flag to indicate when ordering by system field</param>
/// <param name="filter">Search text filter</param>
/// <returns>An Enumerable list of <see cref="IMedia"/> objects</returns>
IEnumerable<IMedia> GetPagedResultsByQuery(IQuery<IMedia> query, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, string filter = "");
string orderBy, Direction orderDirection, bool orderBySystemField, string filter = "");
}
}
@@ -15,5 +15,13 @@ namespace Umbraco.Core.Persistence.Repositories
IEnumerable<IMediaType> GetByQuery(IQuery<PropertyType> query);
IEnumerable<MoveEventInfo<IMediaType>> Move(IMediaType toMove, EntityContainer container);
/// <summary>
/// Derives a unique alias from an existing alias.
/// </summary>
/// <param name="alias">The original alias.</param>
/// <returns>The original alias with a number appended to it, so that it is unique.</returns>
/// <remarks>Unique accross all content, media and member types.</remarks>
string GetUniqueAlias(string alias);
}
}
@@ -44,16 +44,17 @@ namespace Umbraco.Core.Persistence.Repositories
/// <summary>
/// Gets paged member results
/// </summary>
/// <param name="query"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="totalRecords"></param>
/// <param name="orderBy"></param>
/// <param name="orderDirection"></param>
/// <param name="filter"></param>
/// <param name="query">The query.</param>
/// <param name="pageIndex">Index of the page.</param>
/// <param name="pageSize">Size of the page.</param>
/// <param name="totalRecords">The total records.</param>
/// <param name="orderBy">The order by column</param>
/// <param name="orderDirection">The order direction.</param>
/// <param name="orderBySystemField">Flag to indicate when ordering by system field</param>
/// <param name="filter">Search query</param>
/// <returns></returns>
IEnumerable<IMember> GetPagedResultsByQuery(IQuery<IMember> query, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, string filter = "");
string orderBy, Direction orderDirection, bool orderBySystemField, string filter = "");
//IEnumerable<IMember> GetPagedResultsByQuery<TDto>(
// Sql sql, int pageIndex, int pageSize, out int totalRecords,
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using Semver;
using Umbraco.Core.Models;
@@ -7,5 +8,9 @@ namespace Umbraco.Core.Persistence.Repositories
public interface IMigrationEntryRepository : IRepositoryQueryable<int, IMigrationEntry>
{
IMigrationEntry FindEntry(string migrationName, SemVersion version);
IEnumerable<IMigrationEntry> FindEntries(SemVersion version, IEnumerable<string> migrationNames);
IEnumerable<IMigrationEntry> FindEntries(IEnumerable<string> migrationNames);
IEnumerable<IMigrationEntry> FindEntries(string migrationName);
}
}
@@ -232,7 +232,7 @@ namespace Umbraco.Core.Persistence.Repositories
var processed = 0;
do
{
var descendants = GetPagedResultsByQuery(query, pageIndex, pageSize, out total, "Path", Direction.Ascending);
var descendants = GetPagedResultsByQuery(query, pageIndex, pageSize, out total, "Path", Direction.Ascending, true);
var xmlItems = (from descendant in descendants
let xml = serializer(descendant)
@@ -442,10 +442,11 @@ namespace Umbraco.Core.Persistence.Repositories
/// <param name="totalRecords">Total records query would return without paging</param>
/// <param name="orderBy">Field to order by</param>
/// <param name="orderDirection">Direction to order by</param>
/// <param name="orderBySystemField">Flag to indicate when ordering by system field</param>
/// <param name="filter">Search text filter</param>
/// <returns>An Enumerable list of <see cref="IMedia"/> objects</returns>
public IEnumerable<IMedia> GetPagedResultsByQuery(IQuery<IMedia> query, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, string filter = "")
string orderBy, Direction orderDirection, bool orderBySystemField, string filter = "")
{
var args = new List<object>();
var sbWhere = new StringBuilder();
@@ -459,7 +460,7 @@ namespace Umbraco.Core.Persistence.Repositories
return GetPagedResultsByQuery<ContentVersionDto, Models.Media>(query, pageIndex, pageSize, out totalRecords,
new Tuple<string, string>("cmsContentVersion", "contentId"),
ProcessQuery, orderBy, orderDirection,
ProcessQuery, orderBy, orderDirection, orderBySystemField,
filterCallback);
}
@@ -468,7 +469,7 @@ namespace Umbraco.Core.Persistence.Repositories
{
//NOTE: This doesn't allow properties to be part of the query
var dtos = Database.Fetch<ContentVersionDto, ContentDto, NodeDto>(sql);
var ids = dtos.Select(x => x.ContentDto.ContentTypeId).ToArray();
//content types
@@ -74,7 +74,7 @@ namespace Umbraco.Core.Persistence.Repositories
}
return ProcessQuery(sql);
}
protected override IEnumerable<IMember> PerformGetByQuery(IQuery<IMember> query)
@@ -95,7 +95,7 @@ namespace Umbraco.Core.Persistence.Repositories
baseQuery.Append(new Sql("WHERE umbracoNode.id IN (" + sql.SQL + ")", sql.Arguments))
.OrderBy<NodeDto>(x => x.SortOrder);
return ProcessQuery(baseQuery);
return ProcessQuery(baseQuery);
}
else
{
@@ -103,7 +103,7 @@ namespace Umbraco.Core.Persistence.Repositories
var sql = translator.Translate()
.OrderBy<NodeDto>(x => x.SortOrder);
return ProcessQuery(sql);
return ProcessQuery(sql);
}
}
@@ -118,7 +118,7 @@ namespace Umbraco.Core.Persistence.Repositories
sql.Select(isCount ? "COUNT(*)" : "*")
.From<MemberDto>()
.InnerJoin<ContentVersionDto>()
.On<ContentVersionDto, MemberDto>(left => left.NodeId, right => right.NodeId)
.On<ContentVersionDto, MemberDto>(left => left.NodeId, right => right.NodeId)
.InnerJoin<ContentDto>()
.On<ContentVersionDto, ContentDto>(left => left.NodeId, right => right.NodeId)
//We're joining the type so we can do a query against the member type - not sure if this adds much overhead or not?
@@ -269,7 +269,7 @@ namespace Umbraco.Core.Persistence.Repositories
//Ensure that strings don't contain characters that are invalid in XML
entity.SanitizeEntityPropertiesForXmlStorage();
var dirtyEntity = (ICanBeDirty) entity;
var dirtyEntity = (ICanBeDirty)entity;
//Look up parent to get and set the correct Path and update SortOrder if ParentId has changed
if (dirtyEntity.IsPropertyDirty("ParentId"))
@@ -308,9 +308,9 @@ namespace Umbraco.Core.Persistence.Repositories
//Updates the current version - cmsContentVersion
//Assumes a Version guid exists and Version date (modified date) has been set/updated
Database.Update(dto.ContentVersionDto);
//Updates the cmsMember entry if it has changed
//NOTE: these cols are the REAL column names in the db
var changedCols = new List<string>();
@@ -330,13 +330,13 @@ namespace Umbraco.Core.Persistence.Repositories
//only update the changed cols
if (changedCols.Count > 0)
{
Database.Update(dto, changedCols);
Database.Update(dto, changedCols);
}
//TODO ContentType for the Member entity
//Create the PropertyData for this version - cmsPropertyData
var propertyFactory = new PropertyFactory(entity.ContentType.CompositionPropertyTypes.ToArray(), entity.Version, entity.Id);
var propertyFactory = new PropertyFactory(entity.ContentType.CompositionPropertyTypes.ToArray(), entity.Version, entity.Id);
var keyDictionary = new Dictionary<int, int>();
//Add Properties
@@ -447,7 +447,7 @@ namespace Umbraco.Core.Persistence.Repositories
var processed = 0;
do
{
var descendants = GetPagedResultsByQuery(query, pageIndex, pageSize, out total, "Path", Direction.Ascending);
var descendants = GetPagedResultsByQuery(query, pageIndex, pageSize, out total, "Path", Direction.Ascending, true);
var xmlItems = (from descendant in descendants
let xml = serializer(descendant)
@@ -559,7 +559,7 @@ namespace Umbraco.Core.Persistence.Repositories
var grpQry = new Query<IMemberGroup>().Where(group => group.Name.Equals(groupName));
var memberGroup = _memberGroupRepository.GetByQuery(grpQry).FirstOrDefault();
if (memberGroup == null) return Enumerable.Empty<IMember>();
var subQuery = new Sql().Select("Member").From<Member2MemberGroupDto>().Where<Member2MemberGroupDto>(dto => dto.MemberGroup == memberGroup.Id);
var sql = GetBaseQuery(false)
@@ -568,7 +568,7 @@ namespace Umbraco.Core.Persistence.Repositories
.Append(new Sql("WHERE umbracoNode.id IN (" + subQuery.SQL + ")", subQuery.Arguments))
.OrderByDescending<ContentVersionDto>(x => x.VersionDate)
.OrderBy<NodeDto>(x => x.SortOrder);
return ProcessQuery(sql);
}
@@ -593,7 +593,7 @@ namespace Umbraco.Core.Persistence.Repositories
//get the COUNT base query
var fullSql = GetBaseQuery(true)
.Append(new Sql("WHERE umbracoNode.id IN (" + sql.SQL + ")", sql.Arguments));
return Database.ExecuteScalar<int>(fullSql);
}
@@ -603,18 +603,19 @@ namespace Umbraco.Core.Persistence.Repositories
/// <param name="query">
/// The where clause, if this is null all records are queried
/// </param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="totalRecords"></param>
/// <param name="orderBy"></param>
/// <param name="orderDirection"></param>
/// <param name="filter"></param>
/// <param name="pageIndex">Index of the page.</param>
/// <param name="pageSize">Size of the page.</param>
/// <param name="totalRecords">The total records.</param>
/// <param name="orderBy">The order by column</param>
/// <param name="orderDirection">The order direction.</param>
/// <param name="orderBySystemField">Flag to indicate when ordering by system field</param>
/// <param name="filter">Search query</param>
/// <returns></returns>
/// <remarks>
/// The query supplied will ONLY work with data specifically on the cmsMember table because we are using PetaPoco paging (SQL paging)
/// </remarks>
public IEnumerable<IMember> GetPagedResultsByQuery(IQuery<IMember> query, long pageIndex, int pageSize, out long totalRecords,
string orderBy, Direction orderDirection, string filter = "")
string orderBy, Direction orderDirection, bool orderBySystemField, string filter = "")
{
var args = new List<object>();
var sbWhere = new StringBuilder();
@@ -625,14 +626,14 @@ namespace Umbraco.Core.Persistence.Repositories
"OR (cmsMember.LoginName LIKE @0" + args.Count + "))");
args.Add("%" + filter + "%");
filterCallback = () => new Tuple<string, object[]>(sbWhere.ToString().Trim(), args.ToArray());
}
}
return GetPagedResultsByQuery<MemberDto, Member>(query, pageIndex, pageSize, out totalRecords,
new Tuple<string, string>("cmsMember", "nodeId"),
ProcessQuery, orderBy, orderDirection,
ProcessQuery, orderBy, orderDirection, orderBySystemField,
filterCallback);
}
public void AddOrUpdateContentXml(IMember content, Func<IMember, XElement> xml)
{
_contentXmlRepository.AddOrUpdate(new ContentXmlEntity<IMember>(content, xml));
@@ -682,7 +683,7 @@ namespace Umbraco.Core.Persistence.Repositories
var dtosWithContentTypes = dtos
//This select into and null check are required because we don't have a foreign damn key on the contentType column
// http://issues.umbraco.org/issue/U4-5503
.Select(x => new {dto = x, contentType = contentTypes.FirstOrDefault(ct => ct.Id == x.ContentVersionDto.ContentDto.ContentTypeId)})
.Select(x => new { dto = x, contentType = contentTypes.FirstOrDefault(ct => ct.Id == x.ContentVersionDto.ContentDto.ContentTypeId) })
.Where(x => x.contentType != null)
.ToArray();
@@ -694,12 +695,12 @@ namespace Umbraco.Core.Persistence.Repositories
d.dto.ContentVersionDto.ContentDto.NodeDto.CreateDate,
d.contentType));
var propertyData = GetPropertyCollection(sql, docDefs);
var propertyData = GetPropertyCollection(sql, docDefs);
return dtosWithContentTypes.Select(d => CreateMemberFromDto(
d.dto,
contentTypes.First(ct => ct.Id == d.dto.ContentVersionDto.ContentDto.ContentTypeId),
propertyData[d.dto.NodeId]));
propertyData[d.dto.NodeId]));
}
/// <summary>
@@ -94,11 +94,11 @@ namespace Umbraco.Core.Persistence.Repositories
}
sql.Select("umbracoNode.*", "cmsContentType.*", "cmsPropertyType.id AS PropertyTypeId", "cmsPropertyType.Alias",
"cmsPropertyType.Name", "cmsPropertyType.Description", "cmsPropertyType.mandatory",
"cmsPropertyType.Name", "cmsPropertyType.Description", "cmsPropertyType.mandatory", "cmsPropertyType.UniqueID",
"cmsPropertyType.validationRegExp", "cmsPropertyType.dataTypeId", "cmsPropertyType.sortOrder AS PropertyTypeSortOrder",
"cmsPropertyType.propertyTypeGroupId AS PropertyTypesGroupId", "cmsMemberType.memberCanEdit", "cmsMemberType.viewOnProfile",
"cmsDataType.propertyEditorAlias", "cmsDataType.dbType", "cmsPropertyTypeGroup.id AS PropertyTypeGroupId",
"cmsPropertyTypeGroup.text AS PropertyGroupName",
"cmsPropertyTypeGroup.text AS PropertyGroupName", "cmsPropertyTypeGroup.uniqueID AS PropertyGroupUniqueID",
"cmsPropertyTypeGroup.sortorder AS PropertyGroupSortOrder", "cmsPropertyTypeGroup.contenttypeNodeId")
.From<NodeDto>()
.InnerJoin<ContentTypeDto>().On<ContentTypeDto, NodeDto>(left => left.NodeId, right => right.NodeId)
@@ -128,5 +128,53 @@ namespace Umbraco.Core.Persistence.Repositories
return result == null ? null : factory.BuildEntity(result);
}
public IEnumerable<IMigrationEntry> FindEntries(SemVersion version, IEnumerable<string> migrationNames)
{
if (migrationNames.Any() == false) return Enumerable.Empty<IMigrationEntry>();
var versionString = version.ToString();
var sql = new Sql().Select("*")
.From<MigrationDto>(SqlSyntax)
.Where(
SqlSyntax.GetQuotedColumnName("version") + "=@versionString AND " +
SqlSyntax.GetQuotedColumnName("name") + " IN (@names)", new {names = migrationNames, versionString});
var result = Database.Fetch<MigrationDto>(sql);
var factory = new MigrationEntryFactory();
return result.Select(factory.BuildEntity);
}
public IEnumerable<IMigrationEntry> FindEntries(IEnumerable<string> migrationNames)
{
if (migrationNames.Any() == false) return Enumerable.Empty<IMigrationEntry>();
var sql = new Sql().Select("*")
.From<MigrationDto>(SqlSyntax)
.Where(
SqlSyntax.GetQuotedColumnName("name") + " IN (@names)", new { names = migrationNames });
var result = Database.Fetch<MigrationDto>(sql);
var factory = new MigrationEntryFactory();
return result.Select(factory.BuildEntity);
}
public IEnumerable<IMigrationEntry> FindEntries(string migrationName)
{
var sql = new Sql().Select("*")
.From<MigrationDto>(SqlSyntax)
.Where<MigrationDto>(x => x.Name.InvariantEquals(migrationName));
var result = Database.Fetch<MigrationDto>(sql);
var factory = new MigrationEntryFactory();
return result.Select(factory.BuildEntity);
}
}
}
@@ -25,6 +25,8 @@ using Umbraco.Core.IO;
namespace Umbraco.Core.Persistence.Repositories
{
using SqlSyntax;
internal abstract class VersionableRepositoryBase<TId, TEntity> : PetaPocoRepositoryBase<TId, TEntity>
where TEntity : class, IAggregateRoot
{
@@ -61,11 +63,11 @@ namespace Umbraco.Core.Persistence.Repositories
public virtual void DeleteVersion(Guid versionId)
{
var dto = Database.FirstOrDefault<ContentVersionDto>("WHERE versionId = @VersionId", new { VersionId = versionId });
if(dto == null) return;
if (dto == null) return;
//Ensure that the lastest version is not deleted
var latestVersionDto = Database.FirstOrDefault<ContentVersionDto>("WHERE ContentId = @Id ORDER BY VersionDate DESC", new { Id = dto.NodeId });
if(latestVersionDto.VersionId == dto.VersionId)
if (latestVersionDto.VersionId == dto.VersionId)
return;
using (var transaction = Database.GetTransaction())
@@ -83,7 +85,7 @@ namespace Umbraco.Core.Persistence.Repositories
var list =
Database.Fetch<ContentVersionDto>(
"WHERE versionId <> @VersionId AND (ContentId = @Id AND VersionDate < @VersionDate)",
new {VersionId = latestVersionDto.VersionId, Id = id, VersionDate = versionDate});
new { VersionId = latestVersionDto.VersionId, Id = id, VersionDate = versionDate });
if (list.Any() == false) return;
using (var transaction = Database.GetTransaction())
@@ -244,25 +246,68 @@ namespace Umbraco.Core.Persistence.Repositories
return filteredSql;
}
private Sql GetSortedSqlForPagedResults(Sql sql, Direction orderDirection, string orderBy)
private Sql GetSortedSqlForPagedResults(Sql sql, Direction orderDirection, string orderBy, bool orderBySystemField)
{
//copy to var so that the original isn't changed
var sortedSql = new Sql(sql.SQL, sql.Arguments);
// Apply order according to parameters
if (string.IsNullOrEmpty(orderBy) == false)
if (orderBySystemField)
{
var orderByParams = new[] { GetDatabaseFieldNameForOrderBy(orderBy) };
if (orderDirection == Direction.Ascending)
// Apply order according to parameters
if (string.IsNullOrEmpty(orderBy) == false)
{
sortedSql.OrderBy(orderByParams);
var orderByParams = new[] { GetDatabaseFieldNameForOrderBy(orderBy) };
if (orderDirection == Direction.Ascending)
{
sortedSql.OrderBy(orderByParams);
}
else
{
sortedSql.OrderByDescending(orderByParams);
}
}
else
{
sortedSql.OrderByDescending(orderByParams);
}
return sortedSql;
}
else
{
// Sorting by a custom field, so set-up sub-query for ORDER BY clause to pull through valie
// from most recent content version for the given order by field
var sortedInt = string.Format(SqlSyntax.ConvertIntegerToOrderableString, "dataInt");
var sortedDate = string.Format(SqlSyntax.ConvertDateToOrderableString, "dataDate");
var sortedString = string.Format("COALESCE({0},'')", "dataNvarchar");
var sortedDecimal = string.Format(SqlSyntax.ConvertDecimalToOrderableString, "dataDecimal");
var innerJoinTempTable = string.Format(@"INNER JOIN (
SELECT CASE
WHEN dataInt Is Not Null THEN {0}
WHEN dataDecimal Is Not Null THEN {1}
WHEN dataDate Is Not Null THEN {2}
ELSE {3}
END AS CustomPropVal,
cd.nodeId AS CustomPropValContentId
FROM cmsDocument cd
INNER JOIN cmsPropertyData cpd ON cpd.contentNodeId = cd.nodeId AND cpd.versionId = cd.versionId
INNER JOIN cmsPropertyType cpt ON cpt.Id = cpd.propertytypeId
WHERE cpt.Alias = @{4} AND cd.newest = 1) AS CustomPropData
ON CustomPropData.CustomPropValContentId = umbracoNode.id
", sortedInt, sortedDecimal, sortedDate, sortedString, sortedSql.Arguments.Length);
//insert this just above the LEFT OUTER JOIN
var newSql = sortedSql.SQL.Insert(sortedSql.SQL.IndexOf("LEFT OUTER JOIN"), innerJoinTempTable);
var newArgs = sortedSql.Arguments.ToList();
newArgs.Add(orderBy);
sortedSql = new Sql(newSql, newArgs.ToArray());
sortedSql.OrderBy("CustomPropData.CustomPropVal");
if (orderDirection == Direction.Descending)
{
sortedSql.Append(" DESC");
}
}
return sortedSql;
}
/// <summary>
@@ -279,13 +324,15 @@ namespace Umbraco.Core.Persistence.Repositories
/// <param name="processQuery">A callback to process the query result</param>
/// <param name="orderBy">The order by column</param>
/// <param name="orderDirection">The order direction.</param>
/// <param name="orderBySystemField">Flag to indicate when ordering by system field</param>
/// <returns></returns>
/// <exception cref="System.ArgumentNullException">orderBy</exception>
protected IEnumerable<TEntity> GetPagedResultsByQuery<TDto, TContentBase>(IQuery<TEntity> query, long pageIndex, int pageSize, out long totalRecords,
Tuple<string, string> nodeIdSelect,
Func<Sql, IEnumerable<TEntity>> processQuery,
string orderBy,
string orderBy,
Direction orderDirection,
bool orderBySystemField,
Func<Tuple<string, object[]>> defaultFilter = null)
where TContentBase : class, IAggregateRoot, TEntity
{
@@ -297,18 +344,18 @@ namespace Umbraco.Core.Persistence.Repositories
if (query == null) query = new Query<TEntity>();
var translator = new SqlTranslator<TEntity>(sqlBase, query);
var sqlQuery = translator.Translate();
// Note we can't do multi-page for several DTOs like we can multi-fetch and are doing in PerformGetByQuery,
// but actually given we are doing a Get on each one (again as in PerformGetByQuery), we only need the node Id.
// So we'll modify the SQL.
var sqlNodeIds = new Sql(
sqlQuery.SQL.Replace("SELECT *", string.Format("SELECT {0}.{1}",nodeIdSelect.Item1, nodeIdSelect.Item2)),
sqlQuery.SQL.Replace("SELECT *", string.Format("SELECT {0}.{1}", nodeIdSelect.Item1, nodeIdSelect.Item2)),
sqlQuery.Arguments);
//get sorted and filtered sql
var sqlNodeIdsWithSort = GetSortedSqlForPagedResults(
GetFilteredSqlForPagedResults(sqlNodeIds, defaultFilter),
orderDirection, orderBy);
orderDirection, orderBy, orderBySystemField);
// Get page of results and total count
IEnumerable<TEntity> result;
@@ -324,7 +371,7 @@ namespace Umbraco.Core.Persistence.Repositories
var args = sqlNodeIdsWithSort.Arguments;
string sqlStringCount, sqlStringPage;
Database.BuildPageQueries<TDto>(pageIndex * pageSize, pageSize, sqlNodeIdsWithSort.SQL, ref args, out sqlStringCount, out sqlStringPage);
//if this is for sql server, the sqlPage will start with a SELECT * but we don't want that, we only want to return the nodeId
sqlStringPage = sqlStringPage
.Replace("SELECT *",
@@ -333,7 +380,7 @@ namespace Umbraco.Core.Persistence.Repositories
"SELECT " + nodeIdSelect.Item2);
//We need to make this an inner join on the paged query
var splitQuery = sqlQuery.SQL.Split(new[] {"WHERE "}, StringSplitOptions.None);
var splitQuery = sqlQuery.SQL.Split(new[] { "WHERE " }, StringSplitOptions.None);
var withInnerJoinSql = new Sql(splitQuery[0])
.Append("INNER JOIN (")
//join the paged query with the paged query arguments
@@ -345,23 +392,9 @@ namespace Umbraco.Core.Persistence.Repositories
//get sorted and filtered sql
var fullQuery = GetSortedSqlForPagedResults(
GetFilteredSqlForPagedResults(withInnerJoinSql, defaultFilter),
orderDirection, orderBy);
var content = processQuery(fullQuery)
.Cast<TContentBase>()
.AsQueryable();
// Now we need to ensure this result is also ordered by the same order by clause
var orderByProperty = GetEntityPropertyNameForOrderBy(orderBy);
if (orderDirection == Direction.Ascending)
{
result = content.OrderBy(orderByProperty);
}
else
{
result = content.OrderByDescending(orderByProperty);
}
GetFilteredSqlForPagedResults(withInnerJoinSql, defaultFilter),
orderDirection, orderBy, orderBySystemField);
return processQuery(fullQuery);
}
else
{
@@ -394,9 +427,9 @@ INNER JOIN
(" + string.Format(parsedOriginalSql, "cmsContent.nodeId, cmsContentVersion.VersionId") + @") as docData
ON cmsPropertyData.versionId = docData.VersionId AND cmsPropertyData.contentNodeId = docData.nodeId
LEFT OUTER JOIN cmsDataTypePreValues
ON cmsPropertyType.dataTypeId = cmsDataTypePreValues.datatypeNodeId", docSql.Arguments);
ON cmsPropertyType.dataTypeId = cmsDataTypePreValues.datatypeNodeId", docSql.Arguments);
var allPropertyData = Database.Fetch<PropertyDataDto>(propSql);
var allPropertyData = Database.Fetch<PropertyDataDto>(propSql);
//This is a lazy access call to get all prevalue data for the data types that make up all of these properties which we use
// below if any property requires tag support
@@ -414,7 +447,7 @@ WHERE EXISTS(
ON cmsPropertyType.contentTypeId = docData.contentType
WHERE a.id = b.id)", docSql.Arguments);
return Database.Fetch<DataTypePreValueDto>(preValsSql);
return Database.Fetch<DataTypePreValueDto>(preValsSql);
});
var result = new Dictionary<int, PropertyCollection>();
@@ -432,8 +465,8 @@ WHERE EXISTS(
var propertyDataDtos = allPropertyData.Where(x => x.NodeId == def.Id).Distinct();
var propertyFactory = new PropertyFactory(compositionProperties, def.Version, def.Id, def.CreateDate, def.VersionDate);
var properties = propertyFactory.BuildEntity(propertyDataDtos.ToArray()).ToArray();
var properties = propertyFactory.BuildEntity(propertyDataDtos.ToArray()).ToArray();
var newProperties = properties.Where(x => x.HasIdentity == false && x.PropertyType.HasIdentity);
foreach (var property in newProperties)
@@ -481,7 +514,7 @@ WHERE EXISTS(
Logger.Warn<VersionableRepositoryBase<TId, TEntity>>("The query returned multiple property sets for document definition " + def.Id + ", " + def.Composition.Name);
}
result[def.Id] = new PropertyCollection(properties);
}
}
}
return result;
@@ -521,6 +554,9 @@ WHERE EXISTS(
case "OWNER":
//TODO: This isn't going to work very nicely because it's going to order by ID, not by letter
return "umbracoNode.nodeUser";
// Members only
case "USERNAME":
return "cmsMember.LoginName";
default:
//ensure invalid SQL cannot be submitted
return Regex.Replace(orderBy, @"[^\w\.,`\[\]@-]", "");
@@ -69,6 +69,10 @@ namespace Umbraco.Core.Persistence.SqlSyntax
bool SupportsClustered();
bool SupportsIdentityInsert();
bool? SupportsCaseInsensitiveQueries(Database db);
string ConvertIntegerToOrderableString { get; }
string ConvertDateToOrderableString { get; }
string ConvertDecimalToOrderableString { get; }
IEnumerable<string> GetTablesInSchema(Database db);
IEnumerable<ColumnInfo> GetColumnsInSchema(Database db);
@@ -18,7 +18,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax
public MySqlSyntaxProvider(ILogger logger)
{
_logger = logger;
AutoIncrementDefinition = "AUTO_INCREMENT";
IntColumnDefinition = "int(11)";
BoolColumnDefinition = "tinyint(1)";
@@ -26,8 +26,10 @@ namespace Umbraco.Core.Persistence.SqlSyntax
TimeColumnDefinition = "time";
DecimalColumnDefinition = "decimal(38,6)";
GuidColumnDefinition = "char(36)";
DefaultValueFormat = "DEFAULT {0}";
InitColumnTypeMap();
}
public override IEnumerable<string> GetTablesInSchema(Database db)
@@ -324,13 +326,13 @@ ORDER BY TABLE_NAME, INDEX_NAME",
{
case SystemMethods.NewGuid:
return null; // NOT SUPPORTED!
//return "NEWID()";
//return "NEWID()";
case SystemMethods.CurrentDateTime:
return "CURRENT_TIMESTAMP";
//case SystemMethods.NewSequentialId:
// return "NEWSEQUENTIALID()";
//case SystemMethods.CurrentUTCDateTime:
// return "GETUTCDATE()";
//case SystemMethods.NewSequentialId:
// return "NEWSEQUENTIALID()";
//case SystemMethods.CurrentUTCDateTime:
// return "GETUTCDATE()";
}
return null;
@@ -358,6 +360,9 @@ ORDER BY TABLE_NAME, INDEX_NAME",
public override string DropIndex { get { return "DROP INDEX {0} ON {1}"; } }
public override string RenameColumn { get { return "ALTER TABLE {0} CHANGE {1} {2}"; } }
public override string ConvertIntegerToOrderableString { get { return "LPAD(FORMAT({0}, 0), 8, '0')"; } }
public override string ConvertDateToOrderableString { get { return "DATE_FORMAT({0}, '%Y%m%d')"; } }
public override string ConvertDecimalToOrderableString { get { return "LPAD(FORMAT({0}, 9), 20, '0')"; } }
public override bool? SupportsCaseInsensitiveQueries(Database db)
{
@@ -208,7 +208,6 @@ ORDER BY TABLE_NAME, INDEX_NAME");
public override string DropIndex { get { return "DROP INDEX {1}.{0}"; } }
}
}
@@ -322,7 +322,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax
GetQuotedColumnName(foreignKey.ForeignColumns.First()),
GetQuotedTableName(foreignKey.PrimaryTable),
GetQuotedColumnName(foreignKey.PrimaryColumns.First()),
FormatCascade("DELETE", foreignKey.OnDelete),
FormatCascade("DELETE", foreignKey.OnDelete),
FormatCascade("UPDATE", foreignKey.OnUpdate));
}
@@ -331,7 +331,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax
var sb = new StringBuilder();
foreach (var column in columns)
{
sb.Append(Format(column) +",\n");
sb.Append(Format(column) + ",\n");
}
return sb.ToString().TrimEnd(",\n");
}
@@ -431,11 +431,11 @@ namespace Umbraco.Core.Persistence.SqlSyntax
return GetSpecialDbType(column.DbType);
}
Type type = column.Type.HasValue
Type type = column.Type.HasValue
? DbTypeMap.ColumnDbTypeMap.First(x => x.Value == column.Type.Value).Key
: column.PropertyType;
if (type == typeof (string))
if (type == typeof(string))
{
var valueOrDefault = column.Size != default(int) ? column.Size : DefaultStringLength;
return string.Format(StringLengthColumnDefinitionFormat, valueOrDefault);
@@ -536,5 +536,9 @@ namespace Umbraco.Core.Persistence.SqlSyntax
public virtual string CreateConstraint { get { return "ALTER TABLE {0} ADD CONSTRAINT {1} {2} ({3})"; } }
public virtual string DeleteConstraint { get { return "ALTER TABLE {0} DROP CONSTRAINT {1}"; } }
public virtual string CreateForeignKeyConstraint { get { return "ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3} ({4}){5}{6}"; } }
public virtual string ConvertIntegerToOrderableString { get { return "REPLACE(STR({0}, 8), SPACE(1), '0')"; } }
public virtual string ConvertDateToOrderableString { get { return "CONVERT(nvarchar, {0}, 102)"; } }
public virtual string ConvertDecimalToOrderableString { get { return "REPLACE(STR({0}, 20, 9), SPACE(1), '0')"; } }
}
}
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using StackExchange.Profiling;
using Umbraco.Core.Logging;
@@ -128,15 +129,25 @@ namespace Umbraco.Core.Persistence
// if no timeout is specified, and the connection has a longer timeout, use it
if (OneTimeCommandTimeout == 0 && CommandTimeout == 0 && cmd.Connection.ConnectionTimeout > 30)
cmd.CommandTimeout = cmd.Connection.ConnectionTimeout;
if (EnableSqlTrace)
{
var sb = new StringBuilder();
sb.Append(cmd.CommandText);
foreach (DbParameter p in cmd.Parameters)
{
sb.Append(" - ");
sb.Append(p.Value);
}
_logger.Debug<UmbracoDatabase>(sb.ToString());
}
base.OnExecutingCommand(cmd);
}
public override void OnExecutedCommand(IDbCommand cmd)
{
if (EnableSqlTrace)
{
_logger.Debug<UmbracoDatabase>(cmd.CommandText);
}
if (_enableCount)
{
SqlCount++;
@@ -19,7 +19,7 @@ namespace Umbraco.Core.PropertyEditors
EditorView = editorView;
//defaults
ValueType = "string";
ValueType = PropertyEditorValueTypes.String;
Icon = Constants.Icons.PropertyEditor;
Group = "common";
}
@@ -33,7 +33,7 @@ namespace Umbraco.Core.PropertyEditors
Name = name;
//defaults
ValueType = "string";
ValueType = PropertyEditorValueTypes.String;
Icon = Constants.Icons.PropertyEditor;
Group = "common";
}
@@ -8,6 +8,7 @@ namespace Umbraco.Core.PropertyEditors
/// <summary>
/// Manages the list of IPropertyEditorValueConverter's
/// </summary>
[Obsolete("IPropertyEditorValueConverter is obsolete, but we need to support them until v8, to resolve the correct converter types use: PropertyValueConvertersResolver")]
internal sealed class PropertyEditorValueConvertersResolver : ManyObjectsResolverBase<PropertyEditorValueConvertersResolver, IPropertyEditorValueConverter>
{
/// <summary>
@@ -0,0 +1,34 @@
using System;
namespace Umbraco.Core.PropertyEditors
{
public static class PropertyEditorValueTypes
{
// mapped to DataTypeDatabaseType in DataTypeService.OverrideDatabaseTypeIfProvidedInPreValues
// BUT what about those that are not mapped?
//
// also mapped to DataTypeDatabaseType in PropertyValueEditor
// and this time the "+" are mapped
public const string Date = "DATE"; // +Date
public const string DateTime = "DATETIME"; // Date
public const string Decimal = "DECIMAL"; // Decimal
public const string Integer = "INT"; // Integer
[Obsolete("Use Integer.", false)]
public const string IntegerAlternative = "INTEGER"; // +Integer
public const string Json = "JSON"; // +NText
public const string Text = "TEXT"; // NText
public const string Time = "TIME"; // +Date
public const string String = "STRING"; // NVarchar
public const string Xml = "XML"; // +NText
}
}
@@ -25,7 +25,7 @@ namespace Umbraco.Core.PropertyEditors
/// </summary>
public PropertyValueEditor()
{
ValueType = "string";
ValueType = PropertyEditorValueTypes.String;
//set a default for validators
Validators = new List<IPropertyValidator>();
}
@@ -123,30 +123,35 @@ namespace Umbraco.Core.PropertyEditors
}
/// <summary>
/// Returns the true DataTypeDatabaseType from the string representation ValueType
/// Returns the true DataTypeDatabaseType from the string representation ValueType.
/// </summary>
/// <returns></returns>
public DataTypeDatabaseType GetDatabaseType()
{
switch (ValueType.ToUpper(CultureInfo.InvariantCulture))
return GetDatabaseType(ValueType);
}
public static DataTypeDatabaseType GetDatabaseType(string valueType)
{
switch (valueType.ToUpperInvariant())
{
case "INT":
case "INTEGER":
case PropertyEditorValueTypes.Integer:
case PropertyEditorValueTypes.IntegerAlternative:
return DataTypeDatabaseType.Integer;
case "DECIMAL":
case PropertyEditorValueTypes.Decimal:
return DataTypeDatabaseType.Decimal;
case "STRING":
case PropertyEditorValueTypes.String:
return DataTypeDatabaseType.Nvarchar;
case "TEXT":
case "JSON":
case "XML":
case PropertyEditorValueTypes.Text:
case PropertyEditorValueTypes.Json:
case PropertyEditorValueTypes.Xml:
return DataTypeDatabaseType.Ntext;
case "DATETIME":
case "DATE":
case "TIME":
case PropertyEditorValueTypes.DateTime:
case PropertyEditorValueTypes.Date:
case PropertyEditorValueTypes.Time:
return DataTypeDatabaseType.Date;
default:
throw new FormatException("The ValueType does not match a known value type");
throw new ArgumentException("Not a valid value type.", "valueType");
}
}
@@ -238,7 +243,7 @@ namespace Umbraco.Core.PropertyEditors
public virtual object ConvertEditorToDb(ContentPropertyData editorValue, object currentValue)
{
//if it's json but it's empty json, then return null
if (ValueType.InvariantEquals("JSON") && editorValue.Value != null && editorValue.Value.ToString().DetectIsEmptyJson())
if (ValueType.InvariantEquals(PropertyEditorValueTypes.Json) && editorValue.Value != null && editorValue.Value.ToString().DetectIsEmptyJson())
{
return null;
}
@@ -22,7 +22,7 @@ namespace Umbraco.Core.PropertyEditors
{
var asString = value.ToString();
if (editor.ValueEditor.ValueType.InvariantEquals("JSON"))
if (editor.ValueEditor.ValueType.InvariantEquals(PropertyEditorValueTypes.Json))
{
if (asString.DetectIsEmptyJson())
{
@@ -1,4 +1,5 @@
using Umbraco.Core.Models.PublishedContent;
using System.Globalization;
using Umbraco.Core.Models.PublishedContent;
namespace Umbraco.Core.PropertyEditors.ValueConverters
{
@@ -20,7 +21,7 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters
if (sourceString != null)
{
decimal d;
return (decimal.TryParse(sourceString, out d)) ? d : 0M;
return (decimal.TryParse(sourceString, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d)) ? d : 0M;
}
// in the database an a decimal is an a decimal
@@ -1,8 +1,11 @@
using System;
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Services;
namespace Umbraco.Core.PropertyEditors.ValueConverters
{
@@ -14,11 +17,80 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters
[PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)]
public class ImageCropperValueConverter : JsonValueConverter
{
private readonly IDataTypeService _dataTypeService;
public ImageCropperValueConverter()
{
_dataTypeService = ApplicationContext.Current.Services.DataTypeService;
}
public ImageCropperValueConverter(IDataTypeService dataTypeService)
{
if (dataTypeService == null) throw new ArgumentNullException("dataTypeService");
_dataTypeService = dataTypeService;
}
public override bool IsConverter(PublishedPropertyType propertyType)
{
return propertyType.PropertyEditorAlias.InvariantEquals(Constants.PropertyEditors.ImageCropperAlias);
}
internal static void MergePreValues(JObject currentValue, IDataTypeService dataTypeService, int dataTypeId)
{
//need to lookup the pre-values for this data type
//TODO: Change all singleton access to use ctor injection in v8!!!
var dt = dataTypeService.GetPreValuesCollectionByDataTypeId(dataTypeId);
if (dt != null && dt.IsDictionaryBased && dt.PreValuesAsDictionary.ContainsKey("crops"))
{
var cropsString = dt.PreValuesAsDictionary["crops"].Value;
JArray preValueCrops;
try
{
preValueCrops = JsonConvert.DeserializeObject<JArray>(cropsString);
}
catch (Exception ex)
{
LogHelper.Error<ImageCropperValueConverter>("Could not parse the string " + cropsString + " to a json object", ex);
return;
}
//now we need to merge the crop values - the alias + width + height comes from pre-configured pre-values,
// however, each crop can store it's own coordinates
JArray existingCropsArray;
if (currentValue["crops"] != null)
{
existingCropsArray = (JArray)currentValue["crops"];
}
else
{
currentValue["crops"] = existingCropsArray = new JArray();
}
foreach (var preValueCrop in preValueCrops.Where(x => x.HasValues))
{
var found = existingCropsArray.FirstOrDefault(x =>
{
if (x.HasValues && x["alias"] != null)
{
return x["alias"].Value<string>() == preValueCrop["alias"].Value<string>();
}
return false;
});
if (found != null)
{
found["width"] = preValueCrop["width"];
found["height"] = preValueCrop["height"];
}
else
{
existingCropsArray.Add(preValueCrop);
}
}
}
}
public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview)
{
if (source == null) return null;
@@ -29,7 +101,11 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters
JObject obj;
try
{
obj = JsonConvert.DeserializeObject<JObject>(sourceString);
obj = JsonConvert.DeserializeObject<JObject>(sourceString, new JsonSerializerSettings
{
Culture = CultureInfo.InvariantCulture,
FloatParseHandling = FloatParseHandling.Decimal
});
}
catch (Exception ex)
{
@@ -37,26 +113,8 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters
return sourceString;
}
//need to lookup the pre-values for this data type
//TODO: Change all singleton access to use ctor injection in v8!!!
var dt = ApplicationContext.Current.Services.DataTypeService.GetPreValuesCollectionByDataTypeId(propertyType.DataTypeId);
MergePreValues(obj, _dataTypeService, propertyType.DataTypeId);
if (dt != null && dt.IsDictionaryBased && dt.PreValuesAsDictionary.ContainsKey("crops"))
{
var cropsString = dt.PreValuesAsDictionary["crops"].Value;
JArray crops;
try
{
crops = JsonConvert.DeserializeObject<JArray>(cropsString);
}
catch (Exception ex)
{
LogHelper.Error<ImageCropperValueConverter>("Could not parse the string " + cropsString + " to a json object", ex);
return sourceString;
}
obj["crops"] = crops;
}
return obj;
}
@@ -26,7 +26,7 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters
{
var propertyEditor = PropertyEditorResolver.Current.GetByAlias(propertyType.PropertyEditorAlias);
if (propertyEditor == null) return false;
return propertyEditor.ValueEditor.ValueType.InvariantEquals("json");
return propertyEditor.ValueEditor.ValueType.InvariantEquals(PropertyEditorValueTypes.Json);
}
public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview)
@@ -0,0 +1,28 @@
using Umbraco.Core.Models.PublishedContent;
namespace Umbraco.Core.PropertyEditors.ValueConverters
{
/// <summary>
/// We need this property converter so that we always force the value of a label to be a string
/// </summary>
/// <remarks>
/// Without a property converter defined for the label type, the value will be converted with
/// the `ConvertUsingDarkMagic` method which will try to parse the value into it's correct type, but this
/// can cause issues if the string is detected as a number and then strips leading zeros.
/// Example: http://issues.umbraco.org/issue/U4-7929
/// </remarks>
[DefaultPropertyValueConverter]
[PropertyValueType(typeof (string))]
[PropertyValueCache(PropertyCacheValue.All, PropertyCacheLevel.Content)]
public class LabelValueConverter : PropertyValueConverterBase
{
public override bool IsConverter(PublishedPropertyType propertyType)
{
return Constants.PropertyEditors.NoEditAlias.Equals(propertyType.PropertyEditorAlias);
}
public override object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview)
{
return source == null ? string.Empty : source.ToString();
}
}
}
@@ -35,6 +35,9 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters
// as xml in the database, it's always been new line delimited. Will ask Stephen about this.
// In the meantime, we'll do this xml check, see if it parses and if not just continue with
// splitting by newline
//
// RS: SD/Stephan Please consider post before deciding to remove
//// https://our.umbraco.org/forum/contributing-to-umbraco-cms/76989-keep-the-xml-values-in-the-multipletextstringvalueconverter
var values = new List<string>();
var pos = sourceString.IndexOf("<value>", StringComparison.Ordinal);
while (pos >= 0)
@@ -103,10 +103,18 @@ namespace Umbraco.Core.Security
var backOfficeIdentity = http.User.Identity as UmbracoBackOfficeIdentity;
if (backOfficeIdentity != null) return backOfficeIdentity;
//Check if there's more than one identity assigned and see if it's a UmbracoBackOfficeIdentity and use that
var claimsPrincipal = http.User as ClaimsPrincipal;
if (claimsPrincipal != null)
{
backOfficeIdentity = claimsPrincipal.Identities.OfType<UmbracoBackOfficeIdentity>().FirstOrDefault();
if (backOfficeIdentity != null) return backOfficeIdentity;
}
//Otherwise convert to a UmbracoBackOfficeIdentity if it's auth'd and has the back office session
var claimsIdentity = http.User.Identity as ClaimsIdentity;
if (claimsIdentity != null && claimsIdentity.IsAuthenticated)
{
{
try
{
return UmbracoBackOfficeIdentity.FromClaimsIdentity(claimsIdentity);
@@ -118,6 +118,8 @@ namespace Umbraco.Core.Security
//custom identity factory for creating the identity object for which we auth against in the back office
manager.ClaimsIdentityFactory = new BackOfficeClaimsIdentityFactory();
manager.EmailService = new EmailService();
//NOTE: Not implementing these, if people need custom 2 factor auth, they'll need to implement their own UserStore to suport it
//// Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user
@@ -132,7 +134,6 @@ namespace Umbraco.Core.Security
// BodyFormat = "Your security code is: {0}"
//});
//manager.EmailService = new EmailService();
//manager.SmsService = new SmsService();
}
+26
View File
@@ -0,0 +1,26 @@
using System.Net.Mail;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
namespace Umbraco.Core.Security
{
public class EmailService : IIdentityMessageService
{
public async Task SendAsync(IdentityMessage message)
{
using (var client = new SmtpClient())
using (var mailMessage = new MailMessage())
{
mailMessage.Body = message.Body;
mailMessage.To.Add(message.Destination);
mailMessage.Subject = message.Subject;
//TODO: This check could be nicer but that is the way it is currently
mailMessage.IsBodyHtml = message.Body.IsNullOrWhiteSpace() == false
&& message.Body.Contains("<") && message.Body.Contains("/>");
await client.SendMailAsync(mailMessage);
}
}
}
}
-12
View File
@@ -1,12 +0,0 @@
using Semver;
namespace Umbraco.Core
{
public static class SemVersionExtensions
{
public static string ToSemanticString(this SemVersion semVersion)
{
return semVersion.ToString().Replace("--", "-").Replace("-+", "+");
}
}
}

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