/// <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;
        }
Example #2
0
		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;
			}
		}
Example #3
0
        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;
			}
		}
Example #5
0
        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;
                }
            }
        }