Implemented Media Web Service

[TFS Changeset #63870]
This commit is contained in:
darrenferguson
2010-02-09 16:05:48 +00:00
parent 851b565294
commit 98f11293fe

View File

@@ -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<mediaCarrier> readList(int parentId, string username, string password)
{
Authenticate(username, password);
List<mediaCarrier> carriers = new List<mediaCarrier>();
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<mediaProperty> MediaProperties
{
get;
set;
}
public mediaCarrier()
{
MediaProperties = new List<mediaProperty>();
}
}
[XmlType(Namespace = "http://umbraco.org/webservices/")]
public class mediaProperty
{
public mediaProperty()
{
}
public object PropertyValue
{
get;
set;
}
public string Key
{
get;
set;
}
}
}