diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/RepositoryElement.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/RepositoryElement.cs
index b7a1157c40..cf73a8f62c 100644
--- a/src/Umbraco.Core/Configuration/UmbracoSettings/RepositoryElement.cs
+++ b/src/Umbraco.Core/Configuration/UmbracoSettings/RepositoryElement.cs
@@ -38,8 +38,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
get
{
var prop = Properties["webserviceurl"];
- var repoUrl = this[prop] as ConfigurationElement;
- return (repoUrl != null && repoUrl.ElementInformation.IsPresent);
+ return (string) prop.DefaultValue != (string) this[prop];
}
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/ourpackagerrepository.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/ourpackagerrepository.resource.js
index 053aaf1394..37a8a9b2de 100644
--- a/src/Umbraco.Web.UI.Client/src/common/resources/ourpackagerrepository.resource.js
+++ b/src/Umbraco.Web.UI.Client/src/common/resources/ourpackagerrepository.resource.js
@@ -13,7 +13,7 @@ function ourPackageRepositoryResource($q, $http, umbDataFormatter, umbRequestHel
getDetails: function (packageId) {
return umbRequestHelper.resourcePromise(
- $http.get(baseurl + "/" + packageId),
+ $http.get(baseurl + "/" + packageId + "?version=" + Umbraco.Sys.ServerVariables.application.version),
'Failed to get package details');
},
diff --git a/src/Umbraco.Web/Editors/PackageInstallController.cs b/src/Umbraco.Web/Editors/PackageInstallController.cs
index b15bcd767e..d982d703cc 100644
--- a/src/Umbraco.Web/Editors/PackageInstallController.cs
+++ b/src/Umbraco.Web/Editors/PackageInstallController.cs
@@ -474,7 +474,7 @@ namespace Umbraco.Web.Editors
//our repo guid
using (var our = Repository.getByGuid("65194810-1f85-11dd-bd0b-0800200c9a66"))
{
- path = our.fetch(packageGuid, Security.CurrentUser.Id);
+ path = our.GetPackageFile(packageGuid, Security.CurrentUser.Id, UmbracoVersion.Current);
}
}
diff --git a/src/umbraco.cms/businesslogic/Packager/Repositories/Repository.cs b/src/umbraco.cms/businesslogic/Packager/Repositories/Repository.cs
index 3ffa0e9054..6faf9d519a 100644
--- a/src/umbraco.cms/businesslogic/Packager/Repositories/Repository.cs
+++ b/src/umbraco.cms/businesslogic/Packager/Repositories/Repository.cs
@@ -141,12 +141,12 @@ namespace umbraco.cms.businesslogic.packager.repositories
return repository;
}
+
+
//shortcut method to download pack from repo and place it on the server...
public string fetch(string packageGuid)
{
-
return fetch(packageGuid, string.Empty);
-
}
public string fetch(string packageGuid, int userId)
@@ -158,6 +158,40 @@ namespace umbraco.cms.businesslogic.packager.repositories
return fetch(packageGuid);
}
+ ///
+ /// Used to get the correct package file from the repo for the current umbraco version
+ ///
+ ///
+ ///
+ ///
+ ///
+ public string GetPackageFile(string packageGuid, int userId, System.Version currentUmbracoVersion)
+ {
+ // log
+ Audit.Add(AuditTypes.PackagerInstall,
+ string.Format("Package {0} fetched from {1}", packageGuid, this.Guid),
+ userId, -1);
+
+ var fileByteArray = Webservice.GetPackageFile(packageGuid, currentUmbracoVersion.ToString(3));
+
+ //successfull
+ if (fileByteArray.Length > 0)
+ {
+ // Check for package directory
+ if (Directory.Exists(IOHelper.MapPath(Settings.PackagerRoot)) == false)
+ Directory.CreateDirectory(IOHelper.MapPath(Settings.PackagerRoot));
+
+ using (var fs1 = new FileStream(IOHelper.MapPath(Settings.PackagerRoot + Path.DirectorySeparatorChar + packageGuid + ".umb"), FileMode.Create))
+ {
+ fs1.Write(fileByteArray, 0, fileByteArray.Length);
+ fs1.Close();
+ return "packages\\" + packageGuid + ".umb";
+ }
+ }
+
+ return "";
+ }
+
public bool HasConnection()
{
@@ -199,22 +233,37 @@ namespace umbraco.cms.businesslogic.packager.repositories
}
}
-
+
+
+ ///
+ /// This goes and fetches the Byte array for the package from OUR, but it's pretty strange
+ ///
+ ///
+ /// The package ID for the package file to be returned
+ ///
+ ///
+ /// This is a strange Umbraco version parameter - but it's not really an umbraco version, it's a special/odd version format like Version41
+ /// but it's actually not used for the 7.5+ package installs so it's obsolete/unused.
+ ///
+ ///
public string fetch(string packageGuid, string key)
{
byte[] fileByteArray = new byte[0];
if (key == string.Empty)
- {
+ {
+ //SD: this is odd, not sure why it returns a different package depending on the legacy xml schema but I'll leave it for now
if (UmbracoConfig.For.UmbracoSettings().Content.UseLegacyXmlSchema)
- fileByteArray = this.Webservice.fetchPackage(packageGuid);
+ fileByteArray = Webservice.fetchPackage(packageGuid);
else
- fileByteArray = this.Webservice.fetchPackageByVersion(packageGuid, Version.Version41);
+ {
+ fileByteArray = Webservice.fetchPackageByVersion(packageGuid, Version.Version41);
+ }
}
else
{
- fileByteArray = this.Webservice.fetchProtectedPackage(packageGuid, key);
+ fileByteArray = Webservice.fetchProtectedPackage(packageGuid, key);
}
//successfull
diff --git a/src/umbraco.cms/businesslogic/Packager/Repositories/RepositoryWebservice.cs b/src/umbraco.cms/businesslogic/Packager/Repositories/RepositoryWebservice.cs
index ccf8566687..a2da17dd76 100644
--- a/src/umbraco.cms/businesslogic/Packager/Repositories/RepositoryWebservice.cs
+++ b/src/umbraco.cms/businesslogic/Packager/Repositories/RepositoryWebservice.cs
@@ -36,6 +36,8 @@ namespace umbraco.cms.businesslogic.packager.repositories
private System.Threading.SendOrPostCallback authenticateOperationCompleted;
+ private System.Threading.SendOrPostCallback GetPackageFileOperationCompleted;
+
private System.Threading.SendOrPostCallback fetchPackageByVersionOperationCompleted;
private System.Threading.SendOrPostCallback fetchPackageOperationCompleted;
@@ -83,6 +85,9 @@ namespace umbraco.cms.businesslogic.packager.repositories
///
public event authenticateCompletedEventHandler authenticateCompleted;
+ ///
+ public event GetPackageFileCompletedEventHandler GetPackageFileCompleted;
+
///
public event fetchPackageByVersionCompletedEventHandler fetchPackageByVersionCompleted;
@@ -533,6 +538,76 @@ namespace umbraco.cms.businesslogic.packager.repositories
}
}
+
+
+
+
+
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://packages.umbraco.org/webservices/GetPackageFile", RequestNamespace = "http://packages.umbraco.org/webservices/", ResponseNamespace = "http://packages.umbraco.org/webservices/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ [return: System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")]
+ public byte[] GetPackageFile(string packageGuid, string umbracoVersion)
+ {
+ object[] results = this.Invoke("GetPackageFile", new object[] {
+ packageGuid,
+ umbracoVersion});
+ return ((byte[])(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginfetchPackageByVersion(string packageGuid, string umbracoVersion, System.AsyncCallback callback, object asyncState)
+ {
+ return this.BeginInvoke("GetPackageFile", new object[] {
+ packageGuid,
+ umbracoVersion}, callback, asyncState);
+ }
+
+ ///
+ public byte[] EndGetPackageFile(System.IAsyncResult asyncResult)
+ {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((byte[])(results[0]));
+ }
+
+ ///
+ public void GetPackageFileAsync(string packageGuid, string umbracoVersion)
+ {
+ this.GetPackageFileAsync(packageGuid, umbracoVersion, null);
+ }
+
+ ///
+ public void GetPackageFileAsync(string packageGuid, string umbracoVersion, object userState)
+ {
+ if ((this.GetPackageFileOperationCompleted == null))
+ {
+ this.GetPackageFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPackageFileOperationCompleted);
+ }
+ this.InvokeAsync("GetPackageFile", new object[] {
+ packageGuid,
+ umbracoVersion}, this.GetPackageFileOperationCompleted, userState);
+ }
+
+ private void OnGetPackageFileOperationCompleted(object arg)
+ {
+ if ((this.GetPackageFileCompleted != null))
+ {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.GetPackageFileCompleted(this, new GetPackageFileCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
///
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://packages.umbraco.org/webservices/fetchPackageByVersion", RequestNamespace = "http://packages.umbraco.org/webservices/", ResponseNamespace = "http://packages.umbraco.org/webservices/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute(DataType = "base64Binary")]
@@ -1382,7 +1457,9 @@ namespace umbraco.cms.businesslogic.packager.repositories
///
Version4,
- ///
+ ///
+ /// This is apparently the version number we pass in for all installs
+ ///
Version41,
///
@@ -1682,9 +1759,40 @@ namespace umbraco.cms.businesslogic.packager.repositories
}
}
+
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
- public delegate void fetchPackageByVersionCompletedEventHandler(object sender, fetchPackageByVersionCompletedEventArgs e);
+ public delegate void GetPackageFileCompletedEventHandler(object sender, GetPackageFileCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class GetPackageFileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
+ {
+
+ private object[] results;
+
+ internal GetPackageFileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState)
+ {
+ this.results = results;
+ }
+
+ ///
+ public byte[] Result
+ {
+ get
+ {
+ this.RaiseExceptionIfNecessary();
+ return ((byte[])(this.results[0]));
+ }
+ }
+ }
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
+ public delegate void fetchPackageByVersionCompletedEventHandler(object sender, fetchPackageByVersionCompletedEventArgs e);
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]