Compare commits
93 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ca0de5acd3 | |||
| 27168722ab | |||
| 6dbeba0763 | |||
| 00e0f83c8e | |||
| 136b3db098 | |||
| 21f46d0a3c | |||
| 7fafea2370 | |||
| 86c37c7f6d | |||
| 7dd9f3e766 | |||
| 1ccc8cc161 | |||
| c5e7e1e39e | |||
| db2a35dbce | |||
| 3d006f1e08 | |||
| e0c891719f | |||
| 89a14c13e5 | |||
| ca9aa21c7b | |||
| c0eaeb3168 | |||
| 74e16c0f8d | |||
| f8fac9f84e | |||
| 83ce359234 | |||
| 2c64f91b25 | |||
| e702fe2877 | |||
| 9d55656ae9 | |||
| d57de05453 | |||
| 11e4bf5de8 | |||
| 82661d9af4 | |||
| 56cff6bba8 | |||
| 6b289e1a7d | |||
| 91fa583f62 | |||
| 23d91fd350 | |||
| d4714e1580 | |||
| 2b22e6a784 | |||
| 59840926c8 | |||
| 338c7cc5a6 | |||
| 77850aea18 | |||
| 895f0a9dfe | |||
| ec03a3dc42 | |||
| 5a4dbba21b | |||
| 04546dd827 | |||
| 4ecf1f919e | |||
| bdc4e1ae6a | |||
| 3cb05870af | |||
| 95b0c342bb | |||
| 3a5584a1c1 | |||
| b425edbb45 | |||
| b403283368 | |||
| cb1d347769 | |||
| 4d0a2c85b7 | |||
| e1957b895f | |||
| c696c62185 | |||
| 0dfbb95033 | |||
| 17969e4537 | |||
| 374fdcf29e | |||
| bcb19eea35 | |||
| da00ad1444 | |||
| 7bc52b3948 | |||
| a77aec4156 | |||
| f7f3dccfc8 | |||
| ab3469d703 | |||
| c78ea90cf5 | |||
| 3de0b85ae3 | |||
| 87b51d1418 | |||
| 8ea1af56ab | |||
| 219eb61194 | |||
| 1d3279fe07 | |||
| 88bb796f4d | |||
| 97878ac25a | |||
| c87e880b64 | |||
| e28ba446a0 | |||
| c645a2cf15 | |||
| 5fb8d990f8 | |||
| 8626e4337f | |||
| 0f22c41eee | |||
| e73fda14b5 | |||
| a04df8070a | |||
| 60c1052db1 | |||
| dd041a6f09 | |||
| 733aab6eb5 | |||
| 1e6d50a86b | |||
| 43e0ef2472 | |||
| 33f76d25f7 | |||
| 047eb893eb | |||
| 5ec67ab3fd | |||
| 993513b138 | |||
| ce618d289b | |||
| 290f34f034 | |||
| 4b945f355a | |||
| 3cf8ef9513 | |||
| dd40dd964c | |||
| 9589500412 | |||
| 53928c02f8 | |||
| 756d554b47 | |||
| fb4de621c0 |
@@ -1,2 +1,2 @@
|
||||
# Usage: on line 2 put the release version, on line 3 put the version comment (example: beta)
|
||||
7.6.4
|
||||
7.6.5
|
||||
+2
-2
@@ -11,5 +11,5 @@ using System.Resources;
|
||||
|
||||
[assembly: AssemblyVersion("1.0.*")]
|
||||
|
||||
[assembly: AssemblyFileVersion("7.6.4")]
|
||||
[assembly: AssemblyInformationalVersion("7.6.4")]
|
||||
[assembly: AssemblyFileVersion("7.6.5")]
|
||||
[assembly: AssemblyInformationalVersion("7.6.5")]
|
||||
@@ -6,7 +6,7 @@ namespace Umbraco.Core.Configuration
|
||||
{
|
||||
public class UmbracoVersion
|
||||
{
|
||||
private static readonly Version Version = new Version("7.6.4");
|
||||
private static readonly Version Version = new Version("7.6.5");
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current version of Umbraco.
|
||||
|
||||
+11
-21
@@ -1,5 +1,4 @@
|
||||
using System.Linq;
|
||||
using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
|
||||
using Umbraco.Core.Persistence.SqlSyntax;
|
||||
@@ -11,15 +10,11 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe
|
||||
{
|
||||
public UpdateUniqueIdToHaveCorrectIndexType(ISqlSyntaxProvider sqlSyntax, ILogger logger)
|
||||
: base(sqlSyntax, logger)
|
||||
{
|
||||
}
|
||||
{ }
|
||||
|
||||
//see: http://issues.umbraco.org/issue/U4-6188, http://issues.umbraco.org/issue/U4-6187
|
||||
public override void Up()
|
||||
{
|
||||
|
||||
|
||||
var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database)
|
||||
var indexes = SqlSyntax.GetDefinedIndexes(Context.Database)
|
||||
.Select(x => new DbIndexDefinition()
|
||||
{
|
||||
TableName = x.Item1,
|
||||
@@ -28,24 +23,19 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSevenThreeZe
|
||||
IsUnique = x.Item4
|
||||
}).ToArray();
|
||||
|
||||
//must be non-nullable
|
||||
// drop the index if it exists
|
||||
if (indexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNodeUniqueID")))
|
||||
Delete.Index("IX_umbracoNodeUniqueID").OnTable("umbracoNode");
|
||||
|
||||
// set uniqueID to be non-nullable
|
||||
// the index *must* be dropped else 'one or more objects access this column' exception
|
||||
Alter.Table("umbracoNode").AlterColumn("uniqueID").AsGuid().NotNullable();
|
||||
|
||||
//make sure it already exists
|
||||
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNodeUniqueID")))
|
||||
{
|
||||
Delete.Index("IX_umbracoNodeUniqueID").OnTable("umbracoNode");
|
||||
}
|
||||
//make sure it doesn't already exist
|
||||
if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoNode_uniqueID")) == false)
|
||||
{
|
||||
//must be a uniqe index
|
||||
Create.Index("IX_umbracoNode_uniqueID").OnTable("umbracoNode").OnColumn("uniqueID").Unique();
|
||||
}
|
||||
// create the index
|
||||
Create.Index("IX_umbracoNode_uniqueID").OnTable("umbracoNode").OnColumn("uniqueID").Unique();
|
||||
}
|
||||
|
||||
public override void Down()
|
||||
{
|
||||
}
|
||||
{ }
|
||||
}
|
||||
}
|
||||
@@ -277,7 +277,7 @@ namespace Umbraco.Core
|
||||
uniqInfos.Add(info.FullName);
|
||||
hashCombiner.AddFileSystemItem(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ConvertHashToInt64(hashCombiner.GetCombinedHashCode());
|
||||
}
|
||||
@@ -336,6 +336,9 @@ namespace Umbraco.Core
|
||||
|
||||
#region Cache
|
||||
|
||||
private const int ListFileOpenReadTimeout = 4000; // milliseconds
|
||||
private const int ListFileOpenWriteTimeout = 2000; // milliseconds
|
||||
|
||||
/// <summary>
|
||||
/// Attemps to retrieve the list of types from the cache.
|
||||
/// </summary>
|
||||
@@ -381,7 +384,7 @@ namespace Umbraco.Core
|
||||
if (File.Exists(filePath) == false)
|
||||
return cache;
|
||||
|
||||
using (var stream = File.OpenRead(filePath))
|
||||
using (var stream = GetFileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, ListFileOpenReadTimeout))
|
||||
using (var reader = new StreamReader(stream))
|
||||
{
|
||||
while (true)
|
||||
@@ -451,7 +454,7 @@ namespace Umbraco.Core
|
||||
{
|
||||
var filePath = GetPluginListFilePath();
|
||||
|
||||
using (var stream = File.Open(filePath, FileMode.Create, FileAccess.ReadWrite))
|
||||
using (var stream = GetFileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None, ListFileOpenWriteTimeout))
|
||||
using (var writer = new StreamWriter(stream))
|
||||
{
|
||||
foreach (var typeList in _types.Values)
|
||||
@@ -471,7 +474,28 @@ namespace Umbraco.Core
|
||||
// at the moment we write the cache to disk every time we update it. ideally we defer the writing
|
||||
// since all the updates are going to happen in a row when Umbraco starts. that being said, the
|
||||
// file is small enough, so it is not a priority.
|
||||
WriteCache();
|
||||
WriteCache();
|
||||
}
|
||||
|
||||
private static Stream GetFileStream(string path, FileMode fileMode, FileAccess fileAccess, FileShare fileShare, int timeoutMilliseconds)
|
||||
{
|
||||
const int pauseMilliseconds = 250;
|
||||
var attempts = timeoutMilliseconds / pauseMilliseconds;
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new FileStream(path, fileMode, fileAccess, fileShare);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (--attempts == 0)
|
||||
throw;
|
||||
|
||||
LogHelper.Debug<PluginManager>(string.Format("Attempted to get filestream for file {0} failed, {1} attempts left, pausing for {2} milliseconds", path, attempts, pauseMilliseconds));
|
||||
Thread.Sleep(pauseMilliseconds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Umbraco.Core.PropertyEditors
|
||||
|
||||
public PropertyEditorAttribute(string alias, string name)
|
||||
{
|
||||
Mandate.ParameterNotNullOrEmpty(alias, "id");
|
||||
Mandate.ParameterNotNullOrEmpty(alias, "alias");
|
||||
Mandate.ParameterNotNullOrEmpty(name, "name");
|
||||
|
||||
Alias = alias;
|
||||
@@ -82,4 +82,4 @@ namespace Umbraco.Core.PropertyEditors
|
||||
/// </summary>
|
||||
public string Group { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.PublishedContent;
|
||||
using Umbraco.Tests.TestHelpers;
|
||||
using Umbraco.Web;
|
||||
|
||||
@@ -16,8 +17,16 @@ namespace Umbraco.Tests.PublishedContent
|
||||
private UmbracoContext ctx;
|
||||
private string xmlContent = "";
|
||||
private bool createContentTypes = true;
|
||||
|
||||
protected override string GetXmlContent(int templateId)
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
// make sure we get them from the content service
|
||||
PublishedContentType.GetPublishedContentTypeCallback = null;
|
||||
}
|
||||
|
||||
protected override string GetXmlContent(int templateId)
|
||||
{
|
||||
return xmlContent;
|
||||
}
|
||||
@@ -57,7 +66,7 @@ namespace Umbraco.Tests.PublishedContent
|
||||
var publishedContent = ctx.ContentCache.GetById(1100);
|
||||
Assert.That(publishedContent.IsDocumentType("base", true));
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void IsDocumentType_Recursive_InvalidBaseType_ReturnsFalse()
|
||||
{
|
||||
@@ -73,23 +82,23 @@ namespace Umbraco.Tests.PublishedContent
|
||||
if (createContentTypes)
|
||||
{
|
||||
var contentTypeService = ctx.Application.Services.ContentTypeService;
|
||||
var baseType = new ContentType(-1) {Alias = "base", Name = "Base"};
|
||||
var baseType = new ContentType(-1) { Alias = "base", Name = "Base" };
|
||||
const string contentTypeAlias = "inherited";
|
||||
var inheritedType = new ContentType(baseType, contentTypeAlias) {Alias = contentTypeAlias, Name = "Inherited"};
|
||||
var inheritedType = new ContentType(baseType, contentTypeAlias) { Alias = contentTypeAlias, Name = "Inherited" };
|
||||
contentTypeService.Save(baseType);
|
||||
contentTypeService.Save(inheritedType);
|
||||
createContentTypes = false;
|
||||
}
|
||||
#region setup xml content
|
||||
|
||||
xmlContent = @"<?xml version=""1.0"" encoding=""utf-8""?>
|
||||
<!DOCTYPE root[
|
||||
<!DOCTYPE root[
|
||||
<!ELEMENT inherited ANY>
|
||||
<!ATTLIST inherited id ID #REQUIRED>
|
||||
]>
|
||||
<root id=""-1"">
|
||||
<inherited id=""1100"" parentID=""-1"" level=""1"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""1"" sortOrder=""1"" createDate=""2012-06-12T14:13:17"" updateDate=""2012-07-20T18:50:43"" nodeName=""Home"" urlName=""home"" writerName=""admin"" creatorName=""admin"" path=""-1,1046"" isDoc=""""/>
|
||||
</root>";
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,11 +44,11 @@ namespace Umbraco.Tests.PublishedContent
|
||||
var propertyTypes = new[]
|
||||
{
|
||||
// AutoPublishedContentType will auto-generate other properties
|
||||
new PublishedPropertyType("umbracoNaviHide", 0, Constants.PropertyEditors.TrueFalseAlias),
|
||||
new PublishedPropertyType("selectedNodes", 0, "?"),
|
||||
new PublishedPropertyType("umbracoUrlAlias", 0, "?"),
|
||||
new PublishedPropertyType("content", 0, Constants.PropertyEditors.TinyMCEAlias),
|
||||
new PublishedPropertyType("testRecursive", 0, "?"),
|
||||
new PublishedPropertyType("umbracoNaviHide", 0, Constants.PropertyEditors.TrueFalseAlias),
|
||||
new PublishedPropertyType("selectedNodes", 0, "?"),
|
||||
new PublishedPropertyType("umbracoUrlAlias", 0, "?"),
|
||||
new PublishedPropertyType("content", 0, Constants.PropertyEditors.TinyMCEAlias),
|
||||
new PublishedPropertyType("testRecursive", 0, "?"),
|
||||
};
|
||||
var compositionAliases = new[] {"MyCompositionAlias"};
|
||||
var type = new AutoPublishedContentType(0, "anything", compositionAliases, propertyTypes);
|
||||
@@ -73,7 +73,7 @@ namespace Umbraco.Tests.PublishedContent
|
||||
protected override string GetXmlContent(int templateId)
|
||||
{
|
||||
return @"<?xml version=""1.0"" encoding=""utf-8""?>
|
||||
<!DOCTYPE root[
|
||||
<!DOCTYPE root[
|
||||
<!ELEMENT Home ANY>
|
||||
<!ATTLIST Home id ID #REQUIRED>
|
||||
<!ELEMENT CustomDocument ANY>
|
||||
@@ -87,17 +87,17 @@ namespace Umbraco.Tests.PublishedContent
|
||||
<testRecursive><![CDATA[This is the recursive val]]></testRecursive>
|
||||
<Home id=""1173"" parentID=""1046"" level=""2"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""" + templateId + @""" sortOrder=""1"" createDate=""2012-07-20T18:06:45"" updateDate=""2012-07-20T19:07:31"" nodeName=""Sub1"" urlName=""sub1"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173"" isDoc="""">
|
||||
<content><![CDATA[<div>This is some content</div>]]></content>
|
||||
<umbracoUrlAlias><![CDATA[page2/alias, 2ndpagealias]]></umbracoUrlAlias>
|
||||
<umbracoUrlAlias><![CDATA[page2/alias, 2ndpagealias]]></umbracoUrlAlias>
|
||||
<testRecursive><![CDATA[]]></testRecursive>
|
||||
<Home id=""1174"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""" + templateId + @""" sortOrder=""1"" createDate=""2012-07-20T18:07:54"" updateDate=""2012-07-20T19:10:27"" nodeName=""Sub2"" urlName=""sub2"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1174"" isDoc="""">
|
||||
<content><![CDATA[]]></content>
|
||||
<umbracoUrlAlias><![CDATA[only/one/alias]]></umbracoUrlAlias>
|
||||
<creatorName><![CDATA[Custom data with same property name as the member name]]></creatorName>
|
||||
<testRecursive><![CDATA[]]></testRecursive>
|
||||
</Home>
|
||||
</Home>
|
||||
<CustomDocument id=""1177"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1234"" template=""" + templateId + @""" sortOrder=""2"" createDate=""2012-07-16T15:26:59"" updateDate=""2012-07-18T14:23:35"" nodeName=""custom sub 1"" urlName=""custom-sub-1"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1177"" isDoc="""" />
|
||||
<CustomDocument id=""1178"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1234"" template=""" + templateId + @""" sortOrder=""3"" createDate=""2012-07-16T15:26:59"" updateDate=""2012-07-16T14:23:35"" nodeName=""custom sub 2"" urlName=""custom-sub-2"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1178"" isDoc="""" />
|
||||
<Home id=""1176"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""" + templateId + @""" sortOrder=""4"" createDate=""2012-07-20T18:08:08"" updateDate=""2012-07-20T19:10:52"" nodeName=""Sub 3"" urlName=""sub-3"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1176"" isDoc="""">
|
||||
<Home id=""1176"" parentID=""1173"" level=""3"" writerID=""0"" creatorID=""0"" nodeType=""1044"" template=""" + templateId + @""" sortOrder=""4"" createDate=""2012-07-20T18:08:08"" updateDate=""2012-07-20T19:10:52"" nodeName=""Sub 3"" urlName=""sub-3"" writerName=""admin"" creatorName=""admin"" path=""-1,1046,1173,1176"" isDoc="""" key=""CDB83BBC-A83B-4BA6-93B8-AADEF67D3C09"">
|
||||
<content><![CDATA[]]></content>
|
||||
<umbracoNaviHide>1</umbracoNaviHide>
|
||||
</Home>
|
||||
@@ -211,8 +211,8 @@ namespace Umbraco.Tests.PublishedContent
|
||||
[PublishedContentModel("Home")]
|
||||
internal class Home : PublishedContentModel
|
||||
{
|
||||
public Home(IPublishedContent content)
|
||||
: base(content)
|
||||
public Home(IPublishedContent content)
|
||||
: base(content)
|
||||
{}
|
||||
}
|
||||
|
||||
@@ -659,6 +659,28 @@ namespace Umbraco.Tests.PublishedContent
|
||||
Assert.AreEqual((int)1178, (int)result.Id);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetKey()
|
||||
{
|
||||
var key = Guid.Parse("CDB83BBC-A83B-4BA6-93B8-AADEF67D3C09");
|
||||
|
||||
// doc is Home (a model) and GetKey unwraps and works
|
||||
var doc = GetNode(1176);
|
||||
Assert.IsInstanceOf<Home>(doc);
|
||||
Assert.AreEqual(key, doc.GetKey());
|
||||
|
||||
// wrapped is PublishedContentWrapped and WithKey unwraps
|
||||
var wrapped = new TestWrapped(doc);
|
||||
Assert.AreEqual(key, wrapped.GetKey());
|
||||
}
|
||||
|
||||
class TestWrapped : PublishedContentWrapped
|
||||
{
|
||||
public TestWrapped(IPublishedContent content)
|
||||
: base(content)
|
||||
{ }
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DetachedProperty1()
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
[Timeout(30000)]
|
||||
public class BackgroundTaskRunnerTests
|
||||
{
|
||||
private ILogger _logger;
|
||||
private ILogger _logger;
|
||||
|
||||
[TestFixtureSetUp]
|
||||
public void InitializeFixture()
|
||||
@@ -93,7 +93,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
{
|
||||
runner.Add(new MyTask());
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -242,7 +242,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
public void Create_IsNotRunning()
|
||||
{
|
||||
@@ -252,16 +252,18 @@ namespace Umbraco.Tests.Scheduling
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
public async void Create_AutoStart_IsRunning()
|
||||
{
|
||||
using (var runner = new BackgroundTaskRunner<IBackgroundTask>(new BackgroundTaskRunnerOptions
|
||||
{
|
||||
AutoStart = true
|
||||
AutoStart = true,
|
||||
KeepAlive = true // else stops!
|
||||
}, _logger))
|
||||
{
|
||||
Assert.IsTrue(runner.IsRunning); // because AutoStart is true
|
||||
runner.Stop(false); // keepalive = must be stopped
|
||||
await runner.StoppedAwaitable; // runner stops, within test's timeout
|
||||
}
|
||||
}
|
||||
@@ -296,7 +298,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
// so that we don't have a runaway task in tests, etc - but it does NOT terminate
|
||||
// the runner - it really is NOT a nice way to end a runner - it's there for tests
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void Startup_KeepAlive_IsRunning()
|
||||
{
|
||||
@@ -359,7 +361,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
public async void WaitOnRunner_Tasks()
|
||||
{
|
||||
@@ -504,7 +506,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
|
||||
//wait till the thread is done
|
||||
await tManager.CurrentThreadingTask;
|
||||
|
||||
|
||||
foreach (var task in tasks)
|
||||
{
|
||||
Assert.IsTrue(task.Ended != default(DateTime));
|
||||
@@ -516,7 +518,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
public void RecurringTaskTest()
|
||||
{
|
||||
@@ -532,7 +534,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
};
|
||||
|
||||
var task = new MyRecurringTask(runner, 200, 500);
|
||||
|
||||
|
||||
runner.Add(task);
|
||||
|
||||
Assert.IsTrue(runner.IsRunning); // waiting on delay
|
||||
@@ -577,7 +579,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
runner.Add(task);
|
||||
Assert.IsTrue(runner.IsRunning);
|
||||
Thread.Sleep(5000);
|
||||
Assert.IsTrue(runner.IsRunning); // still waiting for the task to release
|
||||
Assert.IsTrue(runner.IsRunning); // still waiting for the task to release
|
||||
Assert.IsFalse(task.HasRun);
|
||||
runner.Shutdown(false, false);
|
||||
await runner.StoppedAwaitable; // wait for the entire runner operation to complete
|
||||
@@ -585,7 +587,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
public void LatchedRecurring()
|
||||
{
|
||||
@@ -842,7 +844,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
}
|
||||
|
||||
public override bool PerformRun()
|
||||
{
|
||||
{
|
||||
Thread.Sleep(_runMilliseconds);
|
||||
return true; // repeat
|
||||
}
|
||||
@@ -976,7 +978,7 @@ namespace Umbraco.Tests.Scheduling
|
||||
public virtual Task RunAsync(CancellationToken token)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
//return Task.Delay(500);
|
||||
//return Task.Delay(500);
|
||||
}
|
||||
|
||||
public virtual bool IsAsync
|
||||
|
||||
@@ -269,12 +269,12 @@
|
||||
var isSelected = false;
|
||||
for (var i = 0; selection.length > i; i++) {
|
||||
var selectedItem = selection[i];
|
||||
if (item.id === selectedItem.id) {
|
||||
if (item.id === selectedItem.id || item.key === selectedItem.key) {
|
||||
isSelected = true;
|
||||
}
|
||||
}
|
||||
if (!isSelected) {
|
||||
selection.push({ id: item.id });
|
||||
selection.push({ id: item.id, key: item.key });
|
||||
item.selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,28 +1,35 @@
|
||||
angular.module("umbraco.install").controller("Umbraco.Installer.DataBaseController", function($scope, $http, installerService){
|
||||
|
||||
$scope.checking = false;
|
||||
$scope.invalidDbDns = false;
|
||||
|
||||
$scope.dbs = [
|
||||
{name: 'Microsoft SQL Server Compact (SQL CE)', id: 0},
|
||||
{name: 'Microsoft SQL Server', id: 1},
|
||||
{ name: 'Microsoft SQL Azure', id: 3 },
|
||||
{ name: 'MySQL', id: 2 },
|
||||
{name: 'Custom connection string', id: -1}];
|
||||
{ name: 'Microsoft SQL Server Compact (SQL CE)', id: 0},
|
||||
{ name: 'Microsoft SQL Server', id: 1},
|
||||
{ name: 'Microsoft SQL Azure', id: 3 },
|
||||
{ name: 'MySQL', id: 2 },
|
||||
{ name: 'Custom connection string', id: -1}
|
||||
];
|
||||
|
||||
if(installerService.status.current.model.dbType === undefined){
|
||||
if ( installerService.status.current.model.dbType === undefined ) {
|
||||
installerService.status.current.model.dbType = 0;
|
||||
}
|
||||
|
||||
$scope.validateAndForward = function(){
|
||||
if(!$scope.checking && this.myForm.$valid){
|
||||
$scope.validateAndForward = function(){
|
||||
if ( !$scope.checking && this.myForm.$valid ) {
|
||||
$scope.checking = true;
|
||||
$scope.invalidDbDns = false;
|
||||
|
||||
var model = installerService.status.current.model;
|
||||
|
||||
$http.post(Umbraco.Sys.ServerVariables.installApiBaseUrl + "PostValidateDatabaseConnection",
|
||||
model).then(function(response){
|
||||
$http.post(
|
||||
Umbraco.Sys.ServerVariables.installApiBaseUrl + "PostValidateDatabaseConnection",
|
||||
model ).then( function( response ) {
|
||||
|
||||
if(response.data === "true"){
|
||||
if ( response.data === "true" ) {
|
||||
installerService.forward();
|
||||
}else{
|
||||
}
|
||||
else {
|
||||
$scope.invalidDbDns = true;
|
||||
}
|
||||
|
||||
@@ -33,4 +40,4 @@ angular.module("umbraco.install").controller("Umbraco.Installer.DataBaseControll
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
@@ -66,8 +66,9 @@ label.control-label, .control-label {
|
||||
}
|
||||
.form-search .icon, .form-search .icon-search {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 6px;
|
||||
left: 4px;
|
||||
left: 6px;
|
||||
color: @gray-8;
|
||||
}
|
||||
|
||||
@@ -86,6 +87,9 @@ label.control-label, .control-label {
|
||||
background: @white
|
||||
}
|
||||
|
||||
.form-search .icon-search + .search-input {
|
||||
padding-left: 25px !important;
|
||||
}
|
||||
|
||||
.form-search .search-input {
|
||||
font-weight: bold;
|
||||
@@ -191,7 +195,7 @@ input[type="tel"],
|
||||
input[type="color"],
|
||||
.uneditable-input {
|
||||
display: inline-block;
|
||||
height: 30px;
|
||||
height: @inputHeight;
|
||||
padding: 4px 6px;
|
||||
margin-bottom: @baseLineHeight / 2;
|
||||
font-size: @baseFontSize;
|
||||
@@ -206,7 +210,6 @@ input.-full-width-input {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 4px 6px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
// Reset appearance properties for textual inputs and textarea
|
||||
@@ -579,9 +582,9 @@ input[type="checkbox"][readonly] {
|
||||
.add-on {
|
||||
display: inline-block;
|
||||
width: auto;
|
||||
height: @baseLineHeight;
|
||||
min-width: 16px;
|
||||
padding: 4px 5px;
|
||||
height: 22px;
|
||||
min-width: 18px;
|
||||
padding: 4px 6px;
|
||||
font-size: @baseFontSize;
|
||||
font-weight: normal;
|
||||
line-height: @baseLineHeight;
|
||||
@@ -653,29 +656,21 @@ input.search-query {
|
||||
padding-left: 14px;
|
||||
padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */
|
||||
margin: 0; // Remove the default margin on all inputs
|
||||
.border-radius(0px);
|
||||
}
|
||||
|
||||
/* Allow for input prepend/append in search forms */
|
||||
.form-search .input-append .search-query,
|
||||
.form-search .input-prepend .search-query {
|
||||
.border-radius(0); // Override due to specificity
|
||||
.form-search {
|
||||
.input-prepend {
|
||||
.btn {
|
||||
.border-radius(0 @borderRadiusSmall @borderRadiusSmall 0);
|
||||
}
|
||||
}
|
||||
.input-append {
|
||||
.btn {
|
||||
.border-radius(0 @borderRadiusSmall @borderRadiusSmall 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
.form-search .input-append .search-query {
|
||||
.border-radius(14px 0 0 14px);
|
||||
}
|
||||
.form-search .input-append .btn {
|
||||
.border-radius(0 14px 14px 0);
|
||||
}
|
||||
.form-search .input-prepend .search-query {
|
||||
.border-radius(0 14px 14px 0);
|
||||
}
|
||||
.form-search .input-prepend .btn {
|
||||
.border-radius(14px 0 0 14px);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// HORIZONTAL & VERTICAL FORMS
|
||||
// ---------------------------
|
||||
|
||||
@@ -47,10 +47,25 @@ h5.-black {
|
||||
background: none;
|
||||
border: none
|
||||
}
|
||||
.datepicker td.active,
|
||||
.datepicker td span.active {
|
||||
background: @turquoise !important;
|
||||
.bootstrap-datetimepicker-widget {
|
||||
td {
|
||||
&.active, span.active {
|
||||
background: @turquoise !important;
|
||||
}
|
||||
&.today:not(.active):before {
|
||||
border-bottom-color: @purple-l1 !important;
|
||||
}
|
||||
a[data-action] {
|
||||
padding: 0 !important;
|
||||
}
|
||||
.timepicker-hour,
|
||||
.timepicker-minute,
|
||||
.timepicker-second {
|
||||
margin: 8px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.umb-datetime-picker div.info {
|
||||
vertical-align: middle
|
||||
}
|
||||
|
||||
@@ -446,8 +446,8 @@ input.umb-panel-header-name-input {
|
||||
margin-bottom: 0;
|
||||
font-weight: bold;
|
||||
box-sizing: border-box;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
width: 100%;
|
||||
&:hover {
|
||||
background: @white;
|
||||
|
||||
@@ -7,7 +7,7 @@ ul.sections {
|
||||
background: @purple;
|
||||
height: 100%;
|
||||
width: 80px;
|
||||
border-right: 1px solid @purple;
|
||||
border-right: 1px solid @purple-d1;
|
||||
}
|
||||
|
||||
ul.sections li {
|
||||
@@ -22,13 +22,16 @@ ul.sections li [class^="icon-"],
|
||||
ul.sections li [class*=" icon-"],
|
||||
ul.sections li img.icon-section {
|
||||
font-size: 30px;
|
||||
line-height: 20px; /* set line-height to ensure all icons use same line-height */
|
||||
display: inline-block;
|
||||
margin: 1px 0 0 0;
|
||||
color: @purple-l2;
|
||||
-webkit-transition: all .3s linear;
|
||||
-moz-transition: all .3s linear;
|
||||
transition: all .3s linear;
|
||||
|
||||
&, &:before {
|
||||
line-height: 20px !important; /* set line-height to ensure all icons use same line-height */
|
||||
}
|
||||
}
|
||||
|
||||
ul.sections:hover li [class^="icon-"],
|
||||
@@ -168,7 +171,7 @@ ul.sections-tray {
|
||||
width: 80px;
|
||||
|
||||
& > li:first-child > a {
|
||||
border-top: 1px solid @purple;
|
||||
border-top: 1px solid @purple-d1;
|
||||
}
|
||||
|
||||
& > li {
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
@inputBorderRadius: 0;
|
||||
@inputDisabledBackground: @gray-10;
|
||||
@formActionsBackground: @gray-9;
|
||||
@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border
|
||||
@inputHeight: @baseLineHeight + 12px; // base line-height + 8px vertical padding + 2px top/bottom border
|
||||
@controlRequiredColor: @red;
|
||||
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
<div class="umb-panel">
|
||||
<div class="umb-panel-body no-header with-footer">
|
||||
<umb-pane>
|
||||
<umb-control-group label="Url">
|
||||
<umb-control-group label="@general_url">
|
||||
<input id="url" class="umb-editor input-block-level" type="text" ng-model="form.url" ng-keyup="$event.keyCode == 13 ? showPreview() : null" required />
|
||||
<input type="button" ng-click="showPreview()" class="btn" value="Retrieve" />
|
||||
<input type="button" ng-click="showPreview()" class="btn" localize="value" value="@general_retrieve" />
|
||||
</umb-control-group>
|
||||
|
||||
<div ng-show="form.supportsDimensions">
|
||||
<umb-control-group label="Size">
|
||||
<umb-control-group label="@general_size">
|
||||
<input type="text" ng-model="form.width" on-blur="changeSize('width')" style="width:50px"/> x <input type="text" ng-model="form.height" on-blur="changeSize('height')" style="width:50px"/>
|
||||
|
||||
<label for="constrain" style="display:inline"><localize key="general_constrain">Constrain</localize>:</label>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<form ng-controller="Umbraco.Overlays.EmbedOverlay as vm">
|
||||
|
||||
<umb-control-group label="Url">
|
||||
<umb-control-group label="@general_url">
|
||||
<input id="url" class="umb-editor input-block-level" type="text" style="margin-bottom: 10px;" ng-model="model.embed.url" ng-keyup="$event.keyCode == 13 ? vm.showPreview() : null" required />
|
||||
<input type="button" ng-click="vm.showPreview()" class="btn" value="Retrieve" />
|
||||
<input type="button" ng-click="vm.showPreview()" class="btn" localize="value" value="@general_retrieve" />
|
||||
</umb-control-group>
|
||||
|
||||
<umb-control-group>
|
||||
@@ -11,15 +11,15 @@
|
||||
</umb-control-group>
|
||||
|
||||
<div ng-show="model.embed.supportsDimensions">
|
||||
<umb-control-group label="Width">
|
||||
<umb-control-group label="@general_width">
|
||||
<input type="text" ng-model="model.embed.width" on-blur="vm.changeSize('width')" />
|
||||
</umb-control-group>
|
||||
|
||||
<umb-control-group label="Height">
|
||||
<umb-control-group label="@general_height">
|
||||
<input type="text" ng-model="model.embed.height" on-blur="vm.changeSize('height')" />
|
||||
</umb-control-group>
|
||||
|
||||
<umb-control-group label="Constrain:">
|
||||
<umb-control-group label="@general_constrain">
|
||||
<input id="constrain" type="checkbox" ng-model="model.embed.constrain" />
|
||||
</umb-control-group>
|
||||
</div>
|
||||
|
||||
@@ -28,8 +28,7 @@
|
||||
<div class="upload-button">
|
||||
<umb-button
|
||||
type="button"
|
||||
key="general_upload"
|
||||
label="Upload"
|
||||
label-key="general_upload"
|
||||
action="upload()"
|
||||
disabled="disabled">
|
||||
</umb-button>
|
||||
|
||||
+1
-1
@@ -10,5 +10,5 @@
|
||||
<li>Find an add-on <a class="btn-link -underline href="http://our.umbraco.org/projects" target="_blank">package</a> to help you get going quickly</li>
|
||||
<li>Watch our <a class="btn-link -underline href="http://umbraco.tv" target="_blank">tutorial videos</a> (some are free, some require a subscription)</li>
|
||||
<li>Find out about our <a class="btn-link -underline href="http://umbraco.org/products" target="_blank">productivity boosting tools and commercial support</a></li>
|
||||
<li>Find out about real-life <a class="btn-link -underline href="http://umbraco.org/training/training-schedule" target="_blank">training and certification</a> opportunities</li>
|
||||
<li>Find out about real-life <a class="btn-link -underline href="http://umbraco.org/training/" target="_blank">training and certification</a> opportunities</li>
|
||||
</ul>
|
||||
|
||||
@@ -10,5 +10,5 @@
|
||||
<li>Ask a question in the <a class="btn-link -underline" href="https://our.umbraco.org/" target="_blank">Community Forum</a></li>
|
||||
<li>Watch our <a class="btn-link -underline" href="http://umbraco.tv" target="_blank">tutorial videos</a> (some are free, some require a subscription)</li>
|
||||
<li>Find out about our <a class="btn-link -underline" href="http://umbraco.com/products-and-support" target="_blank">productivity boosting tools and commercial support</a></li>
|
||||
<li>Find out about real-life <a class="btn-link -underline" href="http://umbraco.com/products/training/schedule" target="_blank">training and certification</a> opportunities</li>
|
||||
<li>Find out about real-life <a class="btn-link -underline" href="http://umbraco.com/training/" target="_blank">training and certification</a> opportunities</li>
|
||||
</ul>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
</div>
|
||||
|
||||
<div class="umb-dialog-footer btn-toolbar umb-btn-toolbar" >
|
||||
<button type="button" class="btn btn-info" ng-click="nav.hideDialog()">
|
||||
<button type="button" class="btn btn-info" ng-click="nav.hideDialog(true)">
|
||||
<localize key="buttons_somethingElse">Do something else</localize>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
|
||||
<umb-editor-sub-header>
|
||||
<umb-editor-sub-header-content-left>
|
||||
<a class="umb-package-details__back-link" href="" ng-click="vm.state = 'upload'">← <localize key="packager_cancelAndAnother">Cancel and upload another package</localize></a>
|
||||
<a class="umb-package-details__back-link" href="" ng-click="vm.state = 'upload'">← <localize key="packager_cancelAndUploadAnother">Cancel and upload another package</localize></a>
|
||||
</umb-editor-sub-header-content-left>
|
||||
</umb-editor-sub-header>
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
ng-model="renderModel">
|
||||
<li ng-repeat="node in renderModel">
|
||||
|
||||
<i class="icon icon-delete red hover-show pull-right" ng-click="remove($index)"></i>
|
||||
<i class="icon icon-delete red hover-show pull-right" style="cursor:pointer;" ng-click="remove($index); $event.stopPropagation();"></i>
|
||||
|
||||
<i class="icon {{node.icon}} hover-hide"></i>
|
||||
<a href prevent-default ng-click="openContentPicker()" >{{node.name}}</a>
|
||||
|
||||
@@ -20,8 +20,7 @@ function listViewController($rootScope, $scope, $routeParams, $injector, $cookie
|
||||
getListResultsCallback = contentResource.getPagedResults;
|
||||
deleteItemCallback = contentResource.deleteByKey;
|
||||
getIdCallback = function (selected) {
|
||||
var selectedKey = getItemKey(selected.id);
|
||||
return selectedKey;
|
||||
return selected.key;
|
||||
};
|
||||
createEditUrlCallback = function (item) {
|
||||
return "/" + $scope.entityType + "/" + $scope.entityType + "/edit/" + item.key + "?page=" + $scope.options.pageNumber + "&listName=" + $scope.contentId;
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
var i2 = parseFloat($scope.model.config.initVal2);
|
||||
sliderVal = [
|
||||
isNaN(i1) ? $scope.model.config.minVal : (i1 >= $scope.model.config.minVal ? i1 : $scope.model.config.minVal),
|
||||
isNaN(i2) ? $scope.model.config.maxVal : (i2 > i1 ? (i2 <= $scope.model.config.maxVal ? i2 : $scope.model.config.maxVal) : $scope.model.config.maxVal)
|
||||
isNaN(i2) ? $scope.model.config.maxVal : (i2 >= i1 ? (i2 <= $scope.model.config.maxVal ? i2 : $scope.model.config.maxVal) : $scope.model.config.maxVal)
|
||||
];
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
function textAreaController($rootScope, $scope, $log) {
|
||||
$scope.model.maxlength = false;
|
||||
if($scope.model.config.maxChars) {
|
||||
$scope.model.maxlength = true;
|
||||
if($scope.model.value == undefined) {
|
||||
$scope.model.count = ($scope.model.config.maxChars * 1);
|
||||
} else {
|
||||
$scope.model.count = ($scope.model.config.maxChars * 1) - $scope.model.value.length;
|
||||
}
|
||||
}
|
||||
|
||||
$scope.model.change = function() {
|
||||
if($scope.model.config.maxChars) {
|
||||
if($scope.model.value == undefined) {
|
||||
$scope.model.count = ($scope.model.config.maxChars * 1);
|
||||
} else {
|
||||
$scope.model.count = ($scope.model.config.maxChars * 1) - $scope.model.value.length;
|
||||
}
|
||||
if($scope.model.count < 0) {
|
||||
$scope.model.value = $scope.model.value.substring(0, ($scope.model.config.maxChars * 1));
|
||||
$scope.model.count = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
angular.module('umbraco').controller("Umbraco.PropertyEditors.textAreaController", textAreaController);
|
||||
@@ -1,3 +1,9 @@
|
||||
<textarea ng-model="model.value" id="{{model.alias}}" name="textarea" rows="10" class="umb-editor umb-textarea textstring" val-server="value" ng-required="model.validation.mandatory"></textarea>
|
||||
<span class="help-inline" val-msg-for="textarea" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="textarea" val-toggle-msg="valServer"></span>
|
||||
<div ng-controller="Umbraco.PropertyEditors.textAreaController">
|
||||
<textarea ng-model="model.value" id="{{model.alias}}" name="textarea" rows="10" class="umb-editor umb-textarea textstring" val-server="value" ng-keyup="model.change()"></textarea>
|
||||
<span class="help-inline" val-msg-for="textarea" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
<span class="help-inline" val-msg-for="textarea" val-toggle-msg="valServer"></span>
|
||||
<div class="help" ng-if="model.maxlength">
|
||||
<strong>{{model.count}}</strong>
|
||||
<localize key="textbox_characters_left">characters left</localize>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,26 @@
|
||||
function textboxController($rootScope, $scope, $log) {
|
||||
$scope.model.maxlength = false;
|
||||
if($scope.model.config.maxChars) {
|
||||
$scope.model.maxlength = true;
|
||||
if($scope.model.value == undefined) {
|
||||
$scope.model.count = ($scope.model.config.maxChars * 1);
|
||||
} else {
|
||||
$scope.model.count = ($scope.model.config.maxChars * 1) - $scope.model.value.length;
|
||||
}
|
||||
}
|
||||
|
||||
$scope.model.change = function() {
|
||||
if($scope.model.config.maxChars) {
|
||||
if($scope.model.value == undefined) {
|
||||
$scope.model.count = ($scope.model.config.maxChars * 1);
|
||||
} else {
|
||||
$scope.model.count = ($scope.model.config.maxChars * 1) - $scope.model.value.length;
|
||||
}
|
||||
if($scope.model.count < 0) {
|
||||
$scope.model.value = $scope.model.value.substring(0, ($scope.model.config.maxChars * 1));
|
||||
$scope.model.count = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
angular.module('umbraco').controller("Umbraco.PropertyEditors.textboxController", textboxController);
|
||||
@@ -1,9 +1,14 @@
|
||||
<div>
|
||||
<div ng-controller="Umbraco.PropertyEditors.textboxController">
|
||||
<input type="text" name="textbox" ng-model="model.value" id="{{model.alias}}"
|
||||
class="umb-editor umb-textstring textstring"
|
||||
val-server="value"
|
||||
ng-required="model.validation.mandatory"
|
||||
ng-trim="false" />
|
||||
ng-trim="false"
|
||||
ng-keyup="model.change()" />
|
||||
<span class="help-inline" val-msg-for="textbox" val-toggle-msg="valServer"></span>
|
||||
<span class="help-inline" val-msg-for="textbox" val-toggle-msg="required"><localize key="general_required">Required</localize></span>
|
||||
</div>
|
||||
<div class="help" ng-if="model.maxlength">
|
||||
<strong>{{model.count}}</strong>
|
||||
<localize key="textbox_characters_left">characters left</localize>
|
||||
</div>
|
||||
</div>
|
||||
@@ -568,6 +568,7 @@
|
||||
<Content Include="Config\Lang\zh-CN.user.xml" />
|
||||
<Content Include="Umbraco\Config\Lang\cs.xml" />
|
||||
<Content Include="Umbraco\ClientRedirect.aspx" />
|
||||
<Content Include="Umbraco\Config\Lang\tr.xml" />
|
||||
<Content Include="Umbraco\Config\Lang\zh_tw.xml" />
|
||||
<Content Include="Umbraco\create.aspx" />
|
||||
<Content Include="Umbraco\Developer\Packages\installer.aspx" />
|
||||
@@ -2378,9 +2379,9 @@ xcopy "$(ProjectDir)"..\packages\SqlServerCE.4.0.0.1\x86\*.* "$(TargetDir)x86\"
|
||||
<WebProjectProperties>
|
||||
<UseIIS>True</UseIIS>
|
||||
<AutoAssignPort>True</AutoAssignPort>
|
||||
<DevelopmentServerPort>7640</DevelopmentServerPort>
|
||||
<DevelopmentServerPort>7650</DevelopmentServerPort>
|
||||
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
||||
<IISUrl>http://localhost:7640</IISUrl>
|
||||
<IISUrl>http://localhost:7650</IISUrl>
|
||||
<NTLMAuthentication>False</NTLMAuthentication>
|
||||
<UseCustomServer>False</UseCustomServer>
|
||||
<CustomServerUrl>
|
||||
|
||||
@@ -1291,4 +1291,7 @@ Mange hilsner fra Umbraco robotten
|
||||
<key alias="enabledConfirm">URL tracker er nu slået fra.</key>
|
||||
<key alias="enableError">Der opstod en fejl under forsøget på at slå URL trackeren til, der findes mere information i logfilen.</key>
|
||||
</area>
|
||||
<area alias="textbox">
|
||||
<key alias="characters_left">Karakterer tilbage</key>
|
||||
</area>
|
||||
</language>
|
||||
|
||||
@@ -514,6 +514,7 @@
|
||||
<key alias="rename">Rename</key>
|
||||
<key alias="renew">Renew</key>
|
||||
<key alias="required" version="7.0">Required</key>
|
||||
<key alias="retrieve">Retrieve</key>
|
||||
<key alias="retry">Retry</key>
|
||||
<key alias="rights">Permissions</key>
|
||||
<key alias="search">Search</key>
|
||||
@@ -1546,8 +1547,10 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="xmlDataIntegrityCheckMedia">Media - Total XML: %0%, Total: %1%, Total invalid: %2%</key>
|
||||
<key alias="xmlDataIntegrityCheckContent">Content - Total XML: %0%, Total published: %1%, Total invalid: %2%</key>
|
||||
|
||||
<key alias="httpsCheckValidCertificate">Your site certificate was marked as valid.</key>
|
||||
<key alias="httpsCheckValidCertificate">Your website's certificate is valid.</key>
|
||||
<key alias="httpsCheckInvalidCertificate">Certificate validation error: '%0%'</key>
|
||||
<key alias="httpsCheckExpiredCertificate">Your website's SSL certificate has expired.</key>
|
||||
<key alias="httpsCheckExpiringCertificate">Your website's SSL certificate is expiring in %0% days.</key>
|
||||
<key alias="httpsCheckInvalidUrl">Error pinging the URL %0% - '%1%'</key>
|
||||
<key alias="httpsCheckIsCurrentSchemeHttps">You are currently %0% viewing the site using the HTTPS scheme.</key>
|
||||
<key alias="httpsCheckConfigurationRectifyNotPossible">The appSetting 'umbracoUseSSL' is set to 'false' in your web.config file. Once you access this site using the HTTPS scheme, that should be set to 'true'.</key>
|
||||
@@ -1627,4 +1630,7 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<area alias="emptyStates">
|
||||
<key alias="emptyDictionaryTree">No Dictionary items to choose from</key>
|
||||
</area>
|
||||
</language>
|
||||
<area alias="textbox">
|
||||
<key alias="characters_left">characters left</key>
|
||||
</area>
|
||||
</language>
|
||||
@@ -515,6 +515,7 @@
|
||||
<key alias="rename">Rename</key>
|
||||
<key alias="renew">Renew</key>
|
||||
<key alias="required" version="7.0">Required</key>
|
||||
<key alias="retrieve">Retrieve</key>
|
||||
<key alias="retry">Retry</key>
|
||||
<key alias="rights">Permissions</key>
|
||||
<key alias="search">Search</key>
|
||||
@@ -1542,8 +1543,10 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="xmlDataIntegrityCheckMedia">Media - Total XML: %0%, Total: %1%, Total invalid: %2%</key>
|
||||
<key alias="xmlDataIntegrityCheckContent">Content - Total XML: %0%, Total published: %1%, Total invalid: %2%</key>
|
||||
|
||||
<key alias="httpsCheckValidCertificate">Your site certificate was marked as valid.</key>
|
||||
<key alias="httpsCheckValidCertificate">Your website's certificate is valid.</key>
|
||||
<key alias="httpsCheckInvalidCertificate">Certificate validation error: '%0%'</key>
|
||||
<key alias="httpsCheckExpiredCertificate">Your website's SSL certificate has expired.</key>
|
||||
<key alias="httpsCheckExpiringCertificate">Your website's SSL certificate is expiring in %0% days.</key>
|
||||
<key alias="httpsCheckInvalidUrl">Error pinging the URL %0% - '%1%'</key>
|
||||
<key alias="httpsCheckIsCurrentSchemeHttps">You are currently %0% viewing the site using the HTTPS scheme.</key>
|
||||
<key alias="httpsCheckConfigurationRectifyNotPossible">The appSetting 'umbracoUseSSL' is set to 'false' in your web.config file. Once you access this site using the HTTPS scheme, that should be set to 'true'.</key>
|
||||
@@ -1623,4 +1626,7 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<area alias="emptyStates">
|
||||
<key alias="emptyDictionaryTree">No Dictionary items to choose from</key>
|
||||
</area>
|
||||
<area alias="textbox">
|
||||
<key alias="characters_left">characters left</key>
|
||||
</area>
|
||||
</language>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<key alias="permissionDenied">Brak odpowiednich uprawnień</key>
|
||||
<key alias="addNew">Dodaj nową domenę</key>
|
||||
<key alias="remove">Usuń domenę</key>
|
||||
<key alias="invalidNode">Niepoprawny węzeł<./key>
|
||||
<key alias="invalidNode">Niepoprawny węzeł.</key>
|
||||
<key alias="invalidDomain">Niepoprawny format domeny.</key>
|
||||
<key alias="duplicateDomain">Domena została już przydzielona.</key>
|
||||
<key alias="language">Język</key>
|
||||
@@ -177,6 +177,8 @@ także do obecnego węzła, o ile poniższa domena również do niego należy.]]
|
||||
<key alias="target" version="7.0">Cel</key>
|
||||
<key alias="scheduledPublishServerTime">Oznacza to następującą godzinę na serwerze:</key>
|
||||
<key alias="scheduledPublishDocumentation"><![CDATA[<a href="https://our.umbraco.org/documentation/Getting-Started/Data/Scheduled-Publishing/#timezones" target="_blank">Co to oznacza?</a>]]></key>
|
||||
<key alias="addTextBox">Dodaj kolejne pole tekstowe</key>
|
||||
<key alias="removeTextBox">Usuń te pole tekstowe</key>
|
||||
</area>
|
||||
<area alias="media">
|
||||
<key alias="clickToUpload">Kliknij, aby załadować plik</key>
|
||||
@@ -304,6 +306,7 @@ także do obecnego węzła, o ile poniższa domena również do niego należy.]]
|
||||
<key alias="linkToPage">Link do strony</key>
|
||||
<key alias="openInNewWindow">Otwórz zlinkowany dokument w nowym oknie lub zakładce</key>
|
||||
<key alias="linkToMedia">Link do mediów</key>
|
||||
<key alias="linkToFile">Link do plików</key>
|
||||
<key alias="selectMedia">Wybierz media</key>
|
||||
<key alias="selectIcon">Wybierz ikonę</key>
|
||||
<key alias="selectItem">Wybierz element</key>
|
||||
@@ -323,6 +326,7 @@ także do obecnego węzła, o ile poniższa domena również do niego należy.]]
|
||||
<key alias="unLinkYour">Odlinkuj swój</key>
|
||||
<key alias="account">konto</key>
|
||||
<key alias="selectEditor">Wybierz edytora</key>
|
||||
<key alias="selectSnippet">Wybierz snippet</key>
|
||||
</area>
|
||||
<area alias="dictionaryItem">
|
||||
<key alias="description"><![CDATA[
|
||||
@@ -380,6 +384,13 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
|
||||
<key alias="rteRelatedStylesheets">Powiązane arkusze stylów</key>
|
||||
<key alias="rteShowLabel">Pokaż etykietę</key>
|
||||
<key alias="rteWidthAndHeight">Szerokość i wysokość</key>
|
||||
<key alias="allPropTypes">Wszystkie typy właściwości & dane właściwości</key>
|
||||
<key alias="willBeDeleted">używające tego typu danych zostaną usunięte na zawsze, potwierdź, że chcesz je także usunąć</key>
|
||||
<key alias="yesDelete">Tak, usuń</key>
|
||||
<key alias="andAllRelated">i wszystkie typy właściwości & dane właściwości używające tego typu danych</key>
|
||||
<key alias="selectFolder">Wybierz folder do przeniesienia</key>
|
||||
<key alias="inTheTree">do w strukturze drzewa poniżej</key>
|
||||
<key alias="wasMoved">został przeniesiony poniżej</key>
|
||||
</area>
|
||||
<area alias="errorHandling">
|
||||
<key alias="errorButDataWasSaved">Dane zostały zapisane, lecz wystąpiły błędy, które musisz poprawić przed publikacją strony:</key>
|
||||
@@ -438,6 +449,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
|
||||
<key alias="closewindow">Zamknij okno</key>
|
||||
<key alias="comment">Komentarz</key>
|
||||
<key alias="confirm">Potwierdzenie</key>
|
||||
<key alias="constrain">Zachowaj</key>
|
||||
<key alias="constrainProportions">Zachowaj proporcje</key>
|
||||
<key alias="continue">Kontynuuj</key>
|
||||
<key alias="copy">Kopiuj</key>
|
||||
@@ -449,6 +461,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
|
||||
<key alias="deleted">Usunięto</key>
|
||||
<key alias="deleting">Usuwanie...</key>
|
||||
<key alias="design">Wygląd</key>
|
||||
<key alias="dictionary">Słownik</key>
|
||||
<key alias="dimensions">Rozmiary</key>
|
||||
<key alias="down">Dół</key>
|
||||
<key alias="download">Pobierz</key>
|
||||
@@ -458,6 +471,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
|
||||
<key alias="email">Email</key>
|
||||
<key alias="error">Błąd</key>
|
||||
<key alias="findDocument">Znajdź</key>
|
||||
<key alias="first">Pierwszy</key>
|
||||
<key alias="height">Wysokość</key>
|
||||
<key alias="help">Pomoc</key>
|
||||
<key alias="icon">Ikona</key>
|
||||
@@ -468,7 +482,8 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
|
||||
<key alias="invalid">Nieprawidłowe</key>
|
||||
<key alias="justify">Wyrównaj</key>
|
||||
<key alias="language">Język</key>
|
||||
<key alias="layout">układ</key>
|
||||
<key alias="last">Ostatni</key>
|
||||
<key alias="layout">Układ</key>
|
||||
<key alias="loading">Ładowanie</key>
|
||||
<key alias="locked">Zablokowany</key>
|
||||
<key alias="login">Zaloguj</key>
|
||||
@@ -495,9 +510,11 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
|
||||
<key alias="reciept">E-mail, aby otrzymywać dane z formularzy</key>
|
||||
<key alias="recycleBin">Kosz</key>
|
||||
<key alias="remaining">Pozostało</key>
|
||||
<key alias="remove">Usuń</key>
|
||||
<key alias="rename">Zmień nazwę</key>
|
||||
<key alias="renew">Odnów</key>
|
||||
<key alias="required" version="7.0">Wymagany</key>
|
||||
<key alias="retrieve">Odzyskaj</key>
|
||||
<key alias="retry">Ponów próbę</key>
|
||||
<key alias="rights">Uprawnienia</key>
|
||||
<key alias="search">Szukaj</key>
|
||||
@@ -802,10 +819,43 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
|
||||
<key alias="notifications">Powiadomienie</key>
|
||||
</area>
|
||||
<area alias="packager">
|
||||
<key alias="chooseLocalPackageText"><!CDATA[
|
||||
<key alias="chooseLocalPackageText"><![CDATA[
|
||||
Wskaż pakiet z Twojego komputera, poprzez kliknięcie na przycisk "Przeglądaj"<br />
|
||||
i wskaż gdzie jest zapisany. Pakiety Umbraco przeważnie posiadają rozszerzenie ".umb" lub ".zip".
|
||||
]]></key>
|
||||
<key alias="dropHere">Upuść, aby załadować</key>
|
||||
<key alias="orClickHereToUpload">lub kliknij tutaj, aby wybrać pliki</key>
|
||||
<key alias="uploadPackage">Załaduj pakiet</key>
|
||||
<key alias="localPackageDescription">Zainstaluj lokalny pakiet poprzez wybranie go ze swojego komputera. Instaluj jedynie te pakiety, z zaufanych i znanych Tobie źródeł</key>
|
||||
<key alias="uploadAnother">Załaduj kolejny pakiet</key>
|
||||
<key alias="cancelAndUploadAnother">Anuluj i załaduj kolejny pakiet</key>
|
||||
<key alias="packageLicense">Licencja</key>
|
||||
<key alias="accept">Zgadzam się</key>
|
||||
<key alias="termsOfUse">zasady użytkowania</key>
|
||||
<key alias="packageInstall">Zainstaluj pakiet</key>
|
||||
<key alias="installFinish">Zakończ</key>
|
||||
<key alias="installedPackages">Zainstalowane pakiety</key>
|
||||
<key alias="noPackages">Nie masz żadnych zainstalowanych pakietów</key>
|
||||
<key alias="noPackagesDescription"><![CDATA[Nie masz żadnych zainstalowanych pakietów. Zainstaluj lokalny pakiet poprzez wybranie go ze swojego komputera lub przeglądaj dostępne pakiety, używając ikony <strong>'Pakiety'</strong> w prawym górnym rogu ekranu]]></key>
|
||||
<key alias="packageSearch">Szukaj pakietów</key>
|
||||
<key alias="packageSearchResults">Wyniki dla</key>
|
||||
<key alias="packageNoResults">Nie mogliśmy znaleźć niczego dla</key>
|
||||
<key alias="packageNoResultsDescription">Spróbuj wyszukać kolejny pakiet lub przeszukaj kategorie pakietów</key>
|
||||
<key alias="packagesPopular">Popularne</key>
|
||||
<key alias="packagesNew">Nowe wydania</key>
|
||||
<key alias="packageHas">ma</key>
|
||||
<key alias="packageKarmaPoints">punktów karmy</key>
|
||||
<key alias="packageInfo">Informacja</key>
|
||||
<key alias="packageOwner">Właściciel</key>
|
||||
<key alias="packageContrib">Kontrybutor</key>
|
||||
<key alias="packageCreated">Utworzone</key>
|
||||
<key alias="packageCurrentVersion">Obecna wersja</key>
|
||||
<key alias="packageNetVersion">wersja .NET</key>
|
||||
<key alias="packageDownloads">Pobrania</key>
|
||||
<key alias="packageLikes">Polubienia</key>
|
||||
<key alias="packageCompatibility">Zgodność</key>
|
||||
<key alias="packageCompatibilityDescription">Według raportów członków społeczności, ten pakiet jest zgodny z następującymi wersjami Umbraco. Pełna zgodność nie może być zagwarantowana dla wersji zaraportowanych poniżej 100%</key>
|
||||
<key alias="packageExternalSources">Zewnętrzne źródła</key>
|
||||
<key alias="packageAuthor">Autor</key>
|
||||
<key alias="packageDemonstration">Demonstracja</key>
|
||||
<key alias="packageDocumentation">Dokumentacja</key>
|
||||
@@ -841,6 +891,7 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
|
||||
<key alias="installStateRestarting">Restartowanie, proszę czekać...</key>
|
||||
<key alias="installStateComplete">Wszystko skończone, Twoja przeglądarka się teraz odświeży, proszę czekać...</key>
|
||||
<key alias="installStateCompleted">Proszę kliknąć Zakończ, aby zakończyć instalację i przeładować stronę.</key>
|
||||
<key alias="installStateUploading">Wgrywanie pakietu...</key>
|
||||
</area>
|
||||
<area alias="paste">
|
||||
<key alias="doNothing">Wklej z zachowaniem formatowania (Nie zalecane)</key>
|
||||
@@ -908,6 +959,10 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
|
||||
</area>
|
||||
<area alias="imagecropper">
|
||||
<key alias="reset">Resetuj</key>
|
||||
<key alias="defineCrop">Zdefiniuj przycięcie</key>
|
||||
<key alias="defineCropDescription">Ustaw alias dla przycięcia, a także jego domyślną szerokość i długość</key>
|
||||
<key alias="saveCrop">Zapisz przycięcie</key>
|
||||
<key alias="addCrop">Dodaj nowe przycięcie</key>
|
||||
</area>
|
||||
<area alias="rollback">
|
||||
<key alias="currentVersion">Aktualna wersja</key>
|
||||
@@ -1116,6 +1171,7 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
|
||||
|
||||
|
||||
<key alias="queryBuilder">Konstruktor zapytań</key>
|
||||
<key alias="buildQuery">Zbuduj zapytanie</key>
|
||||
<key alias="itemsReturned">Element zwrócony, w</key>
|
||||
|
||||
<key alias="iWant">Chcę</key>
|
||||
@@ -1261,25 +1317,36 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
|
||||
</area>
|
||||
|
||||
<area alias="templateEditor">
|
||||
<key alias="addFallbackField">Dodaj pole zastępcze</key>
|
||||
<key alias="fallbackField">Pole zastępcze</key>
|
||||
<key alias="addDefaultValue">Dodaj domyślną wartość</key>
|
||||
<key alias="defaultValue">Domyślna wartość</key>
|
||||
<key alias="alternativeField">Pole alternatywne</key>
|
||||
<key alias="alternativeText">Tekst alternatywny</key>
|
||||
<key alias="casing">Wielkość liter</key>
|
||||
<key alias="encoding">Kodowanie</key>
|
||||
<key alias="chooseField">Wybierz pole</key>
|
||||
<key alias="convertLineBreaks">Konwertuj złamania wiersza</key>
|
||||
<key alias="convertLineBreaksDescription">Tak, konwertuj złamania wiersza</key>
|
||||
<key alias="convertLineBreaksHelp">Zamienia złamania wiersza na html-tag &lt;br&gt;</key>
|
||||
<key alias="customFields">Niestandardowe Pola</key>
|
||||
<key alias="dateOnly">Tak, tylko data</key>
|
||||
<key alias="formatAndEncoding">Format i kodowanie</key>
|
||||
<key alias="formatAsDate">Formatuj jako datę</key>
|
||||
<key alias="formatAsDateDescr">Formatuj wartość jako datę lub jako datę i czas, zgodnie z aktywną kulturą</key>
|
||||
<key alias="htmlEncode">Kodowanie HTML</key>
|
||||
<key alias="htmlEncodeHelp">Zamienia znaki specjalne na ich odpowiedniki HTML</key>
|
||||
<key alias="insertedAfter">Zostanie wstawione za wartością pola</key>
|
||||
<key alias="insertedBefore">Zostanie wstawione przed wartością pola</key>
|
||||
<key alias="lowercase">małe znaki</key>
|
||||
<key alias="modifyOutput">Modyfikuj dane wyjściowe</key>
|
||||
<key alias="none">Nic</key>
|
||||
<key alias="outputSample">Próbka danych wyjściowych</key>
|
||||
<key alias="postContent">Wstaw za polem</key>
|
||||
<key alias="preContent">Wstaw przed polem</key>
|
||||
<key alias="recursive">Rekurencyjne</key>
|
||||
<key alias="recursiveDescr">Tak, spraw, aby było to rekurencyjne</key>
|
||||
<key alias="separator">Separator</key>
|
||||
<key alias="standardFields">Standardowe Pola</key>
|
||||
<key alias="uppercase">Wielkie litery</key>
|
||||
<key alias="urlEncode">Kodowanie URL</key>
|
||||
@@ -1429,6 +1496,14 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
|
||||
<key alias="validateAsUrl">Waliduj jako URL</key>
|
||||
<key alias="enterCustomValidation">...lub wpisz niestandardową walidację</key>
|
||||
<key alias="fieldIsMandatory">Pole jest wymagane</key>
|
||||
<key alias="validationRegExp">Wprowadź wyrażenie regularne</key>
|
||||
<key alias="minCount">Musisz dodać przynajmniej</key>
|
||||
<key alias="maxCount">Możesz mieć jedynie</key>
|
||||
<key alias="items">elementy</key>
|
||||
<key alias="itemsSelected">wybrane elementy</key>
|
||||
<key alias="invalidDate">Niepoprawna data</key>
|
||||
<key alias="invalidNumber">To nie jest numer</key>
|
||||
<key alias="invalidEmail">Niepoprawny e-mail</key>
|
||||
</area>
|
||||
<area alias="healthcheck">
|
||||
<!-- Następujące klucze spowodują, że tokeny zostaną przekazane:
|
||||
@@ -1472,8 +1547,10 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
|
||||
<key alias="xmlDataIntegrityCheckMedia">Media - Suma XML: %0%, Suma: %1%, Suma niepoprawnych: %2%</key>
|
||||
<key alias="xmlDataIntegrityCheckContent">Zawartość - Suma XML: %0%, Suma opublikowanych: %1%, Suma niepoprawnych: %2%</key>
|
||||
|
||||
<key alias="httpsCheckValidCertificate">Certifikat Twojej strony został oznaczony jako poprawny.</key>
|
||||
<key alias="httpsCheckValidCertificate">Certifikat Twojej strony jest poprawny.</key>
|
||||
<key alias="httpsCheckInvalidCertificate">Błąd walidacji certyfikatu: '%0%'</key>
|
||||
<key alias="httpsCheckExpiredCertificate">Certyfikat SSL Twojej strony wygasł.</key>
|
||||
<key alias="httpsCheckExpiringCertificate">Certyfikat SSL Twojej strony wygaśnie za %0% dni.</key>
|
||||
<key alias="httpsCheckInvalidUrl">Błąd pingowania adresu URL %0% - '%1%'</key>
|
||||
<key alias="httpsCheckIsCurrentSchemeHttps">Oglądasz %0% stronę używając HTTPS.</key>
|
||||
<key alias="httpsCheckConfigurationRectifyNotPossible">appSetting 'umbracoUseSSL' został ustawiony na 'false' w Twoim pliku web.config. Po uzyskaniu dostępu do strony, używając HTTPS, powinieneś go ustawić na 'true'.</key>
|
||||
@@ -1552,5 +1629,8 @@ Naciśnij przycisk <strong>instaluj</strong>, aby zainstalować bazę danych Umb
|
||||
</area>
|
||||
<area alias="emptyStates">
|
||||
<key alias="emptyDictionaryTree">Brak elementów słownika do wyboru</key>
|
||||
</area>
|
||||
</area>
|
||||
<area alias="textbox">
|
||||
<key alias="characters_left">pozostało znaków</key>
|
||||
</area>
|
||||
</language>
|
||||
|
||||
@@ -356,7 +356,8 @@
|
||||
<key alias="theFriendliestCommunity">Самое дружелюбное сообщество</key>
|
||||
<key alias="linkToPage">Ссылка на страницу</key>
|
||||
<key alias="openInNewWindow">Открывать ссылку в новом окне или вкладке браузера</key>
|
||||
<key alias="linkToMedia">Ссылка на медиа-файл</key>
|
||||
<key alias="linkToMedia">Ссылка на медиа-элемент</key>
|
||||
<key alias="linkToFile">Ссылка на файл</key>
|
||||
<key alias="selectMedia">Выбрать медиа</key>
|
||||
<key alias="selectIcon">Выбрать значок</key>
|
||||
<key alias="selectItem">Выбрать элемент</key>
|
||||
@@ -366,7 +367,7 @@
|
||||
<key alias="selectMember">Выбрать участника</key>
|
||||
<key alias="selectMemberGroup">Выбрать группу участников</key>
|
||||
<key alias="noMacroParams">Это макрос без параметров</key>
|
||||
<key alias="noMacros">Нет макросов доступных для вставки в редактор</key>
|
||||
<key alias="noMacros">Нет макросов, доступных для вставки в редактор</key>
|
||||
<key alias="externalLoginProviders">Провайдеры аутентификации</key>
|
||||
<key alias="exceptionDetail">Подробное сообщение об ошибке</key>
|
||||
<key alias="stacktrace">Трассировка стека</key>
|
||||
@@ -487,6 +488,7 @@
|
||||
<key alias="closewindow">Закрыть окно</key>
|
||||
<key alias="comment">Примечание</key>
|
||||
<key alias="confirm">Подтвердить</key>
|
||||
<key alias="constrain">Сохранять пропорции</key>
|
||||
<key alias="constrainProportions">Сохранять пропорции</key>
|
||||
<key alias="continue">Далее</key>
|
||||
<key alias="copy">Копировать</key>
|
||||
@@ -554,6 +556,7 @@
|
||||
<key alias="rename">Переименовать</key>
|
||||
<key alias="renew">Обновить</key>
|
||||
<key alias="required" version="7.0">Обязательное</key>
|
||||
<key alias="retrieve">Получить</key>
|
||||
<key alias="retry">Повторить</key>
|
||||
<key alias="rights">Разрешения</key>
|
||||
<key alias="search">Поиск</key>
|
||||
@@ -571,7 +574,7 @@
|
||||
<key alias="update">Обновить</key>
|
||||
<key alias="upgrade">Обновление</key>
|
||||
<key alias="upload">Загрузить</key>
|
||||
<key alias="url">URL</key>
|
||||
<key alias="url">Интернет-ссылка</key>
|
||||
<key alias="user">Пользователь</key>
|
||||
<key alias="username">Имя пользователя</key>
|
||||
<key alias="value">Значение</key>
|
||||
@@ -990,7 +993,7 @@
|
||||
<key alias="dropHere">Перетащите сюда</key>
|
||||
<key alias="orClickHereToUpload">или нажмите здесь для выбора файла пакета</key>
|
||||
<key alias="uploadPackage">Загрузить пакет</key>
|
||||
<key alias="localPackageDescr">Установите локальный пакет из файла, расположенного на Вашем компьютере. Остерегайтесь устанавливать пакеты из непроверенных источников!</key>
|
||||
<key alias="localPackageDescription">Установите локальный пакет из файла, расположенного на Вашем компьютере. Остерегайтесь устанавливать пакеты из непроверенных источников!</key>
|
||||
<key alias="uploadAnother">Загрузить еще один пакет</key>
|
||||
<key alias="cancelAndUploadAnother">Отменить и загрузить другой пакет</key>
|
||||
<key alias="packageLicense">Лицензия</key>
|
||||
@@ -1422,12 +1425,15 @@
|
||||
</area>
|
||||
<area alias="templateEditor">
|
||||
<key alias="addFallbackField">Добавить поле замены</key>
|
||||
<key alias="fallbackField">Поле замены</key>
|
||||
<key alias="addDefaultValue">Добавить значение по-умолчанию</key>
|
||||
<key alias="defaultValue">Значение по-умолчанию</key>
|
||||
<key alias="alternativeField">Альтернативное поле</key>
|
||||
<key alias="alternativeText">Текст по-умолчанию</key>
|
||||
<key alias="casing">Регистр</key>
|
||||
<key alias="chooseField">Выбрать поле</key>
|
||||
<key alias="convertLineBreaks">Преобразовать переводы строк</key>
|
||||
<key alias="convertLineBreaksDescription">Да, преобразовывать</key>
|
||||
<key alias="convertLineBreaksHelp">Заменяет переводы строк на тэг html 'br'</key>
|
||||
<key alias="customFields">Пользовательские</key>
|
||||
<key alias="dateOnly">Только дата</key>
|
||||
@@ -1526,6 +1532,8 @@
|
||||
<key alias="documentTypes">Типы документов</key>
|
||||
<key alias="packager">Пакеты дополнений</key>
|
||||
<key alias="packages">Пакеты дополнений</key>
|
||||
<key alias="partialViews">Частичные представления</key>
|
||||
<key alias="partialViewMacros">Файлы макросов</key>
|
||||
<key alias="python">Скрипты Python</key>
|
||||
<key alias="relationTypes">Типы связей</key>
|
||||
<key alias="repositories">Установить из репозитория</key>
|
||||
|
||||
@@ -113,7 +113,7 @@ namespace Umbraco.Web.Cache
|
||||
}
|
||||
|
||||
TagsValueConverter.ClearCaches();
|
||||
MultipleMediaPickerPropertyConverter.ClearCaches();
|
||||
LegacyMediaPickerPropertyConverter.ClearCaches();
|
||||
SliderValueConverter.ClearCaches();
|
||||
MediaPickerPropertyConverter.ClearCaches();
|
||||
|
||||
|
||||
@@ -230,7 +230,7 @@ namespace Umbraco.Web.Editors
|
||||
basic.Description = TranslateItem(basic.Description);
|
||||
}
|
||||
|
||||
return basics;
|
||||
return basics.OrderBy(x => x.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Web;
|
||||
using Umbraco.Core.IO;
|
||||
using Umbraco.Core.Services;
|
||||
@@ -53,7 +54,7 @@ namespace Umbraco.Web.HealthCheck.Checks.Security
|
||||
private HealthCheckStatus CheckForValidCertificate()
|
||||
{
|
||||
var message = string.Empty;
|
||||
var success = false;
|
||||
StatusResultType result;
|
||||
var url = HealthCheckContext.HttpContext.Request.Url;
|
||||
|
||||
// Attempt to access the site over HTTPS to see if it HTTPS is supported
|
||||
@@ -65,7 +66,37 @@ namespace Umbraco.Web.HealthCheck.Checks.Security
|
||||
try
|
||||
{
|
||||
var response = (HttpWebResponse)request.GetResponse();
|
||||
success = response.StatusCode == HttpStatusCode.OK;
|
||||
if (response.StatusCode == HttpStatusCode.OK)
|
||||
{
|
||||
// Got a valid response, check now for if certificate expiring within 14 days
|
||||
// Hat-tip: https://stackoverflow.com/a/15343898/489433
|
||||
const int NumberOfDaysForExpiryWarning = 14;
|
||||
var cert = request.ServicePoint.Certificate;
|
||||
var cert2 = new X509Certificate2(cert);
|
||||
var expirationDate = cert2.NotAfter;
|
||||
|
||||
var daysToExpiry = (int)Math.Floor((cert2.NotAfter - DateTime.Now).TotalDays);
|
||||
if (daysToExpiry <= 0)
|
||||
{
|
||||
result = StatusResultType.Error;
|
||||
message = _textService.Localize("healthcheck/httpsCheckExpiredCertificate");
|
||||
}
|
||||
else if (daysToExpiry < NumberOfDaysForExpiryWarning)
|
||||
{
|
||||
result = StatusResultType.Warning;
|
||||
message = _textService.Localize("healthcheck/httpsCheckExpiringCertificate", new[] { daysToExpiry.ToString() });
|
||||
}
|
||||
else
|
||||
{
|
||||
result = StatusResultType.Success;
|
||||
message = _textService.Localize("healthcheck/httpsCheckValidCertificate");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result = StatusResultType.Error;
|
||||
message = _textService.Localize("healthcheck/httpsCheckInvalidUrl", new[] { address, response.StatusDescription });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -80,17 +111,16 @@ namespace Umbraco.Web.HealthCheck.Checks.Security
|
||||
{
|
||||
message = _textService.Localize("healthcheck/httpsCheckInvalidUrl", new[] { address, ex.Message });
|
||||
}
|
||||
|
||||
result = StatusResultType.Error;
|
||||
}
|
||||
|
||||
var actions = new List<HealthCheckAction>();
|
||||
|
||||
if (success)
|
||||
message = _textService.Localize("healthcheck/httpsCheckValidCertificate");
|
||||
|
||||
return
|
||||
new HealthCheckStatus(message)
|
||||
{
|
||||
ResultType = success ? StatusResultType.Success : StatusResultType.Error,
|
||||
ResultType = result,
|
||||
Actions = actions
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,7 +10,8 @@ namespace Umbraco.Web.Models
|
||||
public string Username { get; set; }
|
||||
|
||||
[Required]
|
||||
[DataMember(Name = "password", IsRequired = true)]
|
||||
[DataMember(Name = "password", IsRequired = true)]
|
||||
[StringLength(maximumLength:256)]
|
||||
public string Password { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -165,12 +165,20 @@ namespace Umbraco.Web.Models.Mapping
|
||||
var listViewTab = new Tab<ContentPropertyDisplay>();
|
||||
listViewTab.Alias = Constants.Conventions.PropertyGroups.ListViewGroupName;
|
||||
listViewTab.Label = localizedTextService.Localize("content/childItems");
|
||||
listViewTab.Id = 25;
|
||||
listViewTab.Id = display.Tabs.Count() + 1;
|
||||
listViewTab.IsActive = true;
|
||||
|
||||
var listViewConfig = editor.PreValueEditor.ConvertDbToEditor(editor.DefaultPreValues, preVals);
|
||||
//add the entity type to the config
|
||||
listViewConfig["entityType"] = entityType;
|
||||
listViewConfig["entityType"] = entityType;
|
||||
|
||||
//Override Tab Label if tabName is provided
|
||||
if (listViewConfig.ContainsKey("tabName"))
|
||||
{
|
||||
var configTabName = listViewConfig["tabName"];
|
||||
if (configTabName != null && string.IsNullOrWhiteSpace(configTabName.ToString()) == false)
|
||||
listViewTab.Label = configTabName.ToString();
|
||||
}
|
||||
|
||||
var listViewProperties = new List<ContentPropertyDisplay>();
|
||||
listViewProperties.Add(new ContentPropertyDisplay
|
||||
|
||||
@@ -50,7 +50,10 @@ namespace Umbraco.Web.PropertyEditors
|
||||
}
|
||||
|
||||
internal class ListViewPreValueEditor : PreValueEditor
|
||||
{
|
||||
{
|
||||
[PreValueField("tabName", "Tab Name", "textstring", Description = "The name of the listview tab (default if empty: 'Child Items')")]
|
||||
public int TabName { get; set; }
|
||||
|
||||
[PreValueField("displayAtTabNumber", "Display At Tab Number", "number", Description = "Which tab position that the list of child items will be displayed")]
|
||||
public int DisplayAtTabNumber { get; set; }
|
||||
|
||||
|
||||
@@ -6,5 +6,15 @@ namespace Umbraco.Web.PropertyEditors
|
||||
[PropertyEditor(Constants.PropertyEditors.TextboxMultipleAlias, "Textarea", "textarea", IsParameterEditor = true, ValueType = PropertyEditorValueTypes.Text, Icon="icon-application-window-alt")]
|
||||
public class TextAreaPropertyEditor : PropertyEditor
|
||||
{
|
||||
protected override PreValueEditor CreatePreValueEditor()
|
||||
{
|
||||
return new TextAreaPreValueEditor();
|
||||
}
|
||||
|
||||
internal class TextAreaPreValueEditor : PreValueEditor
|
||||
{
|
||||
[PreValueField("maxChars", "Maximum allowed characters", "number", Description = "If empty - no character limit")]
|
||||
public bool MaxChars { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,19 @@ namespace Umbraco.Web.PropertyEditors
|
||||
{
|
||||
[PropertyEditor(Constants.PropertyEditors.TextboxAlias, "Textbox", "textbox", IsParameterEditor = true, Group = "Common")]
|
||||
public class TextboxPropertyEditor : PropertyEditor
|
||||
{
|
||||
{
|
||||
|
||||
|
||||
protected override PreValueEditor CreatePreValueEditor()
|
||||
{
|
||||
return new TextboxPreValueEditor();
|
||||
}
|
||||
|
||||
internal class TextboxPreValueEditor : PreValueEditor
|
||||
{
|
||||
[PreValueField("maxChars", "Maximum allowed characters", "number", Description = "If empty - no character limit")]
|
||||
public bool MaxChars { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+16
-9
@@ -1,5 +1,5 @@
|
||||
// --------------------------------------------------------------------------------------------------------------------
|
||||
// <copyright file="MultipleMediaPickerPropertyConverter.cs" company="Umbraco">
|
||||
// <copyright file="LegacyMediaPickerPropertyConverter.cs" company="Umbraco">
|
||||
// Umbraco
|
||||
// </copyright>
|
||||
// <summary>
|
||||
@@ -24,20 +24,20 @@ using Umbraco.Core.Services;
|
||||
namespace Umbraco.Web.PropertyEditors.ValueConverters
|
||||
{
|
||||
/// <summary>
|
||||
/// The multiple media picker property value converter.
|
||||
/// The multiple media picker and double legacy media picker property value converter, should be deleted for v8
|
||||
/// </summary>
|
||||
[DefaultPropertyValueConverter(typeof(MustBeStringValueConverter))]
|
||||
public class MultipleMediaPickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta
|
||||
public class LegacyMediaPickerPropertyConverter : PropertyValueConverterBase, IPropertyValueConverterMeta
|
||||
{
|
||||
private readonly IDataTypeService _dataTypeService;
|
||||
|
||||
//TODO: Remove this ctor in v8 since the other one will use IoC
|
||||
public MultipleMediaPickerPropertyConverter()
|
||||
public LegacyMediaPickerPropertyConverter()
|
||||
: this(ApplicationContext.Current.Services.DataTypeService)
|
||||
{
|
||||
}
|
||||
|
||||
public MultipleMediaPickerPropertyConverter(IDataTypeService dataTypeService)
|
||||
public LegacyMediaPickerPropertyConverter(IDataTypeService dataTypeService)
|
||||
{
|
||||
if (dataTypeService == null) throw new ArgumentNullException("dataTypeService");
|
||||
_dataTypeService = dataTypeService;
|
||||
@@ -54,10 +54,17 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
|
||||
/// </returns>
|
||||
public override bool IsConverter(PublishedPropertyType propertyType)
|
||||
{
|
||||
if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters)
|
||||
if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters && propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MultipleMediaPickerAlias))
|
||||
{
|
||||
return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MultipleMediaPickerAlias);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters && propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MediaPickerAlias))
|
||||
{
|
||||
// this is the double legacy media picker, it can pick only single media items
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -109,7 +116,7 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
|
||||
ApplicationContext.Current.Services.DataTypeService.GetDataTypeDefinitionById(
|
||||
propertyType.DataTypeId).Name);
|
||||
|
||||
LogHelper.Warn<MultipleMediaPickerPropertyConverter>(error);
|
||||
LogHelper.Warn<LegacyMediaPickerPropertyConverter>(error);
|
||||
throw new Exception(error);
|
||||
}
|
||||
}
|
||||
@@ -264,4 +271,4 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
|
||||
Storages.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -126,10 +126,6 @@ namespace Umbraco.Web.PropertyEditors.ValueConverters
|
||||
if (propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MediaPicker2Alias))
|
||||
return true;
|
||||
|
||||
if (UmbracoConfig.For.UmbracoSettings().Content.EnablePropertyValueConverters)
|
||||
{
|
||||
return propertyType.PropertyEditorAlias.Equals(Constants.PropertyEditors.MediaPickerAlias);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ using Umbraco.Core.Models.PublishedContent;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Web.Models;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Web.Routing;
|
||||
using ContentType = umbraco.cms.businesslogic.ContentType;
|
||||
|
||||
@@ -24,8 +25,24 @@ namespace Umbraco.Web
|
||||
|
||||
public static Guid GetKey(this IPublishedContent content)
|
||||
{
|
||||
// fast
|
||||
var contentWithKey = content as IPublishedContentWithKey;
|
||||
return contentWithKey == null ? Guid.Empty : contentWithKey.Key;
|
||||
if (contentWithKey != null) return contentWithKey.Key;
|
||||
|
||||
// try to unwrap (models...)
|
||||
var contentWrapped = content as PublishedContentWrapped;
|
||||
while (contentWrapped != null)
|
||||
{
|
||||
content = contentWrapped.Unwrap();
|
||||
contentWrapped = content as PublishedContentWrapped;
|
||||
}
|
||||
|
||||
// again
|
||||
contentWithKey = content as IPublishedContentWithKey;
|
||||
if (contentWithKey != null) return contentWithKey.Key;
|
||||
|
||||
LogHelper.Debug(typeof(PublishedContentExtensions), string.Format("Could not get key for IPublishedContent with id {0} of type {1}.", content.Id, content.GetType().FullName));
|
||||
return Guid.Empty;
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -622,27 +639,9 @@ namespace Umbraco.Web
|
||||
/// <param name="recursive">When true, recurses up the content type tree to check inheritance; when false just calls IsDocumentType(this IPublishedContent content, string docTypeAlias).</param>
|
||||
/// <returns>True if the content is of the specified content type or a derived content type; otherwise false.</returns>
|
||||
public static bool IsDocumentType(this IPublishedContent content, string docTypeAlias, bool recursive)
|
||||
{
|
||||
if (content.IsDocumentType(docTypeAlias))
|
||||
return true;
|
||||
|
||||
if (recursive)
|
||||
return IsDocumentTypeRecursive(content, docTypeAlias);
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool IsDocumentTypeRecursive(IPublishedContent content, string docTypeAlias)
|
||||
{
|
||||
var contentTypeService = UmbracoContext.Current.Application.Services.ContentTypeService;
|
||||
var type = contentTypeService.GetContentType(content.DocumentTypeAlias);
|
||||
while (type != null && type.ParentId > 0)
|
||||
{
|
||||
type = contentTypeService.GetContentType(type.ParentId);
|
||||
if (type.Alias.InvariantEquals(docTypeAlias))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
{
|
||||
return content.DocumentTypeAlias.InvariantEquals(docTypeAlias) || (recursive && content.IsComposedOf(docTypeAlias));
|
||||
}
|
||||
|
||||
public static bool IsNull(this IPublishedContent content, string alias, bool recurse)
|
||||
{
|
||||
@@ -912,14 +911,14 @@ namespace Umbraco.Web
|
||||
|
||||
#region Axes: ancestors, ancestors-or-self
|
||||
|
||||
// as per XPath 1.0 specs §2.2,
|
||||
// as per XPath 1.0 specs §2.2,
|
||||
// - the ancestor axis contains the ancestors of the context node; the ancestors of the context node consist
|
||||
// of the parent of context node and the parent's parent and so on; thus, the ancestor axis will always
|
||||
// include the root node, unless the context node is the root node.
|
||||
// - the ancestor-or-self axis contains the context node and the ancestors of the context node; thus,
|
||||
// the ancestor axis will always include the root node.
|
||||
//
|
||||
// as per XPath 2.0 specs §3.2.1.1,
|
||||
// as per XPath 2.0 specs §3.2.1.1,
|
||||
// - the ancestor axis is defined as the transitive closure of the parent axis; it contains the ancestors
|
||||
// of the context node (the parent, the parent of the parent, and so on) - The ancestor axis includes the
|
||||
// root node of the tree in which the context node is found, unless the context node is the root node.
|
||||
@@ -929,7 +928,7 @@ namespace Umbraco.Web
|
||||
// the ancestor and ancestor-or-self axis are reverse axes ie they contain the context node or nodes that
|
||||
// are before the context node in document order.
|
||||
//
|
||||
// document order is defined by §2.4.1 as:
|
||||
// document order is defined by §2.4.1 as:
|
||||
// - the root node is the first node.
|
||||
// - every node occurs before all of its children and descendants.
|
||||
// - the relative order of siblings is the order in which they occur in the children property of their parent node.
|
||||
@@ -1240,12 +1239,12 @@ namespace Umbraco.Web
|
||||
}
|
||||
|
||||
|
||||
// as per XPath 1.0 specs §2.2,
|
||||
// as per XPath 1.0 specs §2.2,
|
||||
// - the descendant axis contains the descendants of the context node; a descendant is a child or a child of a child and so on; thus
|
||||
// the descendant axis never contains attribute or namespace nodes.
|
||||
// - the descendant-or-self axis contains the context node and the descendants of the context node.
|
||||
//
|
||||
// as per XPath 2.0 specs §3.2.1.1,
|
||||
// as per XPath 2.0 specs §3.2.1.1,
|
||||
// - the descendant axis is defined as the transitive closure of the child axis; it contains the descendants of the context node (the
|
||||
// children, the children of the children, and so on).
|
||||
// - the descendant-or-self axis contains the context node and the descendants of the context node.
|
||||
@@ -1253,7 +1252,7 @@ namespace Umbraco.Web
|
||||
// the descendant and descendant-or-self axis are forward axes ie they contain the context node or nodes that are after the context
|
||||
// node in document order.
|
||||
//
|
||||
// document order is defined by §2.4.1 as:
|
||||
// document order is defined by §2.4.1 as:
|
||||
// - the root node is the first node.
|
||||
// - every node occurs before all of its children and descendants.
|
||||
// - the relative order of siblings is the order in which they occur in the children property of their parent node.
|
||||
|
||||
@@ -70,6 +70,7 @@ namespace Umbraco.Web.Routing
|
||||
// test for collisions
|
||||
var uri = new Uri(url.TrimEnd('/'), UriKind.RelativeOrAbsolute);
|
||||
if (uri.IsAbsoluteUri == false) uri = uri.MakeAbsolute(UmbracoContext.Current.CleanedUmbracoUrl);
|
||||
uri = UriUtility.UriToUmbraco(uri);
|
||||
var pcr = new PublishedContentRequest(uri, UmbracoContext.Current.RoutingContext, UmbracoConfig.For.UmbracoSettings().WebRouting, s => Roles.Provider.GetRolesForUser(s));
|
||||
pcr.Engine.TryRouteRequest();
|
||||
|
||||
|
||||
@@ -63,17 +63,29 @@ namespace Umbraco.Web.Security.Identity
|
||||
return null;
|
||||
}
|
||||
|
||||
var identity = new UmbracoBackOfficeIdentity(decrypt);
|
||||
|
||||
var ticket = new AuthenticationTicket(identity, new AuthenticationProperties
|
||||
try
|
||||
{
|
||||
ExpiresUtc = decrypt.Expiration.ToUniversalTime(),
|
||||
IssuedUtc = decrypt.IssueDate.ToUniversalTime(),
|
||||
IsPersistent = decrypt.IsPersistent,
|
||||
AllowRefresh = true
|
||||
});
|
||||
var identity = new UmbracoBackOfficeIdentity(decrypt);
|
||||
|
||||
return ticket;
|
||||
var ticket = new AuthenticationTicket(identity, new AuthenticationProperties
|
||||
{
|
||||
ExpiresUtc = decrypt.Expiration.ToUniversalTime(),
|
||||
IssuedUtc = decrypt.IssueDate.ToUniversalTime(),
|
||||
IsPersistent = decrypt.IsPersistent,
|
||||
AllowRefresh = true
|
||||
});
|
||||
|
||||
return ticket;
|
||||
}
|
||||
catch (JsonReaderException)
|
||||
{
|
||||
//catch this and return null if the json is invalid
|
||||
//NOTE: This will happen when running on local host and developing on 7.6 and 7.7+ because 7.7 has a different
|
||||
// auth ticket format.
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,16 +58,15 @@ namespace Umbraco.Web.Trees
|
||||
});
|
||||
|
||||
foreach (var file in files)
|
||||
{
|
||||
{
|
||||
var withoutExt = Path.GetFileNameWithoutExtension(file);
|
||||
if (withoutExt.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
var name = Path.GetFileName(file);
|
||||
var node = CreateTreeNode(HttpUtility.UrlEncode(file), path, queryStrings, name, FileIcon, false);
|
||||
OnRenderFileNode(ref node);
|
||||
if (node != null)
|
||||
nodes.Add(node);
|
||||
}
|
||||
if (withoutExt.IsNullOrWhiteSpace()) continue;
|
||||
|
||||
var name = Path.GetFileName(file);
|
||||
var node = CreateTreeNode(HttpUtility.UrlEncode(file), path, queryStrings, name, FileIcon, false);
|
||||
OnRenderFileNode(ref node);
|
||||
if (node != null)
|
||||
nodes.Add(node);
|
||||
}
|
||||
|
||||
return nodes;
|
||||
@@ -91,7 +90,7 @@ namespace Umbraco.Web.Trees
|
||||
}
|
||||
|
||||
var path = string.IsNullOrEmpty(id) == false && id != Constants.System.Root.ToInvariantString()
|
||||
? System.Web.HttpUtility.UrlDecode(id).TrimStart("/")
|
||||
? HttpUtility.UrlDecode(id).TrimStart("/")
|
||||
: "";
|
||||
|
||||
var isFile = FileSystem.FileExists(path);
|
||||
|
||||
@@ -8,14 +8,14 @@ namespace Umbraco.Web.Trees
|
||||
/// Tree for displaying partial view macros in the developer app
|
||||
/// </summary>
|
||||
[Tree(Constants.Applications.Developer, "partialViewMacros", null, sortOrder: 6)]
|
||||
public class PartialViewMacrosTreeController : FileSystemTreeController
|
||||
public class PartialViewMacrosTreeController : FileSystemTreeController
|
||||
{
|
||||
protected override IFileSystem2 FileSystem
|
||||
{
|
||||
get { return FileSystemProviderManager.Current.MacroPartialsFileSystem; }
|
||||
}
|
||||
|
||||
private static readonly string[] ExtensionsStatic = { "cshtml" };
|
||||
private static readonly string[] ExtensionsStatic = {"cshtml"};
|
||||
|
||||
protected override string[] Extensions
|
||||
{
|
||||
|
||||
@@ -8,14 +8,14 @@ namespace Umbraco.Web.Trees
|
||||
/// Tree for displaying partial views in the settings app
|
||||
/// </summary>
|
||||
[Tree(Constants.Applications.Settings, "partialViews", null, sortOrder: 2)]
|
||||
public class PartialViewsTreeController : FileSystemTreeController
|
||||
public class PartialViewsTreeController : FileSystemTreeController
|
||||
{
|
||||
protected override IFileSystem2 FileSystem
|
||||
{
|
||||
get { return FileSystemProviderManager.Current.PartialViewsFileSystem; }
|
||||
}
|
||||
protected override IFileSystem2 FileSystem
|
||||
{
|
||||
get { return FileSystemProviderManager.Current.PartialViewsFileSystem; }
|
||||
}
|
||||
|
||||
private static readonly string[] ExtensionsStatic = { "cshtml" };
|
||||
private static readonly string[] ExtensionsStatic = {"cshtml"};
|
||||
|
||||
protected override string[] Extensions
|
||||
{
|
||||
|
||||
@@ -411,7 +411,7 @@
|
||||
<Compile Include="PropertyEditors\ValueConverters\MediaPickerPropertyConverter.cs" />
|
||||
<Compile Include="PropertyEditors\ValueConverters\MemberPickerPropertyConverter.cs" />
|
||||
<Compile Include="PropertyEditors\ValueConverters\MultiNodeTreePickerPropertyConverter.cs" />
|
||||
<Compile Include="PropertyEditors\ValueConverters\MultipleMediaPickerPropertyConverter.cs" />
|
||||
<Compile Include="PropertyEditors\ValueConverters\LegacyMediaPickerPropertyConverter.cs" />
|
||||
<Compile Include="PublishedContentQueryExtensions.cs" />
|
||||
<Compile Include="Routing\RedirectTrackingEventHandler.cs" />
|
||||
<Compile Include="Editors\RedirectUrlManagementController.cs" />
|
||||
|
||||
@@ -1393,15 +1393,25 @@ namespace umbraco
|
||||
/// <returns>An XpathNodeIterator containing the current page as Xml.</returns>
|
||||
public static XPathNodeIterator GetXmlNodeCurrent()
|
||||
{
|
||||
var pageId = "";
|
||||
|
||||
try
|
||||
{
|
||||
var nav = Umbraco.Web.UmbracoContext.Current.ContentCache.GetXPathNavigator();
|
||||
nav.MoveToId(HttpContext.Current.Items["pageID"].ToString());
|
||||
var pageIdItem = HttpContext.Current.Items["pageID"];
|
||||
|
||||
if (pageIdItem == null)
|
||||
{
|
||||
throw new NullReferenceException("pageID not found in the current HTTP context");
|
||||
}
|
||||
|
||||
pageId = pageIdItem.ToString();
|
||||
nav.MoveToId(pageId);
|
||||
return nav.Select(".");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Error<library>("Could not retrieve current xml node", ex);
|
||||
LogHelper.Error<library>(string.Concat("Could not retrieve current xml node for page Id ",pageId), ex);
|
||||
}
|
||||
|
||||
XmlDocument xd = new XmlDocument();
|
||||
|
||||
Reference in New Issue
Block a user