Switched DMU web service to support XML and JSON so can be used by media dashboard aswell
Added dmu.ashx file in old plugin folder to add backwards compatability
This commit is contained in:
@@ -0,0 +1 @@
|
||||
<%@ WebHandler Language="C#" CodeBehind="MediaUploader.ashx.cs" Class="umbraco.presentation.umbraco.webservices.MediaUploader" %>
|
||||
@@ -4,7 +4,7 @@ Umbraco.Sys.registerNamespace("Umbraco.Controls");
|
||||
(function ($, Base, window, document, undefined) {
|
||||
|
||||
var itemMappingOptions = {
|
||||
'create': function(o) {
|
||||
'create': function (o) {
|
||||
var item = ko.mapping.fromJS(o.data);
|
||||
item.selected = ko.observable(false);
|
||||
item.toggleSelected = function (itm, e) {
|
||||
@@ -115,6 +115,14 @@ Umbraco.Sys.registerNamespace("Umbraco.Controls");
|
||||
items: ko.observableArray([]),
|
||||
queued: ko.observableArray([])
|
||||
});
|
||||
|
||||
self._viewModel.filtered = ko.computed(function () {
|
||||
return self._viewModel.items();
|
||||
return ko.utils.arrayFilter(this.items(), function (item) {
|
||||
return item.Name().toLowerCase().indexOf(self._viewModel.filterTerm()) > -1 ||
|
||||
item.Tags().toLowerCase().indexOf(self._viewModel.filterTerm()) > -1;
|
||||
});
|
||||
}, self._viewModel);
|
||||
|
||||
self._viewModel.selected = ko.computed(function() {
|
||||
return ko.utils.arrayFilter(this.items(), function(item) {
|
||||
@@ -301,15 +309,16 @@ Umbraco.Sys.registerNamespace("Umbraco.Controls");
|
||||
start: function (e, ui) {
|
||||
// Add dragging class to container
|
||||
$(".umbFolderBrowser .items").addClass("ui-sortable-dragging");
|
||||
|
||||
$(".umbFolderBrowser .items .ui-sortable-helper span").removeAttr("data-bind").text("Moving 1 item");
|
||||
},
|
||||
update: function (e, ui) {
|
||||
update: function (e, ui)
|
||||
{
|
||||
// Can't sort when filtered so just return
|
||||
if (self._viewModel.filterTerm().length > 0)
|
||||
return;
|
||||
|
||||
//var oldIndex = self._viewModel.items.indexOf(self._viewModel.tempItem());
|
||||
var newIndex = ui.item.index();
|
||||
|
||||
//TODO: Don't allow sorting on a filtered view
|
||||
|
||||
$(".umbFolderBrowser .items .selected").sort(function (a,b) {
|
||||
return parseInt($(a).data("order")) > parseInt($(b).data("order")) ? 1 : -1;
|
||||
}).each(function(idx, itm) {
|
||||
@@ -327,7 +336,15 @@ Umbraco.Sys.registerNamespace("Umbraco.Controls");
|
||||
stop: function (e, ui) {
|
||||
// Remove dragging class from container
|
||||
$(".umbFolderBrowser .items").removeClass("ui-sortable-dragging");
|
||||
//TODO: Update on server
|
||||
|
||||
if (self._viewModel.filterTerm().length > 0) {
|
||||
$(this).sortable("cancel");
|
||||
alert("Can't sort items which have been filtered");
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO: Update on server
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.UI.WebControls;
|
||||
using ClientDependency.Core;
|
||||
using umbraco.BasePages;
|
||||
using umbraco.BusinessLogic;
|
||||
using umbraco.IO;
|
||||
using umbraco.cms.businesslogic.media;
|
||||
|
||||
@@ -113,7 +116,7 @@ namespace Umbraco.Web.UI.Controls
|
||||
sb.Append("<div class='filter'>Filter: <input type='text' data-bind=\"value: filterTerm, valueUpdate: 'afterkeydown'\" /></div>");
|
||||
|
||||
// Create thumbnails container
|
||||
sb.Append("<ul class='items' data-bind='foreach: items'>" +
|
||||
sb.Append("<ul class='items' data-bind='foreach: filtered'>" +
|
||||
"<li data-bind=\"attr: { 'data-id': Id, 'data-order': $index() }, css: { selected: selected() }, event: { mousedown: toggleSelected, contextmenu: toggleSelected }\"><div><span class='img'><img data-bind='attr: { src: ThumbnailUrl }' /></span><span data-bind='text: Name'></span></div></li>" +
|
||||
"</ul>");
|
||||
|
||||
@@ -121,11 +124,21 @@ namespace Umbraco.Web.UI.Controls
|
||||
|
||||
Controls.Add(panel);
|
||||
|
||||
var user = User.GetCurrent();
|
||||
var ticket = new FormsAuthenticationTicket(1,
|
||||
user != null ? user.LoginName : "",
|
||||
DateTime.Now,
|
||||
DateTime.Now,
|
||||
false,
|
||||
"");
|
||||
|
||||
Page.ClientScript.RegisterStartupScript(typeof(FolderBrowser),
|
||||
"RegisterFolderBrowsers",
|
||||
string.Format("$(function () {{ $(\".umbFolderBrowser\").folderBrowser({{ umbracoPath : '{0}', basePath : '{1}' }}); }});",
|
||||
string.Format("$(function () {{ $(\".umbFolderBrowser\").folderBrowser({{ umbracoPath : '{0}', basePath : '{1}', username: '{2}', ticket: '{3}' }}); }});",
|
||||
IOHelper.ResolveUrl(SystemDirectories.Umbraco),
|
||||
IOHelper.ResolveUrl(SystemDirectories.Base)),
|
||||
IOHelper.ResolveUrl(SystemDirectories.Base),
|
||||
user != null ? user.LoginName : "",
|
||||
FormsAuthentication.Encrypt(ticket)),
|
||||
true);
|
||||
}
|
||||
|
||||
|
||||
@@ -45,19 +45,21 @@ namespace Umbraco.Web.WebServices
|
||||
|
||||
var fileUrl = fileProp != null ? fileProp.Value.ToString() : "";
|
||||
var thumbUrl = ThumbnailProviderManager.Current.GetThumbnailUrl(fileUrl);
|
||||
|
||||
data.Add(new
|
||||
var item = new
|
||||
{
|
||||
Id = child.Id,
|
||||
Path = child.Path,
|
||||
Name = child.Text,
|
||||
Tags = string.Join(",", Tag.GetTags(child.Id).Select(x => x.TagCaption)),
|
||||
MediaTypeAlias = child.ContentType.Alias,
|
||||
EditUrl = string.Format("editMedia.aspx?id={0}", child.Id),
|
||||
FileUrl = fileUrl,
|
||||
ThumbnailUrl = !string.IsNullOrEmpty(thumbUrl)
|
||||
? thumbUrl
|
||||
ThumbnailUrl = !string.IsNullOrEmpty(thumbUrl)
|
||||
? thumbUrl
|
||||
: IOHelper.ResolveUrl(SystemDirectories.Umbraco + "/images/thumbnails/" + child.ContentType.Thumbnail)
|
||||
});
|
||||
};
|
||||
|
||||
data.Add(item);
|
||||
}
|
||||
|
||||
return new JavaScriptSerializer().Serialize(data);
|
||||
|
||||
@@ -6,8 +6,10 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Web.Configuration;
|
||||
using System.Web.Script.Serialization;
|
||||
using System.Web.Security;
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
using umbraco.BusinessLogic;
|
||||
using umbraco.businesslogic.Exceptions;
|
||||
using umbraco.cms.businesslogic.media;
|
||||
@@ -25,75 +27,100 @@ namespace umbraco.presentation.umbraco.webservices
|
||||
|
||||
public void ProcessRequest(HttpContext context)
|
||||
{
|
||||
context.Response.Clear();
|
||||
context.Response.ContentType = @"text\xml";
|
||||
context.Response.Charset = "UTF-8";
|
||||
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
|
||||
context.Response.Cache.SetAllowResponseInBrowserHistory(true);
|
||||
MediaResponse response = null;
|
||||
|
||||
var xmlTextWriter = new XmlTextWriter(context.Response.OutputStream, Encoding.UTF8);
|
||||
xmlTextWriter.WriteStartDocument();
|
||||
xmlTextWriter.WriteStartElement("response");
|
||||
var action = context.Request["action"];
|
||||
|
||||
string action = context.Request["action"];
|
||||
|
||||
if (IsValidRequest(context, xmlTextWriter) && !string.IsNullOrEmpty(action))
|
||||
if (IsValidRequest(context) && !string.IsNullOrEmpty(action))
|
||||
{
|
||||
switch (action.ToLower())
|
||||
{
|
||||
case "config":
|
||||
ProcessConfigRequest(context, xmlTextWriter);
|
||||
response = ProcessConfigRequest(context);
|
||||
break;
|
||||
case "folderlist":
|
||||
ProcessFolderListRequest(context, xmlTextWriter);
|
||||
response = ProcessFolderListRequest(context);
|
||||
break;
|
||||
case "upload":
|
||||
ProcessUploadRequest(context, xmlTextWriter);
|
||||
response = ProcessUploadRequest(context);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
xmlTextWriter.WriteEndElement();
|
||||
xmlTextWriter.WriteEndDocument();
|
||||
xmlTextWriter.Flush();
|
||||
xmlTextWriter.Close();
|
||||
// Set success flag
|
||||
if (response != null)
|
||||
response.success = true;
|
||||
else
|
||||
response = new MediaResponse { success = false };
|
||||
|
||||
context.Response.Clear();
|
||||
context.Response.Charset = "UTF-8";
|
||||
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
|
||||
context.Response.Cache.SetAllowResponseInBrowserHistory(true);
|
||||
|
||||
var format = context.Request["format"];
|
||||
switch (format)
|
||||
{
|
||||
case "json":
|
||||
// Format as JSON
|
||||
context.Response.ContentType = @"application/json";
|
||||
|
||||
context.Response.Write(new JavaScriptSerializer().Serialize(response));
|
||||
|
||||
break;
|
||||
default:
|
||||
// Format as XML
|
||||
context.Response.ContentType = @"text/xml";
|
||||
|
||||
var serializer = new XmlSerializer(response.GetType());
|
||||
serializer.Serialize(context.Response.OutputStream, response);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
context.Response.End();
|
||||
}
|
||||
|
||||
public void ProcessConfigRequest(HttpContext context, XmlTextWriter xmlTextWriter)
|
||||
public ConfigResponse ProcessConfigRequest(HttpContext context)
|
||||
{
|
||||
xmlTextWriter.WriteElementString("displayName", new User(context.Request["username"]).Name);
|
||||
xmlTextWriter.WriteElementString("umbracoPath", VirtualPathUtility.ToAbsolute(GlobalSettings.Path));
|
||||
xmlTextWriter.WriteElementString("maxRequestLength", GetMaxRequestLength().ToString());
|
||||
return new ConfigResponse
|
||||
{
|
||||
displayName = new User(context.Request["username"]).Name,
|
||||
umbracoPath = VirtualPathUtility.ToAbsolute(GlobalSettings.Path),
|
||||
maxRequestLength = GetMaxRequestLength()
|
||||
};
|
||||
}
|
||||
|
||||
public void ProcessFolderListRequest(HttpContext context, XmlTextWriter xmlTextWriter)
|
||||
public FolderListResponse ProcessFolderListRequest(HttpContext context)
|
||||
{
|
||||
xmlTextWriter.WriteStartElement("folder");
|
||||
var response = new FolderListResponse
|
||||
{
|
||||
folder = new FolderListItem()
|
||||
};
|
||||
|
||||
var startMediaId = AuthenticatedUser.StartMediaId;
|
||||
if (startMediaId < 1)
|
||||
{
|
||||
xmlTextWriter.WriteAttributeString("id", "-1");
|
||||
xmlTextWriter.WriteAttributeString("name", "Media");
|
||||
response.folder.id = -1;
|
||||
response.folder.name = "Media";
|
||||
|
||||
CreateMediaTree(Media.GetRootMedias(), xmlTextWriter);
|
||||
CreateMediaTree(Media.GetRootMedias(), response.folder);
|
||||
}
|
||||
else
|
||||
{
|
||||
var root = new Media(startMediaId);
|
||||
|
||||
xmlTextWriter.WriteAttributeString("id", root.Id.ToString());
|
||||
xmlTextWriter.WriteAttributeString("name", root.Text);
|
||||
response.folder.id = root.Id;
|
||||
response.folder.name = root.Text;
|
||||
|
||||
CreateMediaTree(root.Children, xmlTextWriter);
|
||||
CreateMediaTree(root.Children, response.folder);
|
||||
}
|
||||
|
||||
xmlTextWriter.WriteEndElement();
|
||||
return response;
|
||||
}
|
||||
|
||||
public void ProcessUploadRequest(HttpContext context, XmlTextWriter xmlTextWriter)
|
||||
public UploadResponse ProcessUploadRequest(HttpContext context)
|
||||
{
|
||||
int parentNodeId;
|
||||
if (int.TryParse(context.Request["parentNodeId"], out parentNodeId) && context.Request.Files.Count > 0)
|
||||
@@ -158,11 +185,13 @@ namespace umbraco.presentation.umbraco.webservices
|
||||
// log error
|
||||
Log.Add(LogTypes.Error, -1, "Parent node id is in incorrect format");
|
||||
}
|
||||
|
||||
return new UploadResponse();
|
||||
}
|
||||
|
||||
#region Helper Methods
|
||||
|
||||
private bool IsValidRequest(HttpContext context, XmlTextWriter xmlTextWriter)
|
||||
private bool IsValidRequest(HttpContext context)
|
||||
{
|
||||
// check for secure connection
|
||||
if (GlobalSettings.UseSSL && !context.Request.IsSecureConnection)
|
||||
@@ -196,25 +225,25 @@ namespace umbraco.presentation.umbraco.webservices
|
||||
AuthenticatedUser = user;
|
||||
}
|
||||
|
||||
xmlTextWriter.WriteAttributeString("success", isValid.ToString().ToLower());
|
||||
|
||||
return isValid;
|
||||
}
|
||||
|
||||
private void CreateMediaTree(IEnumerable<Media> nodes, XmlWriter xmlTextWriter)
|
||||
private void CreateMediaTree(IEnumerable<Media> nodes, FolderListItem folder)
|
||||
{
|
||||
foreach (var media in nodes.Where(media => media != null && media.ContentType != null && media.ContentType.Alias == "Folder"))
|
||||
{
|
||||
xmlTextWriter.WriteStartElement("folder");
|
||||
xmlTextWriter.WriteAttributeString("id", media.Id.ToString());
|
||||
xmlTextWriter.WriteAttributeString("name", media.Text);
|
||||
var subFolder = new FolderListItem
|
||||
{
|
||||
id = media.Id,
|
||||
name = media.Text
|
||||
};
|
||||
|
||||
if (media.HasChildren)
|
||||
{
|
||||
CreateMediaTree(media.Children, xmlTextWriter);
|
||||
CreateMediaTree(media.Children, subFolder);
|
||||
}
|
||||
|
||||
xmlTextWriter.WriteEndElement();
|
||||
folder.folders.Add(subFolder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,4 +295,46 @@ namespace umbraco.presentation.umbraco.webservices
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class MediaResponse
|
||||
{
|
||||
[XmlAttribute]
|
||||
public bool success { get; set; }
|
||||
}
|
||||
|
||||
[XmlRoot("response")]
|
||||
public class ConfigResponse : MediaResponse
|
||||
{
|
||||
public string displayName { get; set; }
|
||||
public string umbracoPath { get; set; }
|
||||
public int maxRequestLength { get; set; }
|
||||
}
|
||||
|
||||
[XmlRoot("response")]
|
||||
public class FolderListResponse : MediaResponse
|
||||
{
|
||||
public FolderListItem folder { get; set; }
|
||||
}
|
||||
|
||||
[XmlType("folder")]
|
||||
public class FolderListItem
|
||||
{
|
||||
[XmlAttribute]
|
||||
public int id { get; set; }
|
||||
|
||||
[XmlAttribute]
|
||||
public string name { get; set; }
|
||||
|
||||
[XmlElement("folder")]
|
||||
public List<FolderListItem> folders { get; set; }
|
||||
|
||||
public FolderListItem()
|
||||
{
|
||||
folders = new List<FolderListItem>();
|
||||
}
|
||||
}
|
||||
|
||||
[XmlRoot("response")]
|
||||
public class UploadResponse : MediaResponse
|
||||
{ }
|
||||
}
|
||||
Reference in New Issue
Block a user