/// <summary> /// Handler der beim Laden der Seite aufgerufen wird. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Page_Load(object sender, EventArgs e) { DirectoryWrapper currDir = FbConfigAgent.CurrentDirectory; if (!ControlPostback) { // Daten hinzufügen. if (currDir != null) { if (currDir.SubDirectories.Length > 0) { directoryList.DataSource = currDir.SubDirectories; directoryList.DataBind(); directoryArea.Visible = true; } else { directoryArea.Visible = false; } fileList.DataSource = currDir.Files; // Is there another way than referncing the column by index?... ((BoundField)fileList.Columns[4]).DataFormatString = "{0:" + Portal.API.Config.DateFormat + "}"; fileList.DataBind(); } } // Die Controls im Header abhängig der aktuellen Einstellungen konfigurieren. ConfigureControls(); }
/// <summary> /// Erzeugt die Anzeige des aktuellen Pfads mit den Links. /// </summary> /// <param name="targetCtrl"></param> protected void CreateDirPath(DirectoryWrapper directory, Control targetCtrl) { if (null != directory) { // Aktuelles Verzeichnis hinzufügen. Literal currLayer = new Literal(); currLayer.Text = directory.PresentationName; targetCtrl.Controls.Add(currLayer); // Alle übergeordneten Verzeichnisse hinzufügen. int step = 0; DirectoryWrapper dir = directory.Parent; while (dir != null) { targetCtrl.Controls.AddAt(0, new LiteralControl(" >> ")); LinkButton dirLayer = new LinkButton(); dirLayer.ID = "DirUp" + step; dirLayer.Text = dir.PresentationName; dirLayer.CommandArgument = (++step).ToString(); dirLayer.Command += new CommandEventHandler(this.ChangeDirUp); targetCtrl.Controls.AddAt(0, dirLayer); dir = dir.Parent; } } else { string dirNotFound = Portal.API.Language.GetText(Portal.API.Module.GetModuleControl(this), "DirectoryNotFound"); targetCtrl.Controls.AddAt(0, new LiteralControl("<i>" + dirNotFound + "</i>")); } }
/// <summary> /// Konfiguriert die Controls im Header abhängig der aktuellen Einstellungen. /// </summary> private void ConfigureControls() { DirectoryWrapper currDir = FbConfigAgent.CurrentDirectory; // Existiert das Verzeichnis bereits? if (currDir != null) { // Edit-Funktion einblenden, wenn die Benutzerrechte entsprechend gesetzt sind. EditTools.Visible = ModuleHasEditRights; directoryList.Columns[1].Visible = ModuleHasEditRights; fileList.Columns[1].Visible = ModuleHasEditRights; // Der Pfad zum akuellen Verzeichhnis nur einblenden, wenn überhaupt Verzeichnisse vorhanden sind. if (((currDir.SubDirectories.Length > 0) || (currDir.Parent != null))) { currPathDiv.Visible = true; CreateDirPath(currDir, currPath); } else { currPathDiv.Visible = false; } pathNotFound.Visible = false; } else { // Das Verzeichnis existiert nicht. Der Benutzer hat die Möglichkeit, das Verzeichnis zu erstellen. pathNotFound.Visible = ModuleHasEditRights; string message = Portal.API.Language.GetText(Portal.API.Module.GetModuleControl(this), "DirectoryNotFoundCreateQuestion"); directoryCreateQuestion.Text = string.Format(message, FbConfigAgent.VirtualRoot); } }
/// <summary> /// Entfernt ein Verzeichnis aus der Liste, ohne diese physikalisch zu löschen. /// </summary> /// <param name="file">Datei die entfernt werden soll.</param> public void Detach(DirectoryWrapper dir) { if (subDirectories != null) { subDirectories.Remove(dir); } }
/// <summary> /// Gibt die enthaltene Datei mit dem angegebenen Namen zurück, bzw. null wenn sie nicht gefunden wurde. /// Es können auch vorgängige Verzeichnisse durch Slash getrennt angegeben werden. z.B. "Directory/File.txt" /// </summary> /// <param name="filePath">Name der Datei</param> /// <returns>Dateiwrapper, bzw. null wenn sie nicht gefunden wurde</returns> public FileWrapper GetFile(string filePath) { int slashPos = filePath.IndexOf('/'); // Slash an erster Position werden übersprungen. if (slashPos == 0) { filePath = filePath.Substring(1); slashPos = filePath.IndexOf('/'); } if ((-1 == slashPos)) { // Kein Unterverzeichnis mehr enthalten. Es wird nach der Datei gesucht. return(Array.Find(Files, delegate(FileWrapper file) { return file.FileName == filePath; })); } else { // Suche nach dem Unterverzeichnis. string dirName = filePath.Substring(0, slashPos); DirectoryWrapper subDir = Array.Find(SubDirectories, delegate(DirectoryWrapper dir) { return(dir.Name == dirName); }); if (subDir != null) { return(subDir.GetFile(filePath.Substring(slashPos + 1))); } else { return(null); // Verzeichnis konnte nicht gefunden werden. } } }
/// <summary> /// Konstruktor. /// </summary> /// <param name="path">Physikalischer Pfad zu dieser Datei.</param> /// <param name="cnfgRow">DataRow welche die Daten dieses Files enthält.</param> /// <param name="parent">Das Verzeichnis welche diese Datei enthält.</param> public FileWrapper(string path, DirectoryData.FileConfigRow cnfgRow, DirectoryWrapper parent) { if (null == parent) throw new ArgumentNullException("Verzeichnis darf nicht null sein."); this.parent = parent; this.fileInfo = new FileInfo(path); this.fileInfoCfg = cnfgRow; this.fileInfoCfg.Name = this.fileInfo.Name; }
/// <summary> /// Konstruktor /// </summary> /// <param name="path">Physikalischer Pfad zu diesem Verzeichnis</param> /// <param name="parent">Das Parent-Verzeichnis</param> public DirectoryWrapper(string path, DirectoryWrapper parent) { this.directory = new System.IO.DirectoryInfo(path); this.parent = parent; if (this.parent == null) { this.virtualPath = ""; } }
/// <summary> /// Ereignishandler der eine Verzeichnisebene nach oben wechselt. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void ChangeDirUp(object sender, CommandEventArgs e) { int nofLayer = Convert.ToInt32(e.CommandArgument); DirectoryWrapper newCurrDir = FbConfigAgent.CurrentDirectory; while ((nofLayer > 0) && (newCurrDir.Parent != null)) { newCurrDir = newCurrDir.Parent; nofLayer--; } ChangeCurrentDir(newCurrDir); }
protected void Page_Load(object sender, EventArgs e) { // Aktuellen Verzeichnispfad anzeigen. DirectoryWrapper currDir = ((IStateProcessor)Parent).ConfigAgent.CurrentDirectory; dirPath.Text = currDir.PresentationPath; if (DateTime.MinValue == modDate.DateTimeValue) { modDate.DateTimeValue = DateTime.Now; } }
/// <summary> /// Erzeugt ein neues Unterverzeichnis. /// </summary> /// <param name="dirName"></param> /// <param name="dirDescription"></param> public void CreateSubDir(string dirName, string dirDescription) { DirectoryInfo newDirInfo = DirectoryData.CreateSubdirectory(dirName); // Erzeugen der Wrapper mit der selben Sortierung. DirectoryWrapper dirWrapper = new DirectoryWrapper(newDirInfo.FullName, this); dirWrapper.Description = dirDescription; dirWrapper.SaveData(); subDirectories = null; // Neu einlesen der Unterverzeichnisse. }
/// <summary> /// Konstruktor. /// </summary> /// <param name="path">Physikalischer Pfad zu dieser Datei.</param> /// <param name="cnfgRow">DataRow welche die Daten dieses Files enthält.</param> /// <param name="parent">Das Verzeichnis welche diese Datei enthält.</param> public FileWrapper(string path, DirectoryData.FileConfigRow cnfgRow, DirectoryWrapper parent) { if (null == parent) { throw new ArgumentNullException("Verzeichnis darf nicht null sein."); } this.parent = parent; this.fileInfo = new FileInfo(path); this.fileInfoCfg = cnfgRow; this.fileInfoCfg.Name = this.fileInfo.Name; }
/// <summary> /// Ereignishandler der das aktuelle Verzeichnis wechselt. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void ChangeDir(object sender, CommandEventArgs e) { ConfigAgent cfgAgent = FbConfigAgent; // Wechle zu dem entsprechenden Verzeichnis, welches als CommandArgument angegeben wurde. DirectoryWrapper newCurrDir = cfgAgent.RootDirectory.GetSubDirectory(e.CommandArgument.ToString()); if (null == newCurrDir) { // Inzwischen scheint dieses Verzeichnis nicht mehr vorhanden zu sein. Aus diesem Grund wird wieder zum // Root Verzeichnis gewechselt. newCurrDir = cfgAgent.RootDirectory; } ChangeCurrentDir(newCurrDir); }
/// <summary> /// Gibt das Unterverzeichnis mit dem angegebenen Namen zurück, bzw. null wenn es nicht gefunden wurde. /// </summary> /// <param name="dirName">Der Verzeichnisname bzw. der relative Pfad zum Verzeichnis</param> /// <returns>Verzeichniswrapper, bzw. null wenn es nicht gefunden wurde</returns> public DirectoryWrapper GetSubDirectory(string dirPath) { int slashPos = dirPath.IndexOf('/'); // Slash an erster Position werden übersprungen. if (slashPos == 0) { dirPath = dirPath.Substring(1); slashPos = dirPath.IndexOf('/'); } String subDirName; if (slashPos != -1) { subDirName = dirPath.Substring(0, slashPos); dirPath = dirPath.Substring(slashPos + 1); if (dirPath == "/") { dirPath = String.Empty; } } else { subDirName = dirPath; } // Suche nach dem Unterverzeichnis. DirectoryWrapper subDir = Array.Find(SubDirectories, delegate(DirectoryWrapper dir) { return(dir.Name == subDirName); }); if (subDir != null) { if (String.IsNullOrEmpty(dirPath)) { return(subDir); } else { return(subDir.GetSubDirectory(dirPath)); } } else { return(null); // Verzeichnis konnte nicht gefunden werden. } }
protected void OkBtn_Click(object sender, EventArgs e) { DirectoryWrapper editDir = ((IStateProcessor)Parent).ConfigAgent.EditDirectory; if (editDir != null) { editDir.PresentationName = dirName.Text; editDir.Description = description.Text; editDir.SaveData(); } else if (!string.IsNullOrEmpty(dirName.Text)) { DirectoryWrapper parentDir = ((IStateProcessor)Parent).ConfigAgent.CurrentDirectory; parentDir.CreateSubDir(dirName.Text, description.Text); } ProcessEvent((int)StateEvent.ok); }
protected void DeleteBtn_Click(object sender, EventArgs e) { ConfigAgent cfgAgent = ((IStateProcessor)Parent).ConfigAgent; DirectoryWrapper editDir = cfgAgent.EditDirectory; if (editDir != null) { editDir.Delete(); // Falls das aktuelle Verzeichnis das aktive ist, wird eine Ebene nach oben navigiert. if (cfgAgent.EditDirectory == cfgAgent.CurrentDirectory) { cfgAgent.CurrentDirectory = cfgAgent.CurrentDirectory.Parent; } } ProcessEvent((int)StateEvent.ok); }
protected void Page_Load(object sender, EventArgs e) { if (!ControlPostback) { DirectoryWrapper editDir = ((IStateProcessor)Parent).ConfigAgent.EditDirectory; // Ist es ein Edit oder ein New. if (editDir != null) { dirName.Text = editDir.PresentationName; description.Text = editDir.Description; // Der löschen Button ist nur aktiv, wenn es nicht das Root Verzeichnis ist. if (Parent != null) { DeleteBtn.Visible = true; } } } }
protected void Page_Load(object sender, EventArgs e) { // Aktuellen Verzeichnispfad anzeigen. ConfigAgent cfgAgent = ((IStateProcessor)Parent).ConfigAgent; DirectoryWrapper currDir = cfgAgent.CurrentDirectory; dirPath.Text = currDir.PresentationPath; FileWrapper editFile = cfgAgent.EditFile; fileName.Text = editFile.FileName; fileDesc.Text = editFile.Description; string dateFormat = Portal.API.Config.DateFormat; modDate.DateTimeValue = editFile.ModificationDate; // Wird eine Datei ausgewählt, soll das Datum aktualisiert werden. fileSelect.Attributes.Add("onChange", modDate.GetChangeHandlerCode(DateTime.Now)); }
/// <summary> /// Wechselt das aktuelle Verzeichnis und lädt die Daten neu. /// </summary> /// <param name="newCurrDir">Neues Verzeichnis, oder null wenn das RootVerzeichnis gelten soll.</param> protected void ChangeCurrentDir(DirectoryWrapper newCurrDir) { // Zuweisen des neuen Verzeichnis. FbConfigAgent.CurrentDirectory = newCurrDir; if (null == newCurrDir) { newCurrDir = FbConfigAgent.CurrentDirectory; } directoryList.DataSource = newCurrDir.SubDirectories; directoryList.DataBind(); fileList.DataSource = newCurrDir.Files; fileList.DataBind(); // Pfad zu diesem Verzeichnis aktualisieren. currPath.Controls.Clear(); CreateDirPath(newCurrDir, currPath); // Wenn das aktuelle Verzeichnis das Root Verzeichnis ist, wird der Up-Button ausgeblendet. dirUpBtn.Visible = (FbConfigAgent.CurrentDirectory.Parent != null); }
/// <summary> /// Ereignishandler für den OK Button. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void OkBtn_Click(object sender, EventArgs e) { bool success = false; // Falls kein Name angegeben wurde, wird der Dateiname der Upload Datei verwendet. if (string.IsNullOrEmpty(fileName.Text.Trim())) { fileName.Text = fileSelect.FileName; } else { // Sicherstellen dass der Dateiname die selbe Endung aufweist. fileName.Text = fileName.Text.Trim(); int lastPoint = fileSelect.FileName.LastIndexOf('.'); if (-1 != lastPoint) { // Ermitteln der Endung der Upload Datei. string extension = fileSelect.FileName.Substring(lastPoint); // Stimmt die Endung nicht überein, wird sie einfach angehängt. if (!fileName.Text.EndsWith(extension, true, null)) { // Zuerst muss aber sichergestellt werden dass die maximale Länge nicht überschritten wird. int availLength = 255 - extension.Length; if (availLength < fileName.Text.Length) { fileName.Text.Remove(availLength); } fileName.Text += extension; } } } try { // Überprüfen ob die Datei bereits existiert und ob der Name gültig ist. DirectoryWrapper currDir = ((IStateProcessor)Parent).ConfigAgent.CurrentDirectory; if (null != currDir.GetFile(fileName.Text) || !currDir.IsFileNameAllowed(fileName.Text)) { fileAllreadyExist.IsValid = false; } else { // Datei speichern. fileSelect.PostedFile.SaveAs(currDir.DirectoryData.FullName + "\\" + fileName.Text); // Dateiwrapper erzeugen und dem Cache hinzufügen. currDir.AddFile(fileName.Text, fileDesc.Text, modDate.DateTimeValue); success = true; } } catch (Exception ex) { uploadException.Text = Portal.API.Language.GetText(this, "UploadException") + ": " + ex.Message; uploadException.IsValid = false; } if (true == success) { ProcessEvent((int)StateEvent.ok); } }
/// <summary> /// Wechselt das aktuelle Verzeichnis und lädt die Daten neu. /// </summary> /// <param name="newCurrDir">Neues Verzeichnis, oder null wenn das RootVerzeichnis gelten soll.</param> protected void ChangeCurrentDir(DirectoryWrapper newCurrDir) { // Zuweisen des neuen Verzeichnis. FbConfigAgent.CurrentDirectory = newCurrDir; if (null == newCurrDir) newCurrDir = FbConfigAgent.CurrentDirectory; directoryList.DataSource = newCurrDir.SubDirectories; directoryList.DataBind(); fileList.DataSource = newCurrDir.Files; fileList.DataBind(); // Pfad zu diesem Verzeichnis aktualisieren. currPath.Controls.Clear(); CreateDirPath(newCurrDir, currPath); // Wenn das aktuelle Verzeichnis das Root Verzeichnis ist, wird der Up-Button ausgeblendet. dirUpBtn.Visible = (FbConfigAgent.CurrentDirectory.Parent != null); }
/// <summary> /// Konstruktor /// </summary> /// <param name="path">Physikalischer Pfad zu diesem Verzeichnis</param> /// <param name="parent">Das Parent-Verzeichnis</param> public DirectoryWrapper(string path, DirectoryWrapper parent) { this.directory = new System.IO.DirectoryInfo(path); this.parent = parent; if (this.parent == null) this.virtualPath = ""; }