diff --git a/components/umbraco.webservices/MediaService.asmx.cs b/components/umbraco.webservices/MediaService.asmx.cs index 46f023a2a2..cd7faba85d 100644 --- a/components/umbraco.webservices/MediaService.asmx.cs +++ b/components/umbraco.webservices/MediaService.asmx.cs @@ -11,6 +11,11 @@ using System.Xml; using umbraco.cms.businesslogic.web; using umbraco.cms; using umbraco.cms.businesslogic.member; +using umbraco.cms.businesslogic.media; +using System.IO; +using umbraco.cms.businesslogic.property; +using umbraco.IO; +using System.Text.RegularExpressions; namespace umbraco.webservices.media { @@ -28,6 +33,305 @@ namespace umbraco.webservices.media return Services.MediaService; } } + + [WebMethod] + public void update(mediaCarrier carrier, string username, string password) { + + Authenticate(username, password); + + if (carrier == null) throw new Exception("No carrier specified"); + + Media m = new Media(carrier.Id); + + if (carrier.MediaProperties != null) + { + foreach (mediaProperty updatedproperty in carrier.MediaProperties) + { + if (!(updatedproperty.Key.ToLower().Equals("umbracofile"))) + { + Property property = m.getProperty(updatedproperty.Key); + if (property == null) + throw new Exception("property " + updatedproperty.Key + " was not found"); + property.Value = updatedproperty.PropertyValue; + } + } + } + + m.Save(); + } + + [WebMethod] + public int create(mediaCarrier carrier, string username, string password) + { + + Authenticate(username, password); + + if (carrier == null) throw new Exception("No carrier specified"); + if (carrier.ParentId == 0) throw new Exception("Media needs a parent"); + if (carrier.TypeId == 0) throw new Exception("Type must be specified"); + if (carrier.Text == null || carrier.Text.Length == 0) carrier.Text = "unnamed"; + + umbraco.BusinessLogic.User user = GetUser(username, password); + + + MediaType mt = new MediaType(carrier.TypeId); + + Media m = Media.MakeNew(carrier.Text, mt, user, carrier.ParentId); + + if (carrier.MediaProperties != null) + { + foreach (mediaProperty updatedproperty in carrier.MediaProperties) + { + if(!(updatedproperty.Key.ToLower().Equals("umbracofile"))) { + Property property = m.getProperty(updatedproperty.Key); + if (property == null) + throw new Exception("property " + updatedproperty.Key + " was not found"); + property.Value = updatedproperty.PropertyValue; + } + } + } + + return m.Id; + } + + [WebMethod] + public void delete(int id, string username, string password) + { + Authenticate(username, password); + + Media m = new Media(id); + + if (m.HasChildren) + throw new Exception("Cannot delete Media " + id + " as it has child nodes"); + + Property p = m.getProperty("umbracoFile"); + if (p != null) + { + if (!(p.Value == System.DBNull.Value)) + { + string fileName = (string)p.Value; + string filePath = umbraco.IO.IOHelper.MapPath(fileName); + if (File.Exists(filePath)) + { + File.Delete(filePath); + } + } + } + + m.delete(); + + } + + [WebMethod] + public void writeContents(int id, string filename, Byte[] contents, string username, string password) + { + Authenticate(username, password); + + filename = filename.Replace("/", IOHelper.DirSepChar.ToString()); + filename = filename.Replace(@"\", IOHelper.DirSepChar.ToString()); + filename = filename.Substring(filename.LastIndexOf(IOHelper.DirSepChar) + 1, filename.Length - filename.LastIndexOf(IOHelper.DirSepChar) - 1).ToLower(); + + Media m = new Media(id); + + + System.IO.Directory.CreateDirectory(IOHelper.MapPath(SystemDirectories.Media + "/" + m.getProperty("umbracoFile").Id )); + string fullFilePath = IOHelper.MapPath(SystemDirectories.Media + "/" + m.getProperty("umbracoFile").Id + "/" + filename); + + File.WriteAllBytes(fullFilePath, contents); + + FileInfo f = new FileInfo(fullFilePath); + m.getProperty("umbracoFile").Value = SystemDirectories.Media + "/" + filename; + m.getProperty("umbracoExtension").Value = f.Extension.Replace(".",""); + m.getProperty("umbracoBytes").Value = f.Length.ToString(); + + + } + + [WebMethod] + public mediaCarrier read(int id, string username, string password) + { + Authenticate(username, password); + + + Media m = new Media(id); + + + return createCarrier(m); + } + + [WebMethod] + public List readList(int parentId, string username, string password) + { + Authenticate(username, password); + + List carriers = new List(); + Media[] mediaList; + + if (parentId < 1) + { + mediaList = Media.GetRootMedias(); + } + else + { + Media m = new Media(parentId); + mediaList = m.Children; + } + + foreach (Media child in mediaList) + { + carriers.Add(createCarrier(child)); + } + + return carriers; + } + private mediaCarrier createCarrier(Media m) + { + mediaCarrier carrier = new mediaCarrier(); + carrier.Id = m.Id; + carrier.Text = m.Text; + + carrier.TypeAlias = m.ContentType.Alias; + carrier.TypeId = m.ContentType.Id; + + carrier.CreateDateTime = m.CreateDateTime; + carrier.HasChildren = m.HasChildren; + carrier.Level = m.Level; + + carrier.Path = m.Path; + carrier.SortOrder = m.sortOrder; + + try + { + carrier.ParentId = m.Parent.Id; + } + catch + { + carrier.ParentId = -1; + } + + foreach(Property p in m.getProperties) { + + mediaProperty carrierprop = new mediaProperty(); + + if (p.Value == System.DBNull.Value) + { + carrierprop.PropertyValue = ""; + } + else + { + carrierprop.PropertyValue = p.Value; + } + + carrierprop.Key = p.PropertyType.Alias; + carrier.MediaProperties.Add(carrierprop); + + } + + return carrier; + } + } + + + + [Serializable] + [XmlType(Namespace = "http://umbraco.org/webservices/")] + public class mediaCarrier + { + + public int Id + { + get; + set; + } + public string Text + { + get; + set; + + } + + public string TypeAlias + { + get; + set; + } + + public int TypeId + { + get; + set; + } + + public DateTime CreateDateTime + { + get; + set; + } + + public Boolean HasChildren + { + get; + set; + } + + public int Level + { + get; + set; + } + + public int ParentId + { + get; + set; + + } + + public string Path + { + get; + set; + } + + public int SortOrder + { + get; + set; + } + + public List MediaProperties + { + get; + set; + } + + public mediaCarrier() + { + MediaProperties = new List(); + } + } + + [XmlType(Namespace = "http://umbraco.org/webservices/")] + public class mediaProperty + { + public mediaProperty() + { + } + + public object PropertyValue + { + get; + set; + } + + public string Key + { + get; + set; + } + } + + }