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 ;
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 ;
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 ;
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 ;
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 ; }
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 ) {
try {
foreach ( string key in input . Keys ) {
if ( key . StartsWith ( "Checkbox." ) & & input [ key ] = = "true" ) {
string folderName = key . Substring ( "Checkbox." . Length ) ;
_mediaService . DeleteFolder ( folderName ) ;
}
}
return RedirectToAction ( "Index" ) ;
}
catch ( Exception exception ) {
2010-06-12 13:33:35 -07:00
Services . Notifier . Error ( T ( "Deleting Folder failed: {0}" , exception . Message ) ) ;
2009-11-07 22:49:58 +00:00
return View ( ) ;
}
}
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 ( ) ;
try {
2010-01-08 08:38:07 +00:00
UpdateModel ( viewModel ) ;
2010-11-24 13:45:49 -08:00
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
return RedirectToAction ( "Index" ) ;
}
catch ( Exception exception ) {
2010-06-12 13:33:35 -07:00
Services . Notifier . Error ( T ( "Creating Folder failed: {0}" , exception . Message ) ) ;
2009-11-07 22:49:58 +00:00
return View ( viewModel ) ;
}
}
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 ) ;
}
catch ( Exception exception ) {
Services . Notifier . Error ( T ( "Editing failed: {0}" , exception . Message ) ) ;
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 ) {
try {
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 ] ;
2010-12-08 12:12:49 -08:00
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't delete media file" ) ) )
2009-11-14 21:34:37 +00:00
return new HttpUnauthorizedResult ( ) ;
2009-11-07 22:49:58 +00:00
_mediaService . DeleteFile ( fileName , folderName ) ;
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media file deleted" ) ) ;
2009-11-07 22:49:58 +00:00
}
else if ( key . StartsWith ( "Checkbox.Folder." ) & & input [ key ] = = "true" ) {
string folderName = key . Substring ( "Checkbox.Folder." . Length ) ;
string folderPath = input [ folderName ] ;
2010-12-08 12:12:49 -08:00
if ( ! Services . Authorizer . Authorize ( Permissions . ManageMedia , T ( "Couldn't delete media folder" ) ) )
2009-11-14 21:34:37 +00:00
return new HttpUnauthorizedResult ( ) ;
2009-11-07 22:49:58 +00:00
_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
}
}
return RedirectToAction ( "Index" ) ;
}
catch ( Exception exception ) {
2010-06-12 13:33:35 -07:00
Services . Notifier . Error ( T ( "Deleting failed: {0}" , exception . Message ) ) ;
2009-11-07 22:49:58 +00:00
return View ( ) ;
}
}
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 ( ) ;
try {
2010-01-08 08:38:07 +00:00
UpdateModel ( viewModel ) ;
2010-11-24 13:45:49 -08:00
_mediaService . DeleteFolder ( viewModel . MediaPath ) ;
2009-11-07 22:49:58 +00:00
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media folder deleted" ) ) ;
2009-11-07 22:49:58 +00:00
return RedirectToAction ( "Index" ) ;
}
catch ( Exception exception ) {
2010-11-24 15:19:14 -08:00
Services . Notifier . Error ( T ( "Deleting media folder failed: {0}" , exception . Message ) ) ;
2009-11-07 22:49:58 +00:00
return View ( viewModel ) ;
}
}
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 ( ) ;
try {
UpdateModel ( viewModel ) ;
_mediaService . RenameFolder ( viewModel . MediaPath , viewModel . Name ) ;
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media folder properties modified" ) ) ;
2010-11-24 13:45:49 -08:00
return RedirectToAction ( "Index" ) ;
} catch ( Exception exception ) {
2010-11-24 15:19:14 -08:00
Services . Notifier . Error ( T ( "Modifying media folder properties failed: {0}" , exception . Message ) ) ;
2010-11-24 13:45:49 -08:00
return View ( viewModel ) ;
}
}
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 ( ) ;
2010-04-07 11:36:43 -07:00
try {
2010-01-08 08:38:07 +00:00
UpdateModel ( viewModel ) ;
2009-11-12 21:52:01 +00:00
2010-11-18 09:31:21 -08:00
if ( String . IsNullOrWhiteSpace ( Request . Files [ 0 ] . FileName ) ) {
2010-04-07 11:36:43 -07:00
ModelState . AddModelError ( "File" , T ( "Select a file to upload" ) . ToString ( ) ) ;
2010-04-07 15:31:16 +01:00
}
if ( ! ModelState . IsValid )
return View ( viewModel ) ;
2010-04-07 11:36:43 -07:00
foreach ( string fileName in Request . Files ) {
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
}
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media file(s) uploaded" ) ) ;
2009-11-07 22:49:58 +00:00
return RedirectToAction ( "Edit" , new { name = viewModel . FolderName , mediaPath = viewModel . MediaPath } ) ;
}
2010-04-07 11:36:43 -07:00
catch ( Exception exception ) {
2010-06-12 13:33:35 -07:00
Services . Notifier . Error ( T ( "Uploading media file failed: {0}" , exception . Message ) ) ;
2009-11-07 22:49:58 +00:00
return View ( viewModel ) ;
}
}
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 ( ) ;
try {
UpdateModel ( viewModel ) ;
2010-03-04 02:58:49 -08:00
if ( Request . Files . Count < 1 | | Request . Files [ 0 ] . ContentLength = = 0 )
2010-03-05 02:04:41 -08:00
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
try {
_mediaService . GetMediaFiles ( viewModel . MediaPath ) ;
}
2010-03-04 17:47:35 -08:00
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
2010-03-04 02:58:49 -08:00
{
_mediaService . CreateFolder ( viewModel . MediaPath , "" ) ;
2010-03-04 00:15:56 -08:00
}
2010-03-04 02:58:49 -08:00
var file = Request . Files [ 0 ] ;
2010-12-08 16:13:09 -08:00
var publicUrl = _mediaService . UploadMediaFile ( viewModel . MediaPath , file , viewModel . ExtractZip ) ;
2010-03-04 02:58:49 -08:00
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
}
catch ( Exception exception ) {
2010-03-04 17:47:35 -08:00
return Content ( string . Format ( "<script type=\"text/javascript\">var result = {{ error: \"{0}\" }};</script>" , T ( "ERROR: Uploading media file failed: {0}" , exception . Message ) ) ) ;
2010-03-04 00:15:56 -08:00
}
}
2010-11-03 23:11:14 -07:00
public ActionResult EditMedia ( string name , DateTime lastUpdated , long size , string folderName , string mediaPath ) {
2009-11-07 22:49:58 +00:00
var model = new MediaItemEditViewModel ( ) ;
model . Name = name ;
2010-11-03 23:11:14 -07:00
// todo: reimplement
//model.Caption = caption ?? String.Empty;
2009-11-07 22:49:58 +00:00
model . LastUpdated = lastUpdated ;
model . Size = size ;
model . FolderName = folderName ;
model . MediaPath = mediaPath ;
2010-05-03 11:18:10 -07:00
model . PublicUrl = _mediaService . GetPublicUrl ( Path . Combine ( mediaPath , 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 ( ) ;
try {
UpdateModel ( viewModel ) ;
_mediaService . DeleteFile ( viewModel . Name , viewModel . MediaPath ) ;
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media deleted" ) ) ;
2010-11-24 13:45:49 -08:00
return RedirectToAction ( "Edit" , new { name = viewModel . FolderName , mediaPath = viewModel . MediaPath } ) ;
} catch ( Exception exception ) {
Services . Notifier . Error ( T ( "Removing media file failed: {0}" , exception . Message ) ) ;
return View ( viewModel ) ;
}
}
[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 ( ) ;
try {
2010-01-08 08:38:07 +00:00
UpdateModel ( viewModel ) ;
2010-11-24 13:45:49 -08:00
string viewModelName = viewModel . Name ;
// Rename
2009-11-07 22:49:58 +00:00
if ( ! String . Equals ( viewModel . Name , input [ "NewName" ] , StringComparison . OrdinalIgnoreCase ) ) {
_mediaService . RenameFile ( viewModel . Name , input [ "NewName" ] , viewModel . MediaPath ) ;
2010-11-24 13:45:49 -08:00
viewModelName = input [ "NewName" ] ;
2009-11-07 22:49:58 +00:00
}
2010-11-24 13:45:49 -08:00
2010-11-24 15:19:14 -08:00
Services . Notifier . Information ( T ( "Media information updated" ) ) ;
2010-11-24 13:45:49 -08:00
return RedirectToAction ( "EditMedia" , new { name = viewModelName ,
2009-11-07 22:49:58 +00:00
caption = viewModel . Caption ,
lastUpdated = viewModel . LastUpdated ,
size = viewModel . Size ,
folderName = viewModel . FolderName ,
mediaPath = viewModel . MediaPath } ) ;
}
catch ( Exception exception ) {
2010-06-12 13:33:35 -07:00
Services . Notifier . Error ( T ( "Editing media file failed: {0}" , exception . Message ) ) ;
2009-11-07 22:49:58 +00:00
return View ( viewModel ) ;
}
}
}
2010-11-24 13:45:49 -08:00
}