2009-11-07 22:49:58 +00:00
using System ;
using System.Collections.Generic ;
2010-03-04 02:58:49 -08:00
using System.IO ;
2009-11-07 22:49:58 +00:00
using System.Web.Mvc ;
2010-11-24 13:45:49 -08:00
using Orchard.Core.Contents.Controllers ;
2009-11-14 21:34:37 +00:00
using Orchard.Localization ;
2011-02-08 11:22:47 -08:00
using Orchard.Logging ;
2009-11-07 22:49:58 +00:00
using Orchard.Media.Models ;
using Orchard.Media.Services ;
using Orchard.Media.ViewModels ;
2009-11-12 19:19:45 +00:00
using Orchard.UI.Notify ;
2011-02-08 11:22:47 -08:00
using Orchard.Utility.Extensions ;
2009-11-07 22:49:58 +00:00
namespace Orchard.Media.Controllers {
[ValidateInput(false)]
public class AdminController : Controller {
private readonly IMediaService _mediaService ;
2010-02-25 21:59:17 -08:00
public AdminController ( IOrchardServices services , IMediaService mediaService ) {
Services = services ;
2009-11-07 22:49:58 +00:00
_mediaService = mediaService ;
2010-11-24 15:19:14 -08:00
T = NullLocalizer . Instance ;
2011-02-08 11:22:47 -08:00
Logger = NullLogger . Instance ;
2009-11-07 22:49:58 +00:00
}
2010-02-25 21:59:17 -08:00
public IOrchardServices Services { get ; set ; }
2009-11-14 21:34:37 +00:00
public Localizer T { get ; set ; }
2011-02-08 11:22:47 -08:00
public ILogger Logger { get ; set ; }
2009-11-14 21:34:37 +00:00
2009-11-07 22:49:58 +00:00
public ActionResult Index ( ) {
// Root media folders
IEnumerable < MediaFolder > mediaFolders = _mediaService . GetMediaFolders ( null ) ;
var model = new MediaFolderIndexViewModel { MediaFolders = mediaFolders } ;
return View ( model ) ;
}
2010-01-21 21:13:35 +00:00
[HttpPost]
2009-11-07 22:49:58 +00:00
public ActionResult Index ( FormCollection input ) {
2011-06-08 16:26:58 -07:00
foreach ( string key in input . Keys ) {
if ( key . StartsWith ( "Checkbox." ) & & input [ key ] = = "true" ) {
string folderName = key . Substring ( "Checkbox." . Length ) ;
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't delete media folder" ) ) )
return new HttpUnauthorizedResult ( ) ;
try {
2009-11-07 22:49:58 +00:00
_mediaService . DeleteFolder ( folderName ) ;
}
2011-06-08 16:26:58 -07:00
catch ( Exception exception ) {
Services . Notifier . Error ( T ( "Deleting Folder failed: {0}" , exception . Message ) ) ;
return View ( ) ;
}
2009-11-07 22:49:58 +00:00
}
}
2011-06-08 16:26:58 -07:00
return RedirectToAction ( "Index" ) ;
2009-11-07 22:49:58 +00:00
}
public ActionResult Create ( string mediaPath ) {
return View ( new MediaFolderCreateViewModel { MediaPath = mediaPath } ) ;
}
2010-01-21 21:13:35 +00:00
[HttpPost]
2010-01-08 08:38:07 +00:00
public ActionResult Create ( ) {
2010-12-08 12:12:49 -08:00
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't create media folder" ) ) )
2010-11-24 13:45:49 -08:00
return new HttpUnauthorizedResult ( ) ;
2009-11-07 22:49:58 +00:00
var viewModel = new MediaFolderCreateViewModel ( ) ;
2011-06-08 16:26:58 -07:00
UpdateModel ( viewModel ) ;
2010-11-24 13:45:49 -08:00
2011-06-08 16:26:58 -07:00
try {
2009-11-07 22:49:58 +00:00
_mediaService . CreateFolder ( viewModel . MediaPath , viewModel . Name ) ;
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media folder created" ) ) ;
2009-11-07 22:49:58 +00:00
}
2011-06-08 16:26:58 -07:00
catch ( ArgumentException argumentException ) {
Services . Notifier . Error ( T ( "Creating Folder failed: {0}" , argumentException . Message ) ) ;
2009-11-07 22:49:58 +00:00
return View ( viewModel ) ;
}
2011-06-08 16:26:58 -07:00
return RedirectToAction ( "Index" ) ;
2009-11-07 22:49:58 +00:00
}
public ActionResult Edit ( string name , string mediaPath ) {
2011-01-31 12:12:22 -08:00
try {
IEnumerable < MediaFile > mediaFiles = _mediaService . GetMediaFiles ( mediaPath ) ;
IEnumerable < MediaFolder > mediaFolders = _mediaService . GetMediaFolders ( mediaPath ) ;
var model = new MediaFolderEditViewModel { FolderName = name , MediaFiles = mediaFiles , MediaFolders = mediaFolders , MediaPath = mediaPath } ;
return View ( model ) ;
}
2011-06-08 16:26:58 -07:00
catch ( ArgumentException exception ) {
Services . Notifier . Error ( T ( "Editing failed: {0}" , exception . Message ) ) ;
2011-01-31 12:12:22 -08:00
return RedirectToAction ( "Index" ) ;
}
2009-11-07 22:49:58 +00:00
}
2010-01-21 21:13:35 +00:00
[HttpPost]
2009-11-07 22:49:58 +00:00
public ActionResult Edit ( FormCollection input ) {
2011-06-08 16:26:58 -07:00
foreach ( string key in input . Keys ) {
if ( key . StartsWith ( "Checkbox.File." ) & & input [ key ] = = "true" ) {
string fileName = key . Substring ( "Checkbox.File." . Length ) ;
string folderName = input [ fileName ] ;
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't delete media file" ) ) )
return new HttpUnauthorizedResult ( ) ;
try {
2011-03-10 11:17:04 -08:00
_mediaService . DeleteFile ( folderName , fileName ) ;
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media file deleted" ) ) ;
2009-11-07 22:49:58 +00:00
}
2011-06-08 16:26:58 -07:00
catch ( ArgumentException argumentException ) {
Services . Notifier . Error ( T ( "Deleting failed: {0}" , argumentException . Message ) ) ;
}
}
else if ( key . StartsWith ( "Checkbox.Folder." ) & & input [ key ] = = "true" ) {
string folderName = key . Substring ( "Checkbox.Folder." . Length ) ;
string folderPath = input [ folderName ] ;
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't delete media folder" ) ) )
return new HttpUnauthorizedResult ( ) ;
2010-11-24 15:19:14 -08:00
2011-06-08 16:26:58 -07:00
try {
_mediaService . DeleteFolder ( folderPath ) ;
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media folder deleted" ) ) ;
2009-11-07 22:49:58 +00:00
}
2011-06-08 16:26:58 -07:00
catch ( ArgumentException argumentException ) {
Services . Notifier . Error ( T ( "Deleting failed: {0}" , argumentException . Message ) ) ;
}
2009-11-07 22:49:58 +00:00
}
}
2011-06-08 16:26:58 -07:00
return RedirectToAction ( "Index" ) ;
2009-11-07 22:49:58 +00:00
}
public ActionResult EditProperties ( string folderName , string mediaPath ) {
var model = new MediaFolderEditPropertiesViewModel { Name = folderName , MediaPath = mediaPath } ;
return View ( model ) ;
}
2010-11-24 13:45:49 -08:00
[HttpPost, ActionName("EditProperties")]
[FormValueRequired("submit.Delete")]
public ActionResult EditPropertiesDeletePOST ( ) {
2010-12-08 12:12:49 -08:00
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't delete media folder" ) ) )
2010-11-24 14:10:33 -08:00
return new HttpUnauthorizedResult ( ) ;
2009-11-07 22:49:58 +00:00
var viewModel = new MediaFolderEditPropertiesViewModel ( ) ;
2011-06-08 16:26:58 -07:00
UpdateModel ( viewModel ) ;
2009-11-07 22:49:58 +00:00
try {
2010-11-24 13:45:49 -08:00
_mediaService . DeleteFolder ( viewModel . MediaPath ) ;
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media folder deleted" ) ) ;
2011-06-08 16:26:58 -07:00
}
catch ( ArgumentException argumentException ) {
Services . Notifier . Error ( T ( "Deleting media folder failed: {0}" , argumentException . Message ) ) ;
2009-11-07 22:49:58 +00:00
return View ( viewModel ) ;
}
2011-06-08 16:26:58 -07:00
return RedirectToAction ( "Index" ) ;
2009-11-07 22:49:58 +00:00
}
2010-11-24 13:45:49 -08:00
[HttpPost, ActionName("EditProperties")]
[FormValueRequired("submit.Save")]
public ActionResult EditProperties ( ) {
2010-12-08 12:12:49 -08:00
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't rename media folder" ) ) )
2010-11-24 13:45:49 -08:00
return new HttpUnauthorizedResult ( ) ;
var viewModel = new MediaFolderEditPropertiesViewModel ( ) ;
2011-06-08 16:26:58 -07:00
UpdateModel ( viewModel ) ;
2010-11-24 13:45:49 -08:00
try {
_mediaService . RenameFolder ( viewModel . MediaPath , viewModel . Name ) ;
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media folder properties modified" ) ) ;
2011-06-08 16:26:58 -07:00
}
catch ( ArgumentException argumentException ) {
Services . Notifier . Error ( T ( "Modifying media folder properties failed: {0}" , argumentException . Message ) ) ;
2010-11-24 13:45:49 -08:00
return View ( viewModel ) ;
}
2011-06-08 16:26:58 -07:00
return RedirectToAction ( "Index" ) ;
2010-11-24 13:45:49 -08:00
}
2009-11-07 22:49:58 +00:00
public ActionResult Add ( string folderName , string mediaPath ) {
var model = new MediaItemAddViewModel { FolderName = folderName , MediaPath = mediaPath } ;
return View ( model ) ;
}
2010-01-21 21:13:35 +00:00
[HttpPost]
2010-04-07 11:36:43 -07:00
public ActionResult Add ( ) {
2010-12-08 12:12:49 -08:00
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't upload media file" ) ) )
2010-11-24 13:45:49 -08:00
return new HttpUnauthorizedResult ( ) ;
2009-11-07 22:49:58 +00:00
var viewModel = new MediaItemAddViewModel ( ) ;
2009-11-12 21:52:01 +00:00
2011-06-08 16:26:58 -07:00
UpdateModel ( viewModel ) ;
if ( String . IsNullOrWhiteSpace ( Request . Files [ 0 ] . FileName ) ) {
ModelState . AddModelError ( "File" , T ( "Select a file to upload" ) . ToString ( ) ) ;
}
2010-04-07 15:31:16 +01:00
2011-06-08 16:26:58 -07:00
if ( ! ModelState . IsValid )
return View ( viewModel ) ;
2010-04-07 15:31:16 +01:00
2011-06-08 16:26:58 -07:00
foreach ( string fileName in Request . Files ) {
try {
2011-01-31 12:12:22 -08:00
_mediaService . UploadMediaFile ( viewModel . MediaPath , Request . Files [ fileName ] , viewModel . ExtractZip ) ;
2009-11-07 22:49:58 +00:00
}
2011-06-08 16:26:58 -07:00
catch ( ArgumentException argumentException ) {
Services . Notifier . Error ( T ( "Uploading media file failed:" ) ) ;
return View ( viewModel ) ;
}
2009-11-07 22:49:58 +00:00
}
2011-06-08 16:26:58 -07:00
Services . Notifier . Information ( T ( "Media file(s) uploaded" ) ) ;
return RedirectToAction ( "Edit" , new { name = viewModel . FolderName , mediaPath = viewModel . MediaPath } ) ;
2009-11-07 22:49:58 +00:00
}
2010-03-04 00:15:56 -08:00
[HttpPost]
2010-03-04 17:47:35 -08:00
public ContentResult AddFromClient ( ) {
2010-12-08 12:12:49 -08:00
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia ) )
2010-11-24 13:45:49 -08:00
return Content ( string . Format ( "<script type=\"text/javascript\">var result = {{ error: \"{0}\" }};</script>" , T ( "ERROR: You don't have permission to upload media files" ) ) ) ;
2010-03-04 00:15:56 -08:00
var viewModel = new MediaItemAddViewModel ( ) ;
2011-06-08 16:26:58 -07:00
UpdateModel ( viewModel ) ;
2010-03-04 00:15:56 -08:00
2011-06-08 16:26:58 -07:00
if ( Request . Files . Count < 1 | | Request . Files [ 0 ] . ContentLength = = 0 )
return Content ( string . Format ( "<script type=\"text/javascript\">var result = {{ error: \"{0}\" }};</script>" , T ( "HEY: You didn't give me a file to upload" ) ) ) ;
2010-03-04 02:58:49 -08:00
2011-06-08 16:26:58 -07:00
try {
_mediaService . GetMediaFiles ( viewModel . MediaPath ) ;
}
catch //media api needs a little work, like everything else of course ;) <- ;) == my stuff included. to clarify I need a way to know if the path exists or have UploadMediaFile create paths as necessary but there isn't the time to hook that up in the near future
{
_mediaService . CreateFolder ( "" , viewModel . MediaPath ) ;
}
2010-03-04 00:15:56 -08:00
2011-06-08 16:26:58 -07:00
var file = Request . Files [ 0 ] ;
try {
2010-12-08 16:13:09 -08:00
var publicUrl = _mediaService . UploadMediaFile ( viewModel . MediaPath , file , viewModel . ExtractZip ) ;
2010-05-03 11:18:10 -07:00
return Content ( string . Format ( "<script type=\"text/javascript\">var result = {{ url: \"{0}\" }};</script>" , publicUrl ) ) ;
2010-03-04 00:15:56 -08:00
}
2011-06-08 16:26:58 -07:00
catch ( ArgumentException argumentException ) {
return Content ( string . Format ( "<script type=\"text/javascript\">var result = {{ error: \"{0}\" }};</script>" , T ( "ERROR: Uploading media file failed: {0}" , argumentException . Message ) ) ) ;
2010-03-04 00:15:56 -08:00
}
}
2011-04-05 12:55:43 -07:00
public ActionResult EditMedia ( MediaItemEditViewModel model ) {
model . PublicUrl = _mediaService . GetPublicUrl ( Path . Combine ( model . MediaPath , model . Name ) ) ;
2009-11-07 22:49:58 +00:00
return View ( model ) ;
}
2010-11-24 13:45:49 -08:00
[HttpPost, ActionName("EditMedia")]
[FormValueRequired("submit.Delete")]
public ActionResult EditMediaDeletePOST ( FormCollection input ) {
2010-12-08 12:12:49 -08:00
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't delete media file" ) ) )
2010-11-24 13:45:49 -08:00
return new HttpUnauthorizedResult ( ) ;
var viewModel = new MediaItemEditViewModel ( ) ;
2011-06-08 16:26:58 -07:00
UpdateModel ( viewModel ) ;
2010-11-24 13:45:49 -08:00
try {
_mediaService . DeleteFile ( viewModel . Name , viewModel . MediaPath ) ;
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media deleted" ) ) ;
2011-06-08 16:26:58 -07:00
}
catch ( ArgumentException argumentException ) {
Services . Notifier . Error ( T ( "Removing media file failed: {0}" , argumentException . Message ) ) ;
2010-11-24 13:45:49 -08:00
return View ( viewModel ) ;
}
2011-06-08 16:26:58 -07:00
return RedirectToAction ( "Edit" , new { name = viewModel . FolderName , mediaPath = viewModel . MediaPath } ) ;
2010-11-24 13:45:49 -08:00
}
[HttpPost, ActionName("EditMedia")]
[FormValueRequired("submit.Save")]
2009-11-07 22:49:58 +00:00
public ActionResult EditMedia ( FormCollection input ) {
2010-12-08 12:12:49 -08:00
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't modify media file" ) ) )
2010-11-24 13:45:49 -08:00
return new HttpUnauthorizedResult ( ) ;
2009-11-07 22:49:58 +00:00
var viewModel = new MediaItemEditViewModel ( ) ;
2011-06-08 16:26:58 -07:00
UpdateModel ( viewModel ) ;
string viewModelName = viewModel . Name ;
2010-11-24 13:45:49 -08:00
2011-06-08 16:26:58 -07:00
// Rename
if ( ! String . Equals ( viewModel . Name , input [ "NewName" ] , StringComparison . OrdinalIgnoreCase ) ) {
try {
2011-03-25 10:48:03 -07:00
_mediaService . RenameFile ( viewModel . MediaPath , viewModel . Name , input [ "NewName" ] ) ;
2009-11-07 22:49:58 +00:00
}
2011-06-08 16:26:58 -07:00
catch ( ArgumentException argumentException ) {
Services . Notifier . Error ( T ( "Editing media file failed." ) ) ;
return EditMedia ( viewModel ) ;
}
viewModelName = input [ "NewName" ] ;
2009-11-07 22:49:58 +00:00
}
2011-06-08 16:26:58 -07:00
Services . Notifier . Information ( T ( "Media information updated" ) ) ;
return RedirectToAction ( "EditMedia" , new { name = viewModelName ,
caption = viewModel . Caption ,
lastUpdated = viewModel . LastUpdated ,
size = viewModel . Size ,
folderName = viewModel . FolderName ,
mediaPath = viewModel . MediaPath } ) ;
2009-11-07 22:49:58 +00:00
}
}
2010-11-24 13:45:49 -08:00
}