/// <summary> /// Adds a File /// </summary> /// <param name="strFile">The File Name</param> /// <param name="portalId">The Id of the Portal</param> /// <param name="clearCache">A flag that indicates whether the file cache should be cleared</param> /// <remarks>This method is called by the SynchonizeFolder method, when the file exists in the file system /// but not in the Database /// </remarks> /// <history> /// [cnurse] 12/2/2004 Created /// [cnurse] 04/26/2006 Updated to account for secure storage /// </history> /// <param name="folderId"></param> private static string AddFile( string strFile, int portalId, bool clearCache, int folderId ) { string retValue = ""; try { FileController objFileController = new FileController(); FileInfo fInfo = new FileInfo( strFile ); string sourceFolderName = Globals.GetSubFolderPath( strFile ); string sourceFileName = GetFileName( strFile ); Services.FileSystem.FileInfo file = objFileController.GetFile( sourceFileName, portalId, folderId ); if( file == null ) { //Add the new File AddFile( portalId, fInfo.OpenRead(), strFile, "", fInfo.Length, sourceFolderName, true, clearCache ); } else { if( file.Size != fInfo.Length ) { //optimistic assumption for speed: update only if filesize has changed string extension = Path.GetExtension( strFile ).Replace( ".", "" ); UpdateFileData( file.FileId, folderId, portalId, sourceFileName, extension, GetContentType( extension ), fInfo.Length, sourceFolderName ); } } } catch( Exception ex ) { retValue = ex.Message; } return retValue; }
protected void Page_Load(object sender, System.EventArgs e) { try { string renderUrl = Request.QueryString["rurl"]; if (! (string.IsNullOrEmpty(renderUrl))) { string fileContents = string.Empty; FileController fileCtrl = new FileController(); FileInfo fileInfo = null; int portalID = PortalController.GetCurrentPortalSettings().PortalId; if (renderUrl.ToLower().Contains("linkclick.aspx") && renderUrl.ToLower().Contains("fileticket")) { //File Ticket int fileID = GetFileIDFromURL(renderUrl); if (fileID > -1) { fileInfo = fileCtrl.GetFileById(fileID, portalID); } } else { //File URL string dbPath = (string)(string)FileSystemValidation.ToDBPath(renderUrl); string fileName = System.IO.Path.GetFileName(renderUrl); if (! (string.IsNullOrEmpty(fileName))) { FolderInfo dnnFolder = GetDNNFolder(dbPath); if (dnnFolder != null) { fileInfo = fileCtrl.GetFile(fileName, portalID, dnnFolder.FolderID); } } } if (fileInfo != null) { if (CanViewFile(fileInfo.Folder) && fileInfo.Extension.ToLower() == "htmtemplate") { byte[] fileBytes = FileSystemUtils.GetFileContent(fileInfo); fileContents = System.Text.Encoding.ASCII.GetString(fileBytes); } } if (! (string.IsNullOrEmpty(fileContents))) { Content.Text = Server.HtmlEncode(fileContents); } } } catch (Exception ex) { Services.Exceptions.Exceptions.LogException(ex); Content.Text = string.Empty; } }
public int ConvertFilePathToFileId(string FilePath, int PortalID) { string FileName = ""; string FolderName = ""; int FileId = -1; if (FilePath != "") { FileName = FilePath.Substring(FilePath.LastIndexOf("/") + 1); FolderName = FilePath.Replace(FileName, ""); } FileController objFiles = new FileController(); FolderController objFolders = new FolderController(); FolderInfo objFolder = objFolders.GetFolder(PortalID, FolderName); if (objFolder != null) { FileInfo objFile = objFiles.GetFile(FileName, PortalID, objFolder.FolderID); if (objFile != null) { FileId = objFile.FileId; } } return(FileId); }
protected void Save_OnClick(object sender, EventArgs e) { try { if (FolderList.Items.Count == 0) { return; } DotNetNuke.Entities.Portals.PortalSettings portalSettings = DotNetNuke.Entities.Portals.PortalSettings.Current; string fileContents = htmlText2.Text.Trim(); string newFileName = FileName.Text; if (! (newFileName.EndsWith(".html"))) { newFileName = newFileName + ".html"; } string rootFolder = portalSettings.HomeDirectoryMapPath; string dbFolderPath = FolderList.SelectedValue; string virtualFolder = (string)(string)FileSystemValidation.ToVirtualPath(dbFolderPath); rootFolder = rootFolder + FolderList.SelectedValue; rootFolder = rootFolder.Replace("/", "\\"); string errorMessage = string.Empty; FolderController folderCtrl = new FolderController(); FolderInfo folder = folderCtrl.GetFolder(portalSettings.PortalId, dbFolderPath, false); if ((folder == null)) { ShowSaveTemplateMessage(GetString("msgFolderDoesNotExist.Text")); return; } // Check file name is valid FileSystemValidation dnnValidator = new FileSystemValidation(); errorMessage = dnnValidator.OnCreateFile(virtualFolder + newFileName, fileContents.Length); if (! (string.IsNullOrEmpty(errorMessage))) { ShowSaveTemplateMessage(errorMessage); return; } FileController fileCtrl = new FileController(); DotNetNuke.Services.FileSystem.FileInfo existingFile = fileCtrl.GetFile(newFileName, portalSettings.PortalId, folder.FolderID); // error if file exists if (! Overwrite.Checked && existingFile != null) { ShowSaveTemplateMessage(GetString("msgFileExists.Text")); return; } FileInfo newFile = existingFile; if ((newFile == null)) { newFile = new FileInfo(); } newFile.FileName = newFileName; newFile.ContentType = "text/plain"; newFile.Extension = "html"; newFile.Size = fileContents.Length; newFile.FolderId = folder.FolderID; errorMessage = FileSystemUtils.CreateFileFromString(rootFolder, newFile.FileName, fileContents, newFile.ContentType, string.Empty, false); if (! (string.IsNullOrEmpty(errorMessage))) { ShowSaveTemplateMessage(errorMessage); return; } existingFile = fileCtrl.GetFile(newFileName, portalSettings.PortalId, folder.FolderID); if (newFile.FileId != existingFile.FileId) { newFile.FileId = existingFile.FileId; } if (newFile.FileId != Null.NullInteger) { fileCtrl.UpdateFile(newFile.FileId, newFile.FileName, newFile.Extension, newFile.Size, newFile.Width, newFile.Height, newFile.ContentType, folder.FolderPath, folder.FolderID); } else { fileCtrl.AddFile(portalSettings.PortalId, newFile.FileName, newFile.Extension, newFile.Size, newFile.Width, newFile.Height, newFile.ContentType, folder.FolderPath, folder.FolderID, true); } ShowSaveTemplateMessage(string.Empty); } catch (Exception ex) { DotNetNuke.Services.Exceptions.Exceptions.LogException(ex); throw ex; } }
private string ExportModule( int ModuleID, string FileName ) { string strMessage = ""; ModuleController objModules = new ModuleController(); ModuleInfo objModule = objModules.GetModule( ModuleID, TabId, false ); if (objModule != null) { if (objModule.BusinessControllerClass != "" & objModule.IsPortable) { try { object objObject = Reflection.CreateObject(objModule.BusinessControllerClass, objModule.BusinessControllerClass); //Double-check if (objObject is IPortable) { string Content = Convert.ToString(((IPortable)objObject).ExportModule(ModuleID)); if (Content != "") { // add attributes to XML document Content = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + "<content type=\"" + CleanName(objModule.FriendlyName) + "\" version=\"" + objModule.Version + "\">" + Content + "</content>"; //First check the Portal limits will not be exceeded (this is approximate) PortalController objPortalController = new PortalController(); string strFile = PortalSettings.HomeDirectoryMapPath + FileName; if (objPortalController.HasSpaceAvailable(PortalId, Content.Length)) { // save the file StreamWriter objStream = File.CreateText(strFile); objStream.WriteLine(Content); objStream.Close(); // add file to Files table FileController objFiles = new FileController(); FileInfo finfo = new FileInfo(strFile); FolderController objFolders = new FolderController(); FolderInfo objFolder = objFolders.GetFolder(PortalId, ""); Services.FileSystem.FileInfo objFile = objFiles.GetFile(lblFile.Text, PortalId, objFolder.FolderID); if (objFile == null) { objFiles.AddFile(PortalId, lblFile.Text, "xml", finfo.Length, 0, 0, "application/octet-stream", "", objFolder.FolderID, true); } else { objFiles.UpdateFile(objFile.FileId, objFile.FileName, "xml", finfo.Length, 0, 0, "application/octet-stream", "", objFolder.FolderID); } } else { strMessage += "<br>" + string.Format(Localization.GetString("DiskSpaceExceeded"), strFile); } } else { strMessage = Localization.GetString("NoContent", this.LocalResourceFile); } } else { strMessage = Localization.GetString("ExportNotSupported", this.LocalResourceFile); } } catch { strMessage = Localization.GetString("Error", this.LocalResourceFile); } } else { strMessage = Localization.GetString("ExportNotSupported", this.LocalResourceFile); } } return strMessage; }
/// <summary> /// Processes all Files from the template /// </summary> /// <param name="nodeFiles">Template file node for the Files</param> /// <param name="PortalId">PortalId of the new portal</param> /// <history> /// [cnurse] 11/09/2004 Created /// </history> private void ParseFiles( XmlNodeList nodeFiles, int PortalId, FolderInfo objFolder ) { int FileId = 0; FileController objController = new FileController(); FileInfo objInfo = null; string fileName = null; foreach( XmlNode node in nodeFiles ) { fileName = XmlUtils.GetNodeValue( node, "filename", "" ); //First check if the file exists objInfo = objController.GetFile( fileName, PortalId, objFolder.FolderID ); if( objInfo == null ) { objInfo = new FileInfo(); objInfo.PortalId = PortalId; objInfo.FileName = fileName; objInfo.Extension = XmlUtils.GetNodeValue( node, "extension", "" ); objInfo.Size = XmlUtils.GetNodeValueInt( node, "size", 0 ); objInfo.Width = XmlUtils.GetNodeValueInt( node, "width", 0 ); objInfo.Height = XmlUtils.GetNodeValueInt( node, "height", 0 ); objInfo.ContentType = XmlUtils.GetNodeValue( node, "contenttype", "" ); objInfo.FolderId = objFolder.FolderID; objInfo.Folder = objFolder.FolderPath; //Save new File FileId = objController.AddFile( objInfo ); } else { //Get Id from File FileId = objInfo.FileId; } } }
/// <summary> /// Updates a File /// </summary> /// <param name="strSourceFile">The original File Name</param> /// <param name="strDestFile">The new File Name</param> /// <param name="PortalId"></param> /// <param name="isCopy">Flag determines whether file is to be be moved or copied</param> /// <param name="ClearCache"></param> private static string UpdateFile( string strSourceFile, string strDestFile, int PortalId, bool isCopy, bool isNew, bool ClearCache ) { string retValue = ""; retValue += CheckValidFileName( strSourceFile ) + " "; retValue += CheckValidFileName( strDestFile ); if( retValue.Length > 1 ) { return retValue; } retValue = ""; try { FolderController objFolderController = new FolderController(); FileController objFileController = new FileController(); string sourceFolderName = Globals.GetSubFolderPath( strSourceFile ); string sourceFileName = GetFileName( strSourceFile ); FolderInfo sourceFolder = objFolderController.GetFolder( PortalId, sourceFolderName ); string destFileName = GetFileName( strDestFile ); string destFolderName = Globals.GetSubFolderPath( strDestFile ); if( sourceFolder != null ) { Services.FileSystem.FileInfo file = objFileController.GetFile( sourceFileName, PortalId, sourceFolder.FolderID ); if( file != null ) { //Get the source Content from wherever it is Stream sourceStream = GetFileStream( file ); if( isCopy ) { //Add the new File AddFile( PortalId, sourceStream, strDestFile, "", file.Size, destFolderName, true, ClearCache ); } else { //Move/Update existing file FolderInfo destinationFolder = objFolderController.GetFolder( PortalId, destFolderName ); //Now move the file if( destinationFolder != null ) { objFileController.UpdateFile( file.FileId, destFileName, file.Extension, file.Size, file.Width, file.Height, file.ContentType, destFolderName, destinationFolder.FolderID ); //Write the content to the Destination WriteStream( file.FileId, sourceStream, strDestFile, destinationFolder.StorageLocation, true ); //Now we need to clean up the original files if( sourceFolder.StorageLocation == (int)FolderController.StorageLocationTypes.InsecureFileSystem ) { //try and delete the Insecure file AttemptFileDeletion( strSourceFile ); } if( sourceFolder.StorageLocation == (int)FolderController.StorageLocationTypes.SecureFileSystem ) { //try and delete the Secure file AttemptFileDeletion( strSourceFile + Globals.glbProtectedExtension ); } } } } } } catch( Exception ex ) { retValue = ex.Message; } return retValue; }
/// <summary> /// Unzips a File /// </summary> /// <param name="fileName">The zip File Name</param> /// <param name="DestFolder">The folder where the file is extracted to</param> /// <param name="settings">The Portal Settings for the Portal/Host Account</param> /// <remarks> /// </remarks> public static string UnzipFile( string fileName, string DestFolder, PortalSettings settings ) { int FolderPortalId = GetFolderPortalId( settings ); bool isHost = Convert.ToBoolean( ( ( settings.ActiveTab.ParentId == settings.SuperTabId ) ? true : false ) ); PortalController objPortalController = new PortalController(); FolderController objFolderController = new FolderController(); FileController objFileController = new FileController(); string sourceFolderName = Globals.GetSubFolderPath( fileName ); string sourceFileName = GetFileName( fileName ); FolderInfo folder = objFolderController.GetFolder( FolderPortalId, sourceFolderName ); Services.FileSystem.FileInfo file = objFileController.GetFile( sourceFileName, FolderPortalId, folder.FolderID ); int storageLocation = folder.StorageLocation; ZipInputStream objZipInputStream; ZipEntry objZipEntry; string strMessage = ""; string strFileName = ""; //Get the source Content from wherever it is //Create a Zip Input Stream try { objZipInputStream = new ZipInputStream( GetFileStream( file ) ); } catch( Exception ex ) { return ex.Message; } ArrayList sortedFolders = new ArrayList(); objZipEntry = objZipInputStream.GetNextEntry(); //add initial entry if required if( objZipEntry.IsDirectory ) { sortedFolders.Add( objZipEntry.Name.ToString() ); } //iterate other folders while( objZipEntry != null ) { if( objZipEntry.IsDirectory ) { try { sortedFolders.Add( objZipEntry.Name.ToString() ); } catch( Exception ex ) { objZipInputStream.Close(); return ex.Message; } } objZipEntry = objZipInputStream.GetNextEntry(); } sortedFolders.Sort(); foreach( string s in sortedFolders ) { try { AddFolder( settings, DestFolder, s.ToString(), storageLocation ); } catch( Exception ex ) { return ex.Message; } } objZipEntry = objZipInputStream.GetNextEntry(); while( objZipEntry != null ) { if( objZipEntry.IsDirectory ) { try { AddFolder( settings, DestFolder, objZipEntry.Name, storageLocation ); } catch( Exception ex ) { objZipInputStream.Close(); return ex.Message; } } objZipEntry = objZipInputStream.GetNextEntry(); } //Recreate the Zip Input Stream and parse it for the files objZipInputStream = new ZipInputStream( GetFileStream( file ) ); objZipEntry = objZipInputStream.GetNextEntry(); while( objZipEntry != null ) { if( !objZipEntry.IsDirectory ) { if( objPortalController.HasSpaceAvailable( FolderPortalId, objZipEntry.Size ) ) { strFileName = Path.GetFileName( objZipEntry.Name ); if( !String.IsNullOrEmpty( strFileName ) ) { string strExtension = Path.GetExtension( strFileName ).Replace( ".", "" ); string a = "," + settings.HostSettings["FileExtensions"].ToString().ToLower(); if( ( a.IndexOf( "," + strExtension.ToLower(), 0 ) + 1 ) != 0 || isHost ) { try { string folderPath = Path.GetDirectoryName( DestFolder + objZipEntry.Name.Replace( "/", "\\" ) ); DirectoryInfo Dinfo = new DirectoryInfo( folderPath ); if( !Dinfo.Exists ) { AddFolder( settings, DestFolder, objZipEntry.Name.Substring( 0, objZipEntry.Name.Replace( "/", "\\" ).LastIndexOf( "\\" ) ) ); } string zipEntryFileName = DestFolder + objZipEntry.Name.Replace( "/", "\\" ); strMessage += AddFile( FolderPortalId, objZipInputStream, zipEntryFileName, "", objZipEntry.Size, Globals.GetSubFolderPath( zipEntryFileName ), false, false ); } catch( Exception ex ) { objZipInputStream.Close(); return ex.Message; } } else { // restricted file type strMessage += "<br>" + string.Format( Localization.GetString( "RestrictedFileType" ), strFileName, settings.HostSettings["FileExtensions"].ToString().Replace( ",", ", *." ) ); } } } else // file too large { strMessage += "<br>" + string.Format( Localization.GetString( "DiskSpaceExceeded" ), strFileName ); } } objZipEntry = objZipInputStream.GetNextEntry(); } objZipInputStream.Close(); return strMessage; }
public int ConvertFilePathToFileId(string FilePath, int PortalID) { string FileName = ""; string FolderName = ""; int FileId = -1; if (FilePath != "") { FileName = FilePath.Substring(FilePath.LastIndexOf("/") + 1); FolderName = FilePath.Replace(FileName, ""); } FileController objFiles = new FileController(); FolderController objFolders = new FolderController(); FolderInfo objFolder = objFolders.GetFolder(PortalID, FolderName); if (objFolder != null) { FileInfo objFile = objFiles.GetFile(FileName, PortalID, objFolder.FolderID); if (objFile != null) { FileId = objFile.FileId; } } return FileId; }
/// <summary>process import of multi-instance records.</summary> /// <param name="xml">The xml.</param> /// <param name="prefix">The prefix (image, or link)</param> /// <param name="slide">The slide.</param> private static void ProcessImport(XmlNode xml, string prefix, Slide slide) { var ps = DotNetNuke.Entities.Portals.PortalController.GetCurrentPortalSettings(); var contentTypeXml = xml.SelectSingleNode(prefix + "contenttype"); var contentFileNameXml = xml.SelectSingleNode(prefix + "filename"); var contentFileExtensionXml = xml.SelectSingleNode(prefix + "fileextension"); var contentFolderPathXml = xml.SelectSingleNode(prefix + "folderpath"); var contentBase64Xml = xml.SelectSingleNode(prefix + "filedata"); var contentTabPathXml = xml.SelectSingleNode(prefix + "tabpath"); // this item appears to be an encoded tabpath.... lets continue if (contentTabPathXml != null) { // todo, when upgrading DNN reference, switch this to GetTabByTabPath on the TabController var tabInfo = ps.DesktopTabs.Cast<TabInfo>().SingleOrDefault(desktopTab => desktopTab.TabPath == contentTabPathXml.InnerText); if (tabInfo != null) { switch (prefix) { case "image": slide.ImageLink = "TabID=" + tabInfo.TabID.ToString(CultureInfo.InvariantCulture); break; default: slide.Link = "TabID=" + tabInfo.TabID.ToString(CultureInfo.InvariantCulture); break; } } } // this item appears to be an encoded image... lets continue if (contentTypeXml != null && contentBase64Xml != null && contentFolderPathXml != null && contentFileNameXml != null && contentFileExtensionXml != null) { var folderController = new FolderController(); var fileController = new FileController(); // for now, just put imported images into the root folder... var folder = folderController.GetFolder(ps.PortalId, contentFolderPathXml.InnerText, true); if (folder == null) { folderController.AddFolder(ps.PortalId, contentFolderPathXml.InnerText); folder = folderController.GetFolder(ps.PortalId, contentFolderPathXml.InnerText, true); } var file = fileController.GetFile(contentFileNameXml.InnerText, ps.PortalId, folder.FolderID); if (file == null) { var content = Convert.FromBase64String(contentBase64Xml.InnerText); file = new DotNetNuke.Services.FileSystem.FileInfo { PortalId = ps.PortalId, ContentType = contentTypeXml.InnerText, FileName = contentFileNameXml.InnerText, Extension = contentFileExtensionXml.InnerText, FolderId = folder.FolderID, Size = content.Length, }; // save the file the dnn filesystem File.WriteAllBytes(ps.HomeDirectoryMapPath + file.FileName, content); // add the file to the dnn database file.FileId = fileController.AddFile(file); } // update the files content.... just incase, it never hurts.... right? ////fileController.UpdateFileContent(file.FileId, content); switch (prefix) { case "image": slide.ImageLink = "FileID=" + file.FileId.ToString(CultureInfo.InvariantCulture); break; default: slide.Link = "FileID=" + file.FileId.ToString(CultureInfo.InvariantCulture); break; } } }