From 0b0454526ed195c8c7ac482f09691d99154d2f62 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 2 Jul 2012 19:38:41 -0100 Subject: [PATCH 1/6] Default SQLCE4 file was corrupted, restored from OLD/assets, works again. --- src/umbraco.presentation/App_Data/Umbraco.sdf | Bin 20480 -> 20480 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/umbraco.presentation/App_Data/Umbraco.sdf b/src/umbraco.presentation/App_Data/Umbraco.sdf index a4ad7651d4afc3d00ec7d63952aff739fd78e400..90935a7f0b42847f1a5892b30dcfce1d172cf218 100644 GIT binary patch delta 59 zcmZozz}T>WkwxZlXTU@j6Gn!Omd6<Wk;T14pk^YA2_xf1%j1lu-`f}&5-k}Rc%m5?qL~>OQZ9QlOy^->ID5>S q0R%woYB2_eNT8goBm;vpkiC6kpfKBSKX-<8`!@>;Y~o!c-~a$1ixzVL From 787afa3c366eea0722fe9f6c3facc141fa71308b Mon Sep 17 00:00:00 2001 From: sitereactor Date: Tue, 3 Jul 2012 09:08:54 -0200 Subject: [PATCH 2/6] Updating SQL Create and Update scripts to be SqlAzure compatible --- .../Sql/KeysIndexesAndConstraints.sql | 28 ++++++------- .../SqlHelpers/SqlServer/Sql/Total.sql | 41 ++++++++++--------- .../SqlServer/Sql/Version4_Upgrade.sql | 6 +-- 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/KeysIndexesAndConstraints.sql b/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/KeysIndexesAndConstraints.sql index 6774896306..3308ef08b1 100644 --- a/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/KeysIndexesAndConstraints.sql +++ b/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/KeysIndexesAndConstraints.sql @@ -126,14 +126,14 @@ ALTER TABLE cmsContentType ADD CONSTRAINT IX_cmsContentType UNIQUE NONCLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsContent ADD CONSTRAINT IX_cmsContent UNIQUE NONCLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsContentVersion ADD CONSTRAINT @@ -151,7 +151,7 @@ ALTER TABLE cmsMember ADD CONSTRAINT PK_cmsMember PRIMARY KEY CLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsMember ADD CONSTRAINT @@ -180,14 +180,14 @@ ALTER TABLE cmsStylesheet ADD CONSTRAINT PK_cmsStylesheet PRIMARY KEY CLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsStylesheetProperty ADD CONSTRAINT PK_cmsStylesheetProperty PRIMARY KEY CLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsStylesheetProperty ADD CONSTRAINT @@ -227,7 +227,7 @@ ALTER TABLE cmsDataType ADD CONSTRAINT IX_cmsDataType UNIQUE NONCLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; @@ -338,7 +338,7 @@ ALTER TABLE cmsDocument ADD CONSTRAINT ( nodeId, versionId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsPropertyData ADD CONSTRAINT @@ -389,7 +389,7 @@ ALTER TABLE cmsTemplate ADD CONSTRAINT IX_cmsTemplate UNIQUE NONCLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsDocument ADD CONSTRAINT @@ -419,7 +419,7 @@ ALTER TABLE cmsDictionary ADD CONSTRAINT IX_cmsDictionary UNIQUE NONCLUSTERED ( id - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsLanguageText ADD CONSTRAINT @@ -515,7 +515,7 @@ ALTER TABLE cmsTask ADD CONSTRAINT CREATE NONCLUSTERED INDEX IX_umbracoLog ON umbracoLog ( NodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE umbracoRelation ADD CONSTRAINT @@ -579,21 +579,21 @@ ALTER TABLE umbracoLanguage ADD CONSTRAINT IX_umbracoLanguage UNIQUE NONCLUSTERED ( languageISOCode - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE umbracoUser ADD CONSTRAINT IX_umbracoUser UNIQUE NONCLUSTERED ( userLogin - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsTaskType ADD CONSTRAINT IX_cmsTaskType UNIQUE NONCLUSTERED ( alias - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsDocumentType ADD CONSTRAINT @@ -622,7 +622,7 @@ ALTER TABLE cmsContentVersion ADD CONSTRAINT IX_cmsContentVersion UNIQUE NONCLUSTERED ( VersionId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsPreviewXml ADD CONSTRAINT diff --git a/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/Total.sql b/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/Total.sql index fac99aa098..ff82b7a3fc 100644 --- a/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/Total.sql +++ b/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/Total.sql @@ -10,7 +10,7 @@ IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT - Database version: 4.1.0.0 + Database version: 4.8.0.0 Please increment this version number if ANY change is made to this script, so compatibility with scripts for other database systems can be verified easily. @@ -548,7 +548,8 @@ CREATE TABLE [umbracoUserLogins] [userID] [int] NOT NULL, [timeout] [bigint] NOT NULL ) - +; +CREATE CLUSTERED INDEX umbracoUserLogins_Index ON umbracoUserLogins (contextID) ; ALTER TABLE [umbracoAppTree] ADD CONSTRAINT [FK_umbracoAppTree_umbracoApp] FOREIGN KEY ([appAlias]) REFERENCES [umbracoApp] ([appAlias]) @@ -1005,8 +1006,8 @@ CREATE TABLE [cmsPreviewXml]( ( [nodeId] ASC, [versionId] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +) WITH ( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) +) ; @@ -1125,8 +1126,8 @@ DELETE FROM cmsPreviewXml WHERE VersionID NOT IN (SELECT VersionId FROM cmsConte ; /* Though this should not have to run because it's a new install, you need to remove this constraint if you've been testing with the RC */ -IF EXISTS (SELECT name FROM sysindexes WHERE name = 'IX_cmsMemberType') -ALTER TABLE [cmsMemberType] DROP CONSTRAINT [IX_cmsMemberType] +/*IF EXISTS (SELECT name FROM sysindexes WHERE name = 'IX_cmsMemberType')*/ +/*ALTER TABLE [cmsMemberType] DROP CONSTRAINT [IX_cmsMemberType]*/ /************************** CLEANUP END ********************************************/ @@ -1139,14 +1140,14 @@ ALTER TABLE cmsContentType ADD CONSTRAINT IX_cmsContentType UNIQUE NONCLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsContent ADD CONSTRAINT IX_cmsContent UNIQUE NONCLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsContentVersion ADD CONSTRAINT @@ -1164,7 +1165,7 @@ ALTER TABLE cmsMember ADD CONSTRAINT PK_cmsMember PRIMARY KEY CLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsMember ADD CONSTRAINT @@ -1193,14 +1194,14 @@ ALTER TABLE cmsStylesheet ADD CONSTRAINT PK_cmsStylesheet PRIMARY KEY CLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsStylesheetProperty ADD CONSTRAINT PK_cmsStylesheetProperty PRIMARY KEY CLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsStylesheetProperty ADD CONSTRAINT @@ -1240,7 +1241,7 @@ ALTER TABLE cmsDataType ADD CONSTRAINT IX_cmsDataType UNIQUE NONCLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; @@ -1351,7 +1352,7 @@ ALTER TABLE cmsDocument ADD CONSTRAINT ( nodeId, versionId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsPropertyData ADD CONSTRAINT @@ -1402,7 +1403,7 @@ ALTER TABLE cmsTemplate ADD CONSTRAINT IX_cmsTemplate UNIQUE NONCLUSTERED ( nodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsDocument ADD CONSTRAINT @@ -1432,7 +1433,7 @@ ALTER TABLE cmsDictionary ADD CONSTRAINT IX_cmsDictionary UNIQUE NONCLUSTERED ( id - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsLanguageText ADD CONSTRAINT @@ -1528,7 +1529,7 @@ ALTER TABLE cmsTask ADD CONSTRAINT CREATE NONCLUSTERED INDEX IX_umbracoLog ON umbracoLog ( NodeId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE umbracoRelation ADD CONSTRAINT @@ -1592,21 +1593,21 @@ ALTER TABLE umbracoLanguage ADD CONSTRAINT IX_umbracoLanguage UNIQUE NONCLUSTERED ( languageISOCode - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE umbracoUser ADD CONSTRAINT IX_umbracoUser UNIQUE NONCLUSTERED ( userLogin - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsTaskType ADD CONSTRAINT IX_cmsTaskType UNIQUE NONCLUSTERED ( alias - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsDocumentType ADD CONSTRAINT @@ -1635,7 +1636,7 @@ ALTER TABLE cmsContentVersion ADD CONSTRAINT IX_cmsContentVersion UNIQUE NONCLUSTERED ( VersionId - ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ; ALTER TABLE cmsPreviewXml ADD CONSTRAINT diff --git a/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/Version4_Upgrade.sql b/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/Version4_Upgrade.sql index 9e4e3c3c88..926d486946 100644 --- a/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/Version4_Upgrade.sql +++ b/src/umbraco.datalayer/SqlHelpers/SqlServer/Sql/Version4_Upgrade.sql @@ -4,7 +4,7 @@ IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT - Database version: 4.1.0.3 + Database version: 4.8.0.0 Please increment this version number if ANY change is made to this script, so compatibility with scripts for other database systems can be verified easily. @@ -46,8 +46,8 @@ CREATE TABLE [cmsPreviewXml]( ( [nodeId] ASC, [versionId] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) /************************** CLEANUP ***********************************************/ From 6e0c4b7fdb5bf3414f93ed2de93cd2ad7bc0e292 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 3 Jul 2012 14:56:07 -0100 Subject: [PATCH 3/6] Fixes work item: 30805 - Problems logging out. #U4-88 - MySQL error when logging out of 4.7.2. Tested against MySQL 5.1. --- src/umbraco.businesslogic/BasePages/BasePage.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/umbraco.businesslogic/BasePages/BasePage.cs b/src/umbraco.businesslogic/BasePages/BasePage.cs index fe8c858876..c5eb2ce75d 100644 --- a/src/umbraco.businesslogic/BasePages/BasePage.cs +++ b/src/umbraco.businesslogic/BasePages/BasePage.cs @@ -234,8 +234,8 @@ namespace umbraco.BasePages { private void deleteLogin() { SqlHelper.ExecuteNonQuery( - "DELETE umbracoUserLogins WHERE contextId = @contextId", - SqlHelper.CreateParameter("@contextId", umbracoUserContextID)); + "DELETE FROM umbracoUserLogins WHERE contextId = @contextId", + SqlHelper.CreateParameter("@contextId", umbracoUserContextID)); } private void updateLogin() From 5ce472b681f6c0f6ae3d64bea463bfc6a8fbcadd Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 3 Jul 2012 15:46:23 -0100 Subject: [PATCH 4/6] umbraco.presentation.targets: Fixed path for 'ProjOutputDir'. --- src/umbraco.presentation.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/umbraco.presentation.targets b/src/umbraco.presentation.targets index 7a4e38f832..41c049d920 100644 --- a/src/umbraco.presentation.targets +++ b/src/umbraco.presentation.targets @@ -19,7 +19,7 @@ $(SolutionRootFolder)umbraco.presentation\ - $(WebProjectOutputDir) + $(WebProjectOutputDir)\ web.Template.$(ConfigEnvironment)$(Configuration).config From 9a95c08271e83bea36df8304563d4982beed8aa5 Mon Sep 17 00:00:00 2001 From: hartvig Date: Tue, 3 Jul 2012 20:58:50 -0200 Subject: [PATCH 5/6] Adds better support for simpler file attachment to document/media properties, by just assigning an HttpPostedFile as the value of an upload property (then it'll handle storing the file, generating thumbnails, etc): myImage.getProperty("mainImage").Value = Request.Files[0]; Adds helper class "UmbracoFile" for easier file upload / file manipulation in general (to be provider based so we can support manipulation via ImageGen or ImageResizing.NET as well as support for abstracting file storage via providers (through an IFile but currently in an implementation that needs refactoring (used in a wrong way atm)). Will fix that part tomorrow! --- src/umbraco.businesslogic/UmbracoSettings.cs | 2 +- src/umbraco.cms/businesslogic/Files/IFile.cs | 19 ++ .../Files/NotAnImageException.cs | 21 ++ .../businesslogic/Files/UmbracoFile.cs | 241 ++++++++++++++++++ .../businesslogic/datatype/FileHandlerData.cs | 74 ++++++ src/umbraco.cms/helpers/Casing.cs | 29 +++ src/umbraco.cms/umbraco.cms.csproj | 4 + .../uploadfield/DataTypeUploadField.cs | 2 +- .../uploadfield/uploadField.cs | 106 ++------ src/umbraco.presentation/helper.cs | 39 +-- 10 files changed, 408 insertions(+), 129 deletions(-) create mode 100644 src/umbraco.cms/businesslogic/Files/IFile.cs create mode 100644 src/umbraco.cms/businesslogic/Files/NotAnImageException.cs create mode 100644 src/umbraco.cms/businesslogic/Files/UmbracoFile.cs create mode 100644 src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs diff --git a/src/umbraco.businesslogic/UmbracoSettings.cs b/src/umbraco.businesslogic/UmbracoSettings.cs index 5e7e5eea95..da7ddd8d46 100644 --- a/src/umbraco.businesslogic/UmbracoSettings.cs +++ b/src/umbraco.businesslogic/UmbracoSettings.cs @@ -590,7 +590,7 @@ namespace umbraco /// The allowed image file types. public static string ImageFileTypes { - get { return GetKey("/settings/content/imaging/imageFileTypes"); } + get { return GetKey("/settings/content/imaging/imageFileTypes").ToLowerInvariant(); } } /// diff --git a/src/umbraco.cms/businesslogic/Files/IFile.cs b/src/umbraco.cms/businesslogic/Files/IFile.cs new file mode 100644 index 0000000000..7bfb4490f5 --- /dev/null +++ b/src/umbraco.cms/businesslogic/Files/IFile.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace umbraco.cms.businesslogic.Files +{ + public interface IFile + { + string Filename { get; } + string Extension { get; } + string LocalName { get; } + bool SupportsResizing { get; } + string GetFriendlyName(); + System.Tuple GetDimensions(); + string Resize(int width, int height); + string Resize(int maxWidthHeight, string fileNameAddition); + } +} diff --git a/src/umbraco.cms/businesslogic/Files/NotAnImageException.cs b/src/umbraco.cms/businesslogic/Files/NotAnImageException.cs new file mode 100644 index 0000000000..2d0ff67635 --- /dev/null +++ b/src/umbraco.cms/businesslogic/Files/NotAnImageException.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace umbraco.cms.businesslogic.Files +{ + public class NotAnImageException : Exception + { + public NotAnImageException() + : base() + { + + } + + public NotAnImageException(string message) : base(message) + { + + } + } +} diff --git a/src/umbraco.cms/businesslogic/Files/UmbracoFile.cs b/src/umbraco.cms/businesslogic/Files/UmbracoFile.cs new file mode 100644 index 0000000000..3ead738b80 --- /dev/null +++ b/src/umbraco.cms/businesslogic/Files/UmbracoFile.cs @@ -0,0 +1,241 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Web; +using Encoder = System.Text.Encoder; + +namespace umbraco.cms.businesslogic.Files +{ + public class UmbracoFile : IFile + { + private string _fullFilePath; + private string _fileName; + private string _directoryName; + private string _extension; + private string _localName; + private long _length; + + public UmbracoFile() + { + + } + + public UmbracoFile(string fullFilePath) + { + _fullFilePath = fullFilePath; + initialize(); + } + + public static UmbracoFile Save(HttpPostedFile file, string fullFileName) + { + string fullFilePath = IO.IOHelper.MapPath(fullFileName); + + // create directories + DirectoryInfo di = new DirectoryInfo(IO.IOHelper.MapPath(fullFilePath.Substring(0, fullFilePath.LastIndexOf(Path.DirectorySeparatorChar)))); + if (!di.Exists) + { + var currentDir = IO.IOHelper.MapPath(IO.SystemDirectories.Root); + var rootDir = IO.IOHelper.MapPath(IO.SystemDirectories.Root); + foreach (var dir in di.FullName.Substring(rootDir.Length).Split(Path.DirectorySeparatorChar)) + { + currentDir = Path.Combine(currentDir, dir); + if (!new DirectoryInfo(currentDir).Exists) + { + Directory.CreateDirectory(currentDir); + } + } + } + + file.SaveAs(fullFilePath); + return new UmbracoFile(fullFilePath); + } + + public static UmbracoFile Save(HttpPostedFile file) + { + string tempDir = Path.Combine(IO.SystemDirectories.Media, "uploads", Guid.NewGuid().ToString()); + return Save(file, tempDir); + } + + private void initialize() + { + var fi = new FileInfo(_fullFilePath); + _fileName = fi.Name; + _length = fi.Length; + _directoryName = fi.DirectoryName; + _extension = fi.Extension.Substring(1); + _localName = + "/" + fi.FullName.Substring(IO.IOHelper.MapPath(IO.SystemDirectories.Root).Length).Replace( + Path.DirectorySeparatorChar.ToString(), "/"); + } + + #region IFile Members + + public string Filename + { + get { return _fileName; } + } + + public string Extension + { + + get { return _extension; } + } + + public string LocalName + { + get { return _localName; } + } + + public long Length + { + get { return _length; } + } + + public bool SupportsResizing + { + get + { + if (("," + UmbracoSettings.ImageFileTypes + ",").Contains(string.Format(",{0},", _extension))) + { + return true; + } + return false; + } + } + + public string GetFriendlyName() + { + return helpers.Casing.SpaceCamelCasing(_fileName); + } + + public System.Tuple GetDimensions() + { + throwNotAnImageException(); + + + FileStream fs = new FileStream(_fullFilePath, + FileMode.Open, FileAccess.Read, FileShare.Read); + + Image image = Image.FromStream(fs); + var fileWidth = image.Width; + var fileHeight = image.Height; + fs.Close(); + image.Dispose(); + + return new System.Tuple(fileWidth, fileHeight); + } + + public string Resize(int width, int height) + { + throwNotAnImageException(); + + string fileNameThumb = DoResize(width, height, 0, String.Empty); + + return fileNameThumb.Substring(IO.IOHelper.MapPath(IO.SystemDirectories.Root).Length); + } + + public string Resize(int maxWidthHeight, string fileNameAddition) + { + throwNotAnImageException(); + + string fileNameThumb = DoResize(GetDimensions().Item1, GetDimensions().Item2, maxWidthHeight, fileNameAddition); + + return fileNameThumb.Substring(IO.IOHelper.MapPath(IO.SystemDirectories.Root).Length); + } + + private string DoResize(int width, int height, int maxWidthHeight, string fileNameAddition) + { + + FileStream fs = new FileStream(_fullFilePath, + FileMode.Open, FileAccess.Read, FileShare.Read); + Image image = Image.FromStream(fs); + fs.Close(); + + string fileNameThumb = String.IsNullOrEmpty(fileNameAddition) ? + string.Format("{0}_UMBRACOSYSTHUMBNAIL.{1}", _fullFilePath.Substring(0, _fullFilePath.LastIndexOf(".")), _extension) : + string.Format("{0}_{1}.{2}", _fullFilePath.Substring(0, _fullFilePath.LastIndexOf(".")), fileNameAddition, _extension); + generateThumbnail( + image, + maxWidthHeight, + width, + height, + _fullFilePath, + _extension, + fileNameThumb, + maxWidthHeight == 0 + ); + image.Dispose(); + return fileNameThumb; + } + + #endregion + + private void throwNotAnImageException() + { + if (!SupportsResizing) + throw new NotAnImageException(string.Format("The file {0} is not an image, so can't get dimensions", _fileName)); + } + + + private System.Tuple generateThumbnail(System.Drawing.Image image, int maxWidthHeight, int fileWidth, int fileHeight, string fullFilePath, string ext, string thumbnailFileName, bool useFixedDimensions) + { + // Generate thumbnail + float f = 1; + if (!useFixedDimensions) + { + var fx = (float)image.Size.Width / (float)maxWidthHeight; + var fy = (float)image.Size.Height / (float)maxWidthHeight; + + // must fit in thumbnail size + f = Math.Max(fx, fy); //if (f < 1) f = 1; + } + + var widthTh = (int)Math.Round((float)fileWidth / f); int heightTh = (int)Math.Round((float)fileHeight / f); + + // fixes for empty width or height + if (widthTh == 0) + widthTh = 1; + if (heightTh == 0) + heightTh = 1; + + // Create new image with best quality settings + var bp = new Bitmap(widthTh, heightTh); + var g = Graphics.FromImage(bp); + g.SmoothingMode = SmoothingMode.HighQuality; + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + g.PixelOffsetMode = PixelOffsetMode.HighQuality; + g.CompositingQuality = CompositingQuality.HighQuality; + + // Copy the old image to the new and resized + var rect = new Rectangle(0, 0, widthTh, heightTh); + g.DrawImage(image, rect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); + + // Copy metadata + ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); + ImageCodecInfo codec = null; + for (int i = 0; i < codecs.Length; i++) + { + if (codecs[i].MimeType.Equals("image/jpeg")) + codec = codecs[i]; + } + + // Set compresion ratio to 90% + var ep = new EncoderParameters(); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 90L); + + // Save the new image using the dimensions of the image + bp.Save(thumbnailFileName.Replace("UMBRACOSYSTHUMBNAIL", string.Format("{0}x{1}", widthTh, heightTh)), codec, ep); + bp.Dispose(); + g.Dispose(); + + return new System.Tuple(widthTh, heightTh); + + } + + + } +} diff --git a/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs b/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs new file mode 100644 index 0000000000..9d177f7805 --- /dev/null +++ b/src/umbraco.cms/businesslogic/datatype/FileHandlerData.cs @@ -0,0 +1,74 @@ +using System; +using System.IO; +using System.Web; +using umbraco.cms.businesslogic.Files; +using umbraco.IO; + +namespace umbraco.cms.businesslogic.datatype +{ + public class FileHandlerData : DefaultData + { + private readonly string _thumbnailSizes; + + public FileHandlerData(BaseDataType DataType, string thumbnailSizes) + : base(DataType) + { + _thumbnailSizes = thumbnailSizes; + } + + public override object Value + { + get { return base.Value; } + set + { + UmbracoFile um = null; + if (value is HttpPostedFile) + { + // handle upload + var file = value as HttpPostedFile; + if (file.FileName != String.Empty) + { + var fileName = UmbracoSettings.UploadAllowDirectories ? + Path.Combine(PropertyId.ToString(), file.FileName) : + PropertyId + "-" + file.FileName; + + fileName = Path.Combine(SystemDirectories.Media, fileName); + um = UmbracoFile.Save(file, fileName); + + if (um.SupportsResizing) + { + // make default thumbnail + um.Resize(100, "thumb"); + + // additional thumbnails configured as prevalues on the DataType + if (_thumbnailSizes != "") + { + char sep = (!_thumbnailSizes.Contains("") && _thumbnailSizes.Contains(",")) ? ',' : ';'; + + foreach (string thumb in _thumbnailSizes.Split(sep)) + { + int thumbSize; + if (thumb != "" && int.TryParse(thumb, out thumbSize)) + { + um.Resize(thumbSize, string.Format("thumb_{0}", thumbSize)); + } + } + } + } + + base.Value = um.LocalName; + } + else + { + // if no file is uploaded, we reset the value + base.Value = String.Empty; + } + } + else + { + base.Value = value; + } + } + } + } +} \ No newline at end of file diff --git a/src/umbraco.cms/helpers/Casing.cs b/src/umbraco.cms/helpers/Casing.cs index 5c43971d78..923997c189 100644 --- a/src/umbraco.cms/helpers/Casing.cs +++ b/src/umbraco.cms/helpers/Casing.cs @@ -59,5 +59,34 @@ namespace umbraco.cms.helpers return alias; } } + + public static string SpaceCamelCasing(string text) + { + string s = text; + + if (2 > s.Length) + { + return s; + } + + + var sb = new System.Text.StringBuilder(); + var ca = s.ToCharArray(); + ca[0] = char.ToUpper(ca[0]); + + sb.Append(ca[0]); + for (int i = 1; i < ca.Length - 1; i++) + { + char c = ca[i]; + if (char.IsUpper(c) && (char.IsLower(ca[i + 1]) || char.IsLower(ca[i - 1]))) + { + sb.Append(' '); + } + sb.Append(c); + } + sb.Append(ca[ca.Length - 1]); + return sb.ToString(); + + } } } diff --git a/src/umbraco.cms/umbraco.cms.csproj b/src/umbraco.cms/umbraco.cms.csproj index e3a84b3e2b..3ff2f6eac3 100644 --- a/src/umbraco.cms/umbraco.cms.csproj +++ b/src/umbraco.cms/umbraco.cms.csproj @@ -208,8 +208,12 @@ + + + + diff --git a/src/umbraco.editorControls/uploadfield/DataTypeUploadField.cs b/src/umbraco.editorControls/uploadfield/DataTypeUploadField.cs index 9ae372ddca..acdf95af82 100644 --- a/src/umbraco.editorControls/uploadfield/DataTypeUploadField.cs +++ b/src/umbraco.editorControls/uploadfield/DataTypeUploadField.cs @@ -26,7 +26,7 @@ namespace umbraco.editorControls.uploadfield get { if (_baseData == null) - _baseData = new cms.businesslogic.datatype.DefaultData(this); + _baseData = new cms.businesslogic.datatype.FileHandlerData(this, ((uploadFieldPreValue)PrevalueEditor).Configuration); return _baseData; } } diff --git a/src/umbraco.editorControls/uploadfield/uploadField.cs b/src/umbraco.editorControls/uploadfield/uploadField.cs index 29925cac92..dacff1470c 100644 --- a/src/umbraco.editorControls/uploadfield/uploadField.cs +++ b/src/umbraco.editorControls/uploadfield/uploadField.cs @@ -6,6 +6,7 @@ using System.IO; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; +using umbraco.cms.businesslogic.Files; using umbraco.IO; using System.Text.RegularExpressions; @@ -107,7 +108,8 @@ namespace umbraco.editorControls bytesControl.RefreshLabel(string.Empty); } } - catch { + catch + { //if first one fails we can assume that props don't exist break; } @@ -116,69 +118,22 @@ namespace umbraco.editorControls if (this.PostedFile != null) { - if (this.PostedFile.FileName != "") + _data.Value = this.PostedFile; + + // we update additional properties post image upload + if (_data.Value != DBNull.Value && !string.IsNullOrEmpty(_data.Value.ToString())) { - //if (_text.Length > 0 && helper.Request(this.ClientID + "clear") != "1") - //{ - // //delete old file - // deleteFile(_text); - - //} - - // Find filename (removed the safe url here as it removes fullpath characters (such as c:\ becomes c:) - the safe url should only be used when saving the - // local filename - _text = this.PostedFile.FileName; - string filename; - string _fullFilePath; + var fullFilePath = IO.IOHelper.MapPath(_data.Value.ToString()); + UmbracoFile uf = new UmbracoFile(fullFilePath); cms.businesslogic.Content content = cms.businesslogic.Content.GetContentFromVersion(this._data.Version); - if (umbraco.UmbracoSettings.UploadAllowDirectories) - { - // moved the safeUrl call to here as it's the local file name to be stored - filename = SafeUrl(_text.Substring(_text.LastIndexOf(IOHelper.DirSepChar) + 1, _text.Length - _text.LastIndexOf(IOHelper.DirSepChar) - 1).ToLower()); - // Create a new folder in the /media folder with the name /media/propertyid - - - System.IO.Directory.CreateDirectory(IOHelper.MapPath(SystemDirectories.Media + "/" + _data.PropertyId.ToString())); - - _fullFilePath = IOHelper.MapPath(SystemDirectories.Media + "/" + _data.PropertyId.ToString() + "/" + filename); - this.PostedFile.SaveAs(_fullFilePath); - - //if we are not in a virtual dir, just save without the ~ - string _relFilePath = SystemDirectories.Media + "/" + _data.PropertyId + "/" + filename; - if (SystemDirectories.Root == string.Empty) - _relFilePath = _relFilePath.TrimStart('~'); - - _data.Value = _relFilePath; - } - else - { - //filename = this. - filename = System.IO.Path.GetFileName(SafeUrl(this.PostedFile.FileName)); - filename = _data.PropertyId + "-" + filename; - _fullFilePath = IOHelper.MapPath(SystemDirectories.Media + "/" + filename); - this.PostedFile.SaveAs(_fullFilePath); - - //if we are not in a virtual dir, just save without the ~ - string _relFilePath = SystemDirectories.Media + "/" + filename; - if (SystemDirectories.Root == string.Empty) - _relFilePath = _relFilePath.TrimStart('~'); - - _data.Value = _relFilePath; - } - - // hack to find master page prefix client id - string masterpagePrefix = this.ClientID.Substring(0, this.ClientID.LastIndexOf("_") + 1); - // Save extension - string orgExt = ((string)_text.Substring(_text.LastIndexOf(".") + 1, _text.Length - _text.LastIndexOf(".") - 1)); - orgExt = orgExt.ToLower(); - string ext = orgExt.ToLower(); + string orgExt = uf.Extension.ToLower(); try { //cms.businesslogic.Content.GetContentFromVersion(_data.Version).getProperty("umbracoExtension").Value = ext; - content.getProperty("umbracoExtension").Value = ext; + content.getProperty("umbracoExtension").Value = orgExt; noEdit extensionControl = uploadField.FindControlRecursive(this.Page, "prop_umbracoExtension"); if (extensionControl != null) { @@ -192,9 +147,8 @@ namespace umbraco.editorControls // Save file size try { - System.IO.FileInfo fi = new FileInfo(_fullFilePath); //cms.businesslogic.Content.GetContentFromVersion(_data.Version).getProperty("umbracoBytes").Value = fi.Length.ToString(); - content.getProperty("umbracoBytes").Value = fi.Length.ToString(); + content.getProperty("umbracoBytes").Value = uf.Length.ToString(); noEdit bytesControl = uploadField.FindControlRecursive(this.Page, "prop_umbracoBytes"); if (bytesControl != null) { @@ -204,18 +158,13 @@ namespace umbraco.editorControls catch { } // Check if image and then get sizes, make thumb and update database - if (",jpeg,jpg,gif,bmp,png,tiff,tif,".IndexOf("," + ext + ",") > -1) + if (uf.SupportsResizing) { - int fileWidth; - int fileHeight; + System.Tuple dimensions = uf.GetDimensions(); + int fileWidth = dimensions.Item1; + int fileHeight = dimensions.Item2; - FileStream fs = new FileStream(_fullFilePath, - FileMode.Open, FileAccess.Read, FileShare.Read); - - System.Drawing.Image image = System.Drawing.Image.FromStream(fs); - fileWidth = image.Width; - fileHeight = image.Height; - fs.Close(); + try { //cms.businesslogic.Content.GetContentFromVersion(_data.Version).getProperty("umbracoWidth").Value = fileWidth.ToString(); @@ -236,27 +185,6 @@ namespace umbraco.editorControls catch { } - // Generate thumbnails - string fileNameThumb = _fullFilePath.Replace("." + orgExt, "_thumb"); - generateThumbnail(image, 100, fileWidth, fileHeight, _fullFilePath, ext, fileNameThumb + _thumbnailext); - - if (_thumbnails != "") - { - char sep = ';'; - - if (!_thumbnails.Contains(sep.ToString()) && _thumbnails.Contains(",")) - sep = ','; - - string[] thumbnailSizes = _thumbnails.Split(sep); - foreach (string thumb in thumbnailSizes) - { - int _thum = 0; - if (thumb != "" && int.TryParse(thumb, out _thum)) - generateThumbnail(image, _thum, fileWidth, fileHeight, _fullFilePath, ext, fileNameThumb + "_" + thumb + _thumbnailext); - } - } - - image.Dispose(); } } this.Text = _data.Value.ToString(); diff --git a/src/umbraco.presentation/helper.cs b/src/umbraco.presentation/helper.cs index 14bc059a53..80b636328c 100644 --- a/src/umbraco.presentation/helper.cs +++ b/src/umbraco.presentation/helper.cs @@ -151,44 +151,7 @@ namespace umbraco public static string SpaceCamelCasing(string text) { - string s = text; - - if (2 > s.Length) - { - return s; - } - - - var sb = new System.Text.StringBuilder(); - var ca = s.ToCharArray(); - ca[0] = char.ToUpper(ca[0]); - - sb.Append(ca[0]); - for (int i = 1; i < ca.Length - 1; i++) - { - char c = ca[i]; - if (char.IsUpper(c) && (char.IsLower(ca[i + 1]) || char.IsLower(ca[i - 1]))) - { - sb.Append(' '); - } - sb.Append(c); - } - sb.Append(ca[ca.Length - 1]); - return sb.ToString(); - - - /* OLD way - string _tempString = text.Substring(0, 1).ToUpper(); - for (int i = 1; i < text.Length; i++) - { - if (text.Substring(i, 1) == " ") - break; - if (text.Substring(i, 1).ToUpper() == text.Substring(i, 1)) - _tempString += " "; - _tempString += text.Substring(i, 1); - } - return _tempString; - */ + return cms.helpers.Casing.SpaceCamelCasing(text); } [Obsolete("Use umbraco.presentation.UmbracContext.Current.GetBaseUrl()")] From 0cba90c81d12c10eb2d9c02e9b0a2d1526e1c732 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Tue, 3 Jul 2012 22:31:04 -0100 Subject: [PATCH 6/6] Examine: Updated assemblies to v1.4.2 (fixes an "Inheritance security rules violated" exception within TypeFinder) --- lib/Examine.dll | Bin 82432 -> 82432 bytes lib/Examine.xml | 750 -------------------- lib/UmbracoExamine.XML | 1502 ---------------------------------------- lib/UmbracoExamine.dll | Bin 32768 -> 33280 bytes 4 files changed, 2252 deletions(-) delete mode 100644 lib/Examine.xml delete mode 100644 lib/UmbracoExamine.XML diff --git a/lib/Examine.dll b/lib/Examine.dll index c238d7375c4bddcf2bcf28d8a0f12e8ca0eecae1..917f9c31093e7368eed7c6768e0a5eb1e60c85b2 100644 GIT binary patch delta 19618 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

CG>XQy6X#B#i~YRu)l?gM9i<9uY7&O7Y}#pZ zv1rr1z-xdu_6Rr%dyPuXnZnRd!Lc#9d8aADX5r-owVGcA=OS=yOluZ0Z-d5Kw6si+ z73KrlSapj~q~^8d+1NIs_qWt|6!r^}QCfveQS1LfW(H`5%^_St*h!_4R?)yUBy&rv z@WF;D&tZmbn{r)kE_-dt<5Ohzw<&9(r?P#giS2)Ft)C}xeD!q&-^FuS4!$*$_8(h! zy|m`DY6Kzn5bKrq=Qi*p zLw&i=%~}Y5S^vDYdVP+ez49TgZ@m{ElfSfo*ZLm5vZ?*^3^&`-{!l<>fzs(rW_Q&b z;4*u!R?z;^o0x~KZ&>J0aGq|S&N!3W0{DR7mbL?UpBVzm>}XqlhRpVr2>Ns4{A2%y z^H=iXH_CtGNMXN0oM&tYn_Rij~Ll|JUjsumTR z_htlzSThpre&rjE7|JwZA{@?c>aJp05Kh8KJ{S9y0Lg88MFKD-38<=UVxlJCEW>MRh zu^i;ymdbGwi;$H1x*TTjNcDP--B%Oyyd(V_Bbg|BS9(Ryv17GUG`=HXxU2pVEn`QZ z7xV$~xJXnPDuN>+$1}o4IuHl3JuAXea?rOuQK2agHz>tn7x|Q`9(%&nu1@fxfTr&-?=G3!Y%vE*2>&bY({Z-Gpo@4n{ zVYYx;*~g|-9dqqt)2l*~kmO0fYK)7{uS!jNjxDWfOuCsW{DyjVINq~~$!9wISVvWN zQV!(9?5I?md{I)T_QBrL=s?mTb~x!J=_vkf#obBo;y!AKccHl_lZK=+dv0ZY+uza$urr(s=Yv==@Y`4Xsz3Jh@V&SQ1U16>;USHRK1YgXE?9om%zVO9ZKG2 zFjQ}`ABB7~+hGV-|2}yKI1fbG7hnw}eNDdmn!IM@V%&G3$rqG8hAq`EDKDbuuPH~R zE2`fCE&MBn^i##kg}GKS6POjvf1&I%{J2`+J=N>jKEspM^=wG`MfKmo`CT>h2oK7h zqte^ew_!Y9j*9>~xe6;2<&lvj?v@M6xVc-Xzg~l9S zl)S~hA!I9!VgFNy zOzmmFNp+3hqf&L;40@T_G z+*`K`_#ojEgwFv-SgJz|%A~qKfPOtHk9k*-jm!B9wV!yc#y9Ie_jWFIIKg&19u5r!sb@F)`^{kVt_4TZaZ>(SD>*ANzhuPO~@0nQsSJkic-At|y)2iw; zbk#KshA}J=VpGVa*uB_e?W&U_fA zh*i*O5P`50jXmk_;u9Kw>c5!+VW+XN@vYREd`jawHj|&;_-^V3H2;w!y4iS1<437| z#+w@doZ4l4yz#H8oyKPyErE?t5oQ}e+Vn#5QT728y@7&eHfFRoTLNyL)_l8k)VQ?yiNF}^Y90<;46{CRxPfDVV~`y4 zj7{*Y3&^#|~J9TC!@oy&n9Xu)~#l19&H**m`k4pdB zyeI8p5^|efm%mJVl0=`Q>GLa+e3BIXhB$|bgN<8Dv2_=pNLUISqFO_coR|JC(eF~N zcllt&+37jZjOfWR{}DP+d`)_xX>Q9RJ|wMcxe4@nEq4L8wmgy^HtlG6I$ezMv*7Fk ze}v!Na!4vPb=CflwT=`O0!P!A8=r02>u)n1ZehVT(}yidz^_`;fTmU!oC%o;!F_1! zoZu&9iij@JC;eelPU{bYg{Gu}2k>OrU2sXzK~Ik_$m*{N7f>@Jys~w7u#mU44)NuB z!#v${cW{HLtM&1q;5-vN#;$DLVn4=qw!RiLO2WGiNi4Z-CX=n6rAT7_2Z?it_q2th zYzHaYWx94sMaC}EZBvH$*IZ1TLjLHKmW;1q>6y;25iD0aM`+6IF}*Y8w2UFtYG(P= zKnbaY%?9+Dvf6PV=W$YeyE$AoMZNO)VQ_SXOmf64;OJs+vPQ=q z;tYY_lQ2fuM|cTU*hBOP;j^TAjA(8Y4H%4~v39}{;*1e?m_%tOVT`bkaFB2h;V@xz zgpyIhF+wJb%2xSJ_EnNqUSxPSDVsQj;1ndc5_cMfq1&5I1H-G$(2?l$7gB+g85e(mlgP8V^y zz_BWQ#MwriZQ!&kgTxso93^BH(PW-Q3`9F&hb1alYbX<=;!7;TltH3zCmbexmT;8t z9YSUmbq$0$gn5LmgzbbKglh<6gqIKw5)NDKQK%TD49;yqXA`y(b`TB{4ikZLXpRvM>X<4dhoh8?60(3`b)*T55e^a#6OIzHbWxg3*h<(z7$Y1El2RSB z1wBgGnk(oI!WiKo;cza^|53`YJW@^AO4vadBOD|gCLASX`6N#`Tttl#vSLBA5-KGe z*0Gdi2s_FI9V@d>K{7}gHi;?_wi0#_#wH8?AmK3KC?N}zeAuoXdbq7d(8CSHX%yH> zIJGekZtoyEMtCW428kYSv}-dTsfvoB>1d|`A{-HkftGoS>j0-FNS!1aMWfx830 z349r-Nb5@5m*!1xnw&m8eR=wM>3h;&O#e9jv-Gdh+k?x48-hK-p9TLGtjm~|F()IE zab?Dh8INTg&PdLz+rQ?3*=RLQDa>H()G3qpN1oVciXM_?Gs(0Vr|3r0XP{-%=Rk{T zDL6LM2RO*fXIo8|n65JIG~H~v!*s9dVbe78+YX0Qah5xmIWKeWaPDzF?EKVO>U!Mu zsmqo$FKJ2AwMq9RznOfq@)M=iv%|B?Q{g?`+vxkDFY5b?&*IPU7y4KDQv<&Wq&23^ zNL!M2W!klAH>Uj|?H_5zbVvH+^y>68()-e{4(<&8G5A67&%xx3vog-j=*#$J#%mdQ znZ_8yAI^%jKaObLS~^=Z3Re6NXD@4)|8!1t4zoB{vqjE)w%b{PUq0v({H|v=y9V&P zm3`p4kA;(-VwdBD`~<@HlmpEwwQ(A9MEB;75G)*_Y~XiX=MNFS;K%G-|c(~zc<03 z!@lu7h2I>Mn~@LWmxbSr(mDPcrC$8D;kOgNTm5F99higq_pu3SPqEUp`&eh%R!QXF z$0s;{!f$JOBin}G%-zmL_5g^oU?Zyzt|qz>^t@o0Z%sc0!I!1%K$zcwvO9uN{sw+$ zWUPiEQT{yA=QE=GJ*4mLPk-*N@PxH%Hg$Jx+`Mqp`n8d^jku{fbJNDPY|%LOqO}|M z4}W=yHNP%At){K2Vp?h4)VA`{%9@Ir(zd#`s?u=XwD6Rg@`|aGPpRI2_BUr*4*cBA zuTYYk_kOVBw%s+;hxP`>4&=S^*8?4CTy~gooy^^RZ3F8j@Dto6E^C>Q6NvnB3w_ieKvRr+=)Z7zuQ{YdG% zT1RLjc_D{}g2rq#p$p?*|H)=4BbbTn2`+OZXPjZGo|nO1CxvS6C7joNeK@ikxTi6=x@yo6_vh2X0xR9y`-$Q!Th*c zCJazUkSf1nViG(;^dV7YIjY!&yWbE46PN0-LJD0aM?pT>Vl+!G%LzY92_HzJ6=VVf zcb9S{D*7z>p$(p=0e}H|s`RA@E0mdNIYXIggokH}`Suo4bbc`s8_J2}VYow$mnnUz z7;R;P$;{ocCoyVD-$56WAX1ulvA0kpm}qsNp^WF6KU4a|-veir@uj>R(_p>iG|Lur zXuZ-W>KU@}p^5B{4cVFG?uXtX`~}k~8tLZ)|2v7FncQ!3W*fN@8&P6cOG>|K;Ec&U zY=gEA%w{o!H%;c-;QahBFGeyy%ya9k+{5f%cfXa32`i>O^*&!R%1XaefZLUA;+UfS zP9^pfvebos@4!7_p4Z}(kX8Bv7K4pDbkYIRsgq8SHl4I#g2H5>uoNTZ0u5@wS$*zHsa-KPGeL24`tIC9Xto|mT(%^iK`*2NxSBAkx1NU$x&&7!SzLKBj zgeHi^uD4T3Z57YpR}U@yXOuIP^UPu~DzP{0=z2fKZ6E%M<=8(m zfPaM&;v)kqYj`z(Y2dmVJ^^MtR>No759$l@Ae=qmsO9l+R=C}tU%3>QcWEJ&><#7)_f#bp7yES3~A1|+TqH4f~l<@MZAURGXL ziF-E_$N$hZR>y0mVGDr&>ua9a35a{rRrtm5S!WC%IWJr^by3s)n=Zbv^P{5jQDmh@h4Nz**kK4Qu6WxFVu4j zA8 delta 19729 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 diff --git a/lib/Examine.xml b/lib/Examine.xml deleted file mode 100644 index a7d711af0f..0000000000 --- a/lib/Examine.xml +++ /dev/null @@ -1,750 +0,0 @@ - - - - Examine - - - -

- Override this method so that the Distinct() operator works - - - - - - - Override this method so that the Distinct() operator works - - - - - - Returns the key value pair for the index specified - - - - - - - Returns the value for the key specified - - - - - - - An interface representing an Examine Searcher - - - - - Searches the specified search text in all fields of the index - - The search text. - if set to true the search will use wildcards. - Search Results - - - - Searches using the specified search query parameters - - The search parameters. - Search Results - - - - Creates a search criteria instance as required by the implementation - - - - - - Creates a search criteria instance as required by the implementation - - The type of index (i.e. Media or Content ) - - - - Creates a search criteria instance as required by the implementation - - The type of data in the index. - The default operation. - - An instance of - - - - - Interface to represent an Examine Indexer - - - - - Forces a particular XML node to be reindexed - - XML node to reindex - Type of index to use - - - - Deletes a node from the index - - Node to delete - - - - Re-indexes all data for the index type specified - - - - - - Rebuilds the entire index from scratch for all index types - - - - - Gets/sets the index criteria to create the index with - - The indexer data. - - - - Uses the default provider specified to search - - - - This is just a wrapper for the default provider - - - - Uses the default provider specified to search - - - - - - - - - Reindex nodes for the providers specified - - - - - - - - Deletes index for node for the specified providers - - - - - - - Reindex nodes for all providers - - - - - - - Deletes index for node for all providers - - - - - - Creates search criteria that defaults to IndexType.Any and BooleanOperation.And - - - - - - Singleton - - - - - Simple class to store the definition of an indexed node - - - - - A collection of Examine Index Providers - - - - - Adds a provider to the collection. - - The provider to be added. - - The collection is read-only. - - - is null. - - - The of is null. - - or - - The length of the of is less than 1. - - - - - - - - Gets the enumerator. - - - - - - Returns an object that implements the interface to iterate through the collection. - - - An object that implements to iterate through the collection. - - - - - Gets the with the specified name. - - - - - - Gets the at the specified index. - - - - - - Simple search method which should default to searching content nodes - - - - - - - - - Searches the data source using the Examine Fluent API - - The fluent API search. - - - - - Creates an instance of SearchCriteria for the provider - - - - - - Creates an instance of SearchCriteria for the provider - - The max number of results. - The type of data in the index. - A blank SearchCriteria - - - - Creates an instance of SearchCriteria for the provider - - The max number of results. - The type of data in the index. - The default operation. - A blank SearchCriteria - - - - Config section for Examine - - - - - Gets the instance of the Examine settings. - - The instance. - - - - Gets the search providers. - - The search providers. - - - - Gets the index providers. - - The index providers. - - - - Base class for an Examine Index Provider. You must implement this class to create an IndexProvider - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The indexer data. - - - - Initializes the provider. - - The friendly name of the provider. - A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. - - The name of the provider is null. - - - The name of the provider has a length of zero. - - - An attempt is made to call on a provider after the provider has already been initialized. - - - - - Forces a particular XML node to be reindexed - - XML node to reindex - Type of index to use - - - - Deletes a node from the index - - Node to delete - - - - Re-indexes all data for the index type specified - - - - - - Rebuilds the entire index from scratch for all index types - - - - - Called when a node is ignored by the ValidateDocument method. - - - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - If true, the IndexingActionHandler will be run to keep the default index up to date. - - - - - Determines if the manager will call the indexing methods when content is saved or deleted as - opposed to cache being updated. - - - - - Gets/sets the index criteria to create the index with - - - - - Occurs for an Indexing Error - - - - - Occurs when a node is in its Indexing phase - - - - - Occurs when a node is in its Indexed phase - - - - - Occurs when a collection of nodes are in their Indexing phase (before a single node is processed) - - - - - Occurs when the collection of nodes have been indexed - - - - - Occurs when the indexer is gathering the fields and their associated data for the index - - - - - Occurs when a node is deleted from the index - - - - - Occurs when a particular field is having its data obtained - - - - - Occurs when node is found but outside the supported node set - - - - - Config section for the Examine Index Providers - - - - - Gets the indexing providers. - - The providers. - - - - Config section for the Examine search providers - - - - - Gets the search providers. - - The providers. - - - - Gets or sets the default provider. - - The default provider. - - - - Defines the supported operation for addition of additional clauses in the fluent API - - - - - Sets the next operation to be AND - - - - - - Sets the next operation to be OR - - - - - - Sets the next operation to be NOT - - - - - - Compiles this instance for fluent API conclusion - - - - - - a data structure for storing indexing/searching instructions - - - - - - - - - - Defines the query methods for the fluent search API - - - - - Query on the id - - The id. - - - - - Query on the NodeName - - Name of the node. - - - - - Query on the NodeName - - Name of the node. - - - - - Query on the NodeTypeAlias - - The node type alias. - - - - - Query on the NodeTypeAlias - - The node type alias. - - - - - Query on the Parent ID - - The id of the parent. - - - - - Query on the specified field - - Name of the field. - The field value. - - - - - Query on the specified field - - Name of the field. - The field value. - - - - - Query on a specified field using a date range. Includes upper and lower bounds - - Name of the field. - The lower. - The upper. - - - - - Query on a specified field using a date range - - Name of the field. - The lower. - The upper. - if set to true the lower. - if set to true the upper. - - - - - Query on a specified field using an int range - - Name of the field. - The lower. - The upper. - - - - - Query on a specified field using an int range. Includes upper and lower bounds - - Name of the field. - The lower. - The upper. - if set to true [include lower]. - if set to true [include upper]. - - - - - Query on a specified field using a string range. Includes upper and lower bounds - - Name of the field. - The lower. - The upper. - - - - - Query on a specified field using a string range - - Name of the field. - The lower. - The upper. - if set to true [include lower]. - if set to true [include upper]. - - - - - Queries multiple fields with each being an And boolean operation - - The fields. - The query. - - - - - Queries multiple fields with each being an And boolean operation - - The fields. - The query. - - - - - Queries multiple fields with each being an Or boolean operation - - The fields. - The query. - - - - - Queries multiple fields with each being an Or boolean operation - - The fields. - The query. - - - - - Queries multiple fields with each being an Not boolean operation - - The fields. - The query. - - - - - Queries multiple fields with each being an Not boolean operation - - The fields. - The query. - - - - - Queries on multiple fields with their inclusions customly defined - - The fields. - The query. - The operations. - - - - - Queries on multiple fields with their inclusions customly defined - - The fields. - The query. - The operations. - - - - - Orders the results by the specified fields - - The field names. - - - - - Orders the results by the specified fields in a descending order - - The field names. - - - - - Gets the boolean operation which this query method will be added as - - The boolean operation. - - - - Passes a text string which is preformatted for the underlying search API. Examine will not modify this - - - This allows a developer to completely bypass and Examine logic and comprise their own query text which they are passing in. - It means that if the search is too complex to achieve with the fluent API, or too dynamic to achieve with a static language - the provider can still handle it. - - The query. - - - - - Indicates the type of data to search on - - - - diff --git a/lib/UmbracoExamine.XML b/lib/UmbracoExamine.XML deleted file mode 100644 index a087a5fefe..0000000000 --- a/lib/UmbracoExamine.XML +++ /dev/null @@ -1,1502 +0,0 @@ - - - - UmbracoExamine - - - - - Adds an index field to the collection - - - - - - Default property for accessing an IndexField definition - - Field Name - - - - - Initializes a new instance of the class. - - The search. - The occurance. - - - - Query on the id - - The id. - A new with the clause appended - - - - Query on the NodeName - - Name of the node. - A new with the clause appended - - - - Query on the NodeTypeAlias - - The node type alias. - A new with the clause appended - - - - Query on the Parent ID - - The id of the parent. - A new with the clause appended - - - - Query on the specified field - - Name of the field. - The field value. - A new with the clause appended - - - - Ranges the specified field name. - - Name of the field. - The start. - The end. - A new with the clause appended - - - - Ranges the specified field name. - - Name of the field. - The start. - The end. - if set to true [include lower]. - if set to true [include upper]. - A new with the clause appended - - - - Ranges the specified field name. - - Name of the field. - The start. - The end. - A new with the clause appended - - - - Ranges the specified field name. - - Name of the field. - The start. - The end. - if set to true [include lower]. - if set to true [include upper]. - A new with the clause appended - - - - Ranges the specified field name. - - Name of the field. - The start. - The end. - A new with the clause appended - - - - Ranges the specified field name. - - Name of the field. - The start. - The end. - if set to true [include lower]. - if set to true [include upper]. - A new with the clause appended - - - - Query on the NodeName - - Name of the node. - A new with the clause appended - - - - Query on the NodeTypeAlias - - The node type alias. - A new with the clause appended - - - - Query on the specified field - - Name of the field. - The field value. - A new with the clause appended - - - - Queries multiple fields with each being an And boolean operation - - The fields. - The query. - A new with the clause appended - - - - Queries multiple fields with each being an And boolean operation - - The fields. - The query. - A new with the clause appended - - - - Queries multiple fields with each being an Or boolean operation - - The fields. - The query. - A new with the clause appended - - - - Queries multiple fields with each being an Or boolean operation - - The fields. - The query. - A new with the clause appended - - - - Queries multiple fields with each being an Not boolean operation - - The fields. - The query. - A new with the clause appended - - - - Queries multiple fields with each being an Not boolean operation - - The fields. - The query. - A new with the clause appended - - - - Queries on multiple fields with their inclusions customly defined - - The fields. - The operations. - The query. - A new with the clause appended - - - - Queries on multiple fields with their inclusions customly defined - - The fields. - The operations. - The query. - A new with the clause appended - - - - Orders the results by the specified fields - - The field names. - A new with the clause appended - - - - Orders the results by the specified fields in a descending order - - The field names. - A new with the clause appended - - - - Gets the boolean operation which this query method will be added as - - The boolean operation. - - - - An Examine searcher which uses Lucene.Net as the - - - - - Default constructor - - - - - Constructor to allow for creating an indexer at runtime - - - - - - Used as a singleton instance - - - - - Initializes the provider. - - The friendly name of the provider. - A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. - - The name of the provider is null. - - - The name of the provider has a length of zero. - - - An attempt is made to call on a provider after the provider has already been initialized. - - - - - Do not access this object directly. The public property ensures that the folder state is always up to date - - - - - Simple search method which defaults to searching content nodes - - - - - - - - Searches the data source using the Examine Fluent API - - The fluent API search. - - - - - Creates search criteria that defaults to IndexType.Any and BooleanOperation.And - - - - - - Creates an instance of SearchCriteria for the provider - - - - - Creates an instance of SearchCriteria for the provider - - The type of data in the index. - The default operation. - A blank SearchCriteria - - - - Gets the searcher for this instance - - - - - - Checks if the reader is current, closed or not up to date - - The reader status - - Performs error checking as the reader may be closed - - - - - This checks if the singleton IndexSearcher is initialized and up to date. - - - - - - Used to specify if leading wildcards are allowed. WARNING SLOWS PERFORMANCE WHEN ENABLED! - - - - - Directory where the Lucene.NET Index resides - - - - - The analyzer to use when searching content, by default, this is set to StandardAnalyzer - - - - - Name of the Lucene.NET index set - - - - - An implementation of the fluent API boolean operations - - - - - Sets the next operation to be AND - - - - - - Sets the next operation to be OR - - - - - - Sets the next operation to be NOT - - - - - - Compiles this instance for fluent API conclusion - - - - - - Static methods to help query umbraco xml - - - - - Converts a content node to XDocument - - - true if data is going to be returned from cache - - - If the type of node is not a Document, the cacheOnly has no effect, it will use the API to return - the xml. - - - - - Converts an to a - - Node to convert - Converted node - - - - Creates an from the collection of - - Elements to create document from - Document containing elements - - - - Converts an umbraco library call to an XDocument - - - - - - - Checks if the XElement is an umbraco property based on an alias. - This works for both types of schemas - - - - - - - - Returns true if the XElement is recognized as an umbraco xml NODE (doc type) - - - - - - - This takes into account both schemas and returns the node type alias. - If this isn't recognized as an element node, this returns an empty string - - - - - - - Returns the property value for the doc type element (such as id, path, etc...) - If the element is not an umbraco doc type node, or the property name isn't found, it returns String.Empty - - - - - - - - Returns umbraco value for a data element with the specified alias. - - - - - - - - Extension methods for IndexSet - - - - - Convert the indexset to indexerdata. - This detects if there are no user/system fields specified and if not, uses the data service to look them - up and update the in memory IndexSet. - - - - - - - Returns a string array of all fields that are indexed including Umbraco fields - - - - - Returns a list of ALL properties names for all nodes defined in the data source - - - - - - Returns a list of ALL system property names for all nodes defined in the data source - - - - - - removes html markup from a string - - - - - - - Gets published content by xpath - - - - - - - This is quite an intensive operation... - get all root content, then get the XML structure for all children, - then run xpath against the navigator that's created - - - - - - - Unfortunately, we need to implement our own IsProtected method since - the Umbraco core code requires an HttpContext for this method and when we're running - async, there is no context - - - - - - - Unfortunately, we need to implement our own IsProtected method since - the Umbraco core code requires an HttpContext for this method and when we're running - async, there is no context - - - - - - - - Returns a list of all of the user defined property names in Umbraco - - - - - - Returns a list of all system field names in Umbraco - - - - - - Adds a single character wildcard to the string for Lucene wildcard matching - - The string to wildcard. - An IExamineValue for the required operation - Thrown when the string is null or empty - - - - Adds a multi-character wildcard to a string for Lucene wildcard matching - - The string to wildcard. - An IExamineValue for the required operation - Thrown when the string is null or empty - - - - Configures the string for fuzzy matching in Lucene using the default fuzziness level - - The string to configure fuzzy matching on. - An IExamineValue for the required operation - Thrown when the string is null or empty - - - - Configures the string for fuzzy matching in Lucene using the supplied fuzziness level - - The string to configure fuzzy matching on. - The fuzzieness level. - - An IExamineValue for the required operation - - Thrown when the string is null or empty - - - - Configures the string for boosting in Lucene - - The string to wildcard. - The boost level. - - An IExamineValue for the required operation - - Thrown when the string is null or empty - - - - Configures the string for proximity matching - - The string to wildcard. - The proximity level. - - An IExamineValue for the required operation - - Thrown when the string is null or empty - - - - Escapes the string within Lucene - - The string to wildcard. - An IExamineValue for the required operation - Thrown when the string is null or empty - - - - Sets up an for an additional Examiness - - The IExamineValue to continue working with. - The string to postfix. - Combined strings - - - - Converts an Examine boolean operation to a Lucene representation - - The operation. - The translated Boolean operation - - - - Converts a Lucene boolean occurrence to an Examine representation - - The occurrence to translate. - The translated boolean occurrence - - - - This is a Lucene.Net Examine indexer for Umbraco - - - - Some links picked up along the way: - - - A matrix of concurrent lucene operations: - http://www.jguru.com/faq/view.jsp?EID=913302. - - - Based on the info here, it is best to only call optimize when there is no activity, - we only optimized after the queue has been processed and at start up: - http://www.gossamer-threads.com/lists/lucene/java-dev/47895 - http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/index/IndexWriter.html - - - - - - The prefix added to a field when it is included in the index for sorting - - - - - Specifies how many index commits are performed before running an optimization - - - - - Used to store a non-tokenized key for the document - - - - - Used to store a non-tokenized type for the document - - - - - Used to store the path of a content object - - - - - Default constructor - - - - - Constructor to allow for creating an indexer at runtime - - - - - - - Set up all properties for the indexer based on configuration information specified. This will ensure that - all of the folders required by the indexer are created and exist. This will also create an instruction - file declaring the computer name that is part taking in the indexing. This file will then be used to - determine the master indexer machine in a load balanced environment (if one exists). - - The friendly name of the provider. - A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. - - The name of the provider is null. - - - The name of the provider has a length of zero. - - - An attempt is made to call on a provider after the provider has already been initialized. - - - - - Used to perform thread locking - - - - - used to thread lock calls for creating and verifying folders - - - - - Used for double check locking during an index operation - - - - - We need an internal searcher used to search against our own index. - This is used for finding all descendant nodes of a current node when deleting indexes. - - - - - Forces a particular XML node to be reindexed - - XML node to reindex - Type of index to use - - - - Rebuilds the entire index from scratch for all index types - - This will completely delete the index and recreate it - - - - Deletes a node from the index. - - - When a content node is deleted, we also need to delete it's children from the index so we need to perform a - custom Lucene search to find all decendents and create Delete item queues for them too. - - ID of the node to delete - - - - Re-indexes all data for the index type specified - - - - - - Adds single node to index. If the node already exists, a duplicate will probably be created, - To re-index, use the ReIndexNode method. - - The node to index. - The type to store the node as. - - - - This wil optimize the index for searching, this gets executed when this class instance is instantiated. - - - This can be an expensive operation and should only be called when there is no indexing activity - - - - - Removes the specified term from the index - - - Boolean if it successfully deleted the term, or there were on errors - - - - Ensures that the node being indexed is of a correct type and is a descendent of the parent id specified. - - - - - - - Collects all of the data that needs to be indexed as defined in the index set. - - - A dictionary representing the data which will be indexed - - - - Collects the data for the fields and adds the document which is then committed into Lucene.Net's index - - The fields and their associated data. - The writer that will be used to update the Lucene index. - The node id. - The type to index the node as. - The path of the content node - - This will normalize (lowercase) all text before it goes in to the index. - - - - - Process all of the queue items. This checks if this machine is the Executive and if it's in a load balanced - environments. If then acts accordingly: - Not the executive = doesn't index, i - In async mode = use file watcher timer - - - - - Loop through all files in the queue item folder and index them. - Regardless of weather this machine is the executive indexer or not or is in a load balanced environment - or not, this WILL attempt to process the queue items into the index. - - - The number of queue items processed - - - Inheritors should be very carefully using this method, SafelyProcessQueueItems will ensure - that the correct machine processes the items into the index. SafelyQueueItems calls this method - if it confirms that this machine is the one to process the queue. - - - - - Returns an XDocument for the entire tree stored for the IndexType specified. - - The xpath to the node. - The type of data to request from the data service. - Either the Content or Media xml. If the type is not of those specified null is returned - - - - Saves a file indicating that the executive indexer should remove the from the index those that match - the term saved in this file. - This will save a file prefixed with the current machine name with an extension of .del - - - - - - Writes the information for the fields to a file names with the computer's name that is running the index and - a GUID value. The indexer will then index the values stored in the files in another thread so that processing may continue. - This will save a file prefixed with the current machine name with an extension of .add - - The fields. - The node id. - The type. - The path of the content node - - - - This makes sure that the folders exist, that the executive indexer is setup and that the index is optimized. - This is called at app startup when the providers are initialized but called again if folder are missing during a - an indexing operation. - - - - - Handles the file watcher timer poll elapsed event - This will: - - Disable the FileSystemWatcher - - Recursively process all queue items in the folder and check after processing if any more files have been added - - Once there's no more files to be processed, re-enables the watcher - - - - - - - Checks the writer passed in to see if it is active, if not, checks if the index is locked. If it is locked, - returns checks if the reader is not null and tries to close it. if it's still locked returns null, otherwise - creates a new writer. - - - - - - - - Checks the reader passed in to see if it is active, if not, checks if the index is locked. If it is locked, - returns checks if the writer is not null and tries to close it. if it's still locked returns null, otherwise - creates a new reader. - - - - - - - - Reads the FileInfo passed in into a dictionary object and deletes it from the index - - - - - - Reads the FileInfo passed in into a dictionary object and adds it to the index - - - - - - - - All field data will be stored into Lucene as is except for dates, these can be stored as standard: yyyyMMdd - Any standard text will be put in lower case format. - - - - - - - Adds all nodes with the given xPath root. - - The x path. - The type. - - - - Creates the folder if it does not exist. - - - - - - Checks if the index is ready to open/write to. - - - - - - Check if there is an index in the index folder - - - - - - Checks the disposal state of the objects - - - - - When the object is disposed, all data should be written - - - - - Releases unmanaged and - optionally - managed resources - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - The data service used for retreiving and submitting data to the cms - - - - - The analyzer to use when indexing content, by default, this is set to StandardAnalyzer - - - - - Used to keep track of how many index commits have been performed. - This is used to determine when index optimization needs to occur. - - - - - Indicates whether or this system will process the queue items asynchonously. Default is true. - - - - - The interval (in seconds) specified for the timer to process index queue items. - This is only relevant if is true. - - - - - The folder that stores the Lucene Index files - - - - - The folder that stores the index queue files - - - - - The Executive to determine if this is the master indexer - - - - - The index set name which references an Examine - - - - - By default this is false, if set to true then the indexer will include indexing content that is flagged as publicly protected. - This property is ignored if SupportUnpublishedContent is set to true. - - - - - Occurs when [index optimizing]. - - - - - Occurs when [document writing]. - - - - - Determines if the manager will call the indexing methods when content is saved or deleted as - opposed to cache being updated. - - - - - - Data service used to query for media - - - - - This is quite an intensive operation... - get all root media, then get the XML structure for all children, - then run xpath against the navigator that's created - - - - - - - Deletes all files in the folder and returns the number deleted. - - - - - - - An implementation of the search results returned from Lucene.Net - - - - - Internal cache of search results - - - - - Creates the search result from a - - The doc to convert. - The score. - A populated search result object - - - - Skips to a particular point in the search results. - - - This allows for lazy loading of the results paging. We don't go into Lucene until we have to. - - The number of items in the results to skip. - A collection of the search results - - - - Gets the enumerator starting at position 0 - - A collection of the search results - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the total number of results for the search - - The total items from the search. - - - - An instance for wiring up Examine to the Umbraco events system - - - - - Creates a new instance of the class - - - - - Only index using providers that SupportUnpublishedContent - - - - - - - Only remove indexes using providers that SupportUnpublishedContent - - - - - - - Only Update indexes for providers that dont SupportUnpublishedContent - - - - - - - Only update indexes for providers that don't SupportUnpublishedContnet - - - - - - - Defines XPath statements that map to specific umbraco nodes - - - - - The folder path of where the lucene index is stored - - The index path. - - This can be set at runtime but will not be persisted to the configuration file - - - - - Returns the DirectoryInfo object for the index path. - - The index directory. - - - - When this property is set, the indexing will only index documents that are children of this node. - - - - - The collection of node types to index, if not specified, all node types will be indexed (apart from the ones specified in the ExcludeNodeTypes collection). - - - - - The collection of node types to not index. If specified, these node types will not be indexed. - - - - - A collection of user defined umbraco fields to index - - - If this property is not specified, or if it's an empty collection, the default user fields will be all user fields defined in Umbraco - - - - - The fields umbraco values that will be indexed. i.e. id, nodeTypeAlias, writer, etc... - - - If this is not specified, or if it's an empty collection, the default optins will be specified: - - id - - version - - parentID - - level - - writerID - - creatorID - - nodeType - - template - - sortOrder - - createDate - - updateDate - - nodeName - - urlName - - writerName - - creatorName - - nodeTypeAlias - - path - - - - - Event arguments for a Document Writing event - - - - - - - - - - - - - Lucene.NET Document, including all previously added fields - - - - - Fields of the indexer - - - - - NodeId of the document being written - - - - - A class that defines the type of index for each Umbraco field (non user defined fields) - Alot of standard umbraco fields shouldn't be tokenized or even indexed, just stored into lucene - for retreival after searching. - - - - - return the index policy for the field name passed in, if not found, return normal - - - - - - - This class is used to query against Lucene.Net - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Query on the id - - The id. - A new with the clause appended - - - - Query on the NodeName - - Name of the node. - A new with the clause appended - - - - Query on the NodeName - - Name of the node. - A new with the clause appended - - - - Query on the NodeTypeAlias - - The node type alias. - A new with the clause appended - - - - Query on the NodeTypeAlias - - The node type alias. - A new with the clause appended - - - - Query on the Parent ID - - The id of the parent. - A new with the clause appended - - - - Query on the specified field - - Name of the field. - The field value. - A new with the clause appended - - - - Query on the specified field - - Name of the field. - The field value. - A new with the clause appended - - - - Returns the Lucene query object for a field given an IExamineValue - - - - A new with the clause appended - - - - Creates our own style 'multi field query' used internal for the grouped operations - - - - - A new with the clause appended - - - - Passes a raw search query to the provider to handle - - The query. - A new with the clause appended - - - - Orders the results by the specified fields - - The field names. - A new with the clause appended - - - - Orders the results by the specified fields in a descending order - - The field names. - A new with the clause appended - - - - Internal operation for adding the ordered results - - if set to true [descending]. - The field names. - A new with the clause appended - - - - Gets the boolean operation which this query method will be added as - - The boolean operation. - - - - Default property for accessing Image Sets - - - - - - - Manages the delegation of authority over which machine in a load balanced environment will perform the indexing. - This is done by an IO race on initialization of the LuceneExamineIndexer. - If a server's app pool is recycled at a seperate time than the rest of the servers in the cluster, it will generally - take over the executive role (this is dependant on the time that the last latest server's app pool was restarted). - The Executive is determined by file lock (.lck) file, theoretically there should only be one of these. - If there is only 1 server in the cluster, then obviously it is the Executive. - - - - - Determines if the executive has been initialized. - This is useful for checking if files have been deleted during website operations. - - - - - - Fired every 10 minutes by the timer object. This timestamps the EXA file to - enure the system knows that this server is active. - This is to ensure that all systems in a Load Balanced environment are aware of exactly how - many other servers are taking part in the load balancing and who they are. - - - - - - - Creates an xml file to declare that this machine is taking part in the index writing. - This is used to determine the master indexer if this app exists in a load balanced environment. - - - - - Creates a lock file for this machine if there aren't other ones. - - returns true if a lock file was successfully created for this machine. - - - - delete all old lck files (any that are more than cutoffTime old) - - - - - - delete all old exa files (any that are more than cutoffTime old) - - - - - - Get all lck files that are not named by this machines name. If there are any, this means that another machine - has won the race and created the lck file for itself. If there is a lck file with the current machines name, then this - must mean it was previously the master indexer and the apppool has recycled in less than the hour. - - - - - - Updates the timestamp for lck file if it exists - - - - - Updates the timestamp for the exa file - - - - - Read the machines EXA file - - - - - - Read the machines LCK file - - - - - - This will check for any lock files, not created by the current machine. If there are any, then this machine will flag it's - exa file as not being the master indexer, otherwise, it will try to create it's own lock file to let others know it is the race - winner and therefore the master indexer. If this succeeds, it will update it's exa file to flag it as the master indexer. - - - - - When the object is disposed, all data should be written - - - - - Ensures there is an elected Executive, otherwise starts the race. - Returns a bool as to whether or not this is the Executive machine. - - - - - Returns a boolean determining whether or not this server involved in a LoadBalanced - environment with Umbraco Examine. - - - - - Returns the machine name of the executive indexer - - - - - The number of servers active in indexing - - - - - Gets the doc id at a specified index - - The index. - - - - - Gets the doc score for a doc at a specified index - - The index. - - - - diff --git a/lib/UmbracoExamine.dll b/lib/UmbracoExamine.dll index 05be41df51b0eec47d5d5e6191e477c8e48be9e4..5c37c3316a7c68534197acc0c9fe1f474b11a0d9 100644 GIT binary patch delta 10771 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 H8?OHk&S=nF delta 10730 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 M`Wru?&HdE>0Xs0;xc~qF