protected void UploadFilesNow_Click(object sender, EventArgs e) { try { var field = GetField(); if (IsPostBack && Request.Files.Count > 0 && !hasRun) { hasRun = true; var index = 0; for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; if (string.IsNullOrEmpty(file.FileName)) { continue; } var fileInfo = (new System.IO.FileInfo(GetFolderPath() + file.FileName)); if (!fileInfo.Directory.Exists) { fileInfo.Directory.Create(); } if (fileInfo.Directory.Exists) { file.SaveAs(fileInfo.FullName); var filePath = URIHelper.ConvertAbsUrlToTilda(URIHelper.ConvertAbsPathToAbsUrl(fileInfo.FullName)).Replace("~", ""); if (!field.FieldAssociations.Any(j => j.MediaDetail.PathToFile == filePath)) { var fieldAssociation = new FieldAssociation(); fieldAssociation.MediaDetail = (MediaDetail)PagesMapper.CreateObject(MediaTypeID, MediasMapper.CreateObject(), AdminBasePage.SelectedMedia); fieldAssociation.MediaDetail.LinkTitle = fieldAssociation.MediaDetail.SectionTitle = fieldAssociation.MediaDetail.ShortDescription = fieldAssociation.MediaDetail.MainContent = fileInfo.Name; fieldAssociation.MediaDetail.PathToFile = filePath; fieldAssociation.MediaDetail.PublishDate = DateTime.Now; fieldAssociation.MediaDetail.CreatedByUser = fieldAssociation.MediaDetail.LastUpdatedByUser = FrameworkSettings.CurrentUser; fieldAssociation.MediaDetail.CachedVirtualPath = fieldAssociation.MediaDetail.CalculatedVirtualPath(); fieldAssociation.MediaDetail.LanguageID = SettingsMapper.GetSettings().DefaultLanguage.ID; field.FieldAssociations.Add(fieldAssociation); index++; var returnObj = BaseMapper.SaveDataModel(); } } } } SetValue(GetValue()); } catch (Exception ex) { } }
protected void Page_Load(object sender, EventArgs e) { if (FrameworkSettings.CurrentUser == null) { throw new Exception("You must be logged into the CMS inorder to access the file manager"); } strCmd = Request.QueryString["cmd"] + ""; strType = Request.QueryString["type"] + ""; strFolder = Request.QueryString["folder"] + ""; strFile = Request.QueryString["file"] + ""; strLang = Request.QueryString["lang"] + ""; //not used right now, but grab it strEditor = Request.QueryString["editor"] + ""; strCurrPath = Request.QueryString["currpath"] + ""; strProfile = Request.QueryString["profile"] + ""; baseUrl = Request.QueryString["BaseUrl"] + ""; var defaultRootPath = "/media/uploads/"; if (!FrameworkSettings.CurrentUser.IsInRole(RoleEnum.Developer)) { var requestPath = URIHelper.ConvertAbsUrlToTilda(strCurrPath).Replace("\\", "/").Replace("//", "/").Replace("~/", "/"); if (!requestPath.Contains(defaultRootPath)) { strCurrPath = defaultRootPath; } } if (string.IsNullOrEmpty(baseUrl)) { var protocal = (Request.IsSecureConnection) ? "https://" : "http://"; baseUrl = protocal + Request.Url.Authority; } if (!strCurrPath.StartsWith("http") && File.Exists(Server.MapPath(strCurrPath))) { var fileInfo = new FileInfo(Server.MapPath(strCurrPath)); var dir = fileInfo.Directory.FullName; var absUrl = URIHelper.ConvertAbsPathToAbsUrl(dir); strCurrPath = URIHelper.ConvertAbsUrlToTilda(absUrl); } if(strCurrPath.StartsWith("~/")) { strCurrPath = strCurrPath.Replace("~/", "/"); } if ((strCurrPath == "") || strCurrPath.Contains("//") || !Directory.Exists(Server.MapPath(strCurrPath))) strCurrPath = defaultRootPath; if (strCurrPath.Contains(baseUrl)) { strCurrPath = strCurrPath.Replace(baseUrl, ""); } strCurrPath = strCurrPath.Replace("/", "\\").Replace("\\\\", "\\"); // load config this.objConfig = new clsConfig(strProfile); //check inputs if (this.strCurrPath.Length > 0) { this.strCurrPath = this.strCurrPath.TrimEnd('\\'); if (!this.strCurrPath.EndsWith("\\")) this.strCurrPath = this.strCurrPath + "\\"; } //set the apply string, based on the passed type if (this.strType == "") { this.strType = "0"; } switch (this.strType) { case "1": this.strApply = "apply_img"; this.boolOnlyImage = true; this.strAllowedFileExt = this.objConfig.strAllowedImageExtensions; break; case "2": this.strApply = "apply_link"; this.strAllowedFileExt = this.objConfig.strAllowedAllExtensions; break; default: if (Convert.ToInt32(this.strType) >= 3) { this.strApply = "apply_video"; this.boolOnlyVideo = true; this.strAllowedFileExt = this.objConfig.strAllowedVideoExtensions; } else { this.strApply = "apply"; this.strAllowedFileExt = this.objConfig.strAllowedAllExtensions; } break; } //setup current link strCurrLink = "dialog.aspx?type=" + this.strType + "&editor=" + this.strEditor + "&lang=" + this.strLang + "&profile=" + this.strProfile + "&targetId=" + Request["targetId"]; switch (strCmd) { case "debugsettings": Response.Write("<style>"); Response.Write("body {font-family: Verdana; font-size: 10pt;}"); Response.Write(".table {display: table; border-collapse: collapse; margin: 20px; background-color: #e7e5e5;}"); Response.Write(".tcaption {display: table-caption; padding: 5px; font-size: 14pt; font-weight: bold; background-color: #9fcff7;}"); Response.Write(".tr {display: table-row;}"); Response.Write(".tr:hover {background-color: #f0f2f3;}"); Response.Write(".td {display: table-cell; padding: 5px; border: 1px solid #a19e9e;}"); Response.Write("</style>"); Response.Write("<div class=\"table\">"); //start table Response.Write("<div class=\"tcaption\">Operating Settings</div>"); //caption Response.Write("<div class=\"tbody\">"); //start body Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowCreateFolder:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.boolAllowCreateFolder + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowDeleteFile:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.boolAllowDeleteFile + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowDeleteFolder:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.boolAllowDeleteFolder + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowUploadFile:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.boolAllowUploadFile + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>MaxUploadSizeMb:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.intMaxUploadSizeMb + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowedAllExtensions:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strAllowedAllExtensions + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowedFileExtensions:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strAllowedFileExtensions + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowedImageExtensions:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strAllowedImageExtensions + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowedMiscExtensions:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strAllowedMiscExtensions + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowedMusicExtensions:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strAllowedMusicExtensions + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>AllowedVideoExtensions:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strAllowedVideoExtensions + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>BaseURL:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strBaseURL + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>DocRoot:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strDocRoot + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>ThumbPath:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strThumbPath + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>ThumbURL:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strThumbURL + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>UploadPath:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strUploadPath + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>UploadURL:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strUploadURL + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>FillSelector:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strFillSelector + "</div>"); Response.Write("</div>"); //end row Response.Write("<div class=\"tr\">"); // start row Response.Write("<div class=\"td\"><b>PopupCloseCode:</b></div>"); Response.Write("<div class=\"td\">" + this.objConfig.strPopupCloseCode + "</div>"); Response.Write("</div>"); //end row Response.Write("</div>"); //end body Response.Write("</div>"); //end table Response.End(); break; case "createfolder": try { strFolder = Request.Form["folder"] + ""; //forge ahead without checking for existence //catch will save us Directory.CreateDirectory(this.objConfig.strUploadPath + "\\" + strFolder); Directory.CreateDirectory(this.objConfig.strThumbPath + "\\" + strFolder); // end response, since it's an ajax call Response.End(); } catch { //TODO: write error } break; case "upload": strFolder = Request.Form["folder"] + ""; HttpPostedFile filUpload = Request.Files["file"]; string strTargetFile; string strThumbFile; //check file was submitted if ((filUpload != null) && (filUpload.ContentLength > 0)) { var name = new FileInfo(filUpload.FileName).Name.ToLower(); strTargetFile = this.objConfig.strUploadPath + this.strFolder + name; strThumbFile = this.objConfig.strThumbPath + this.strFolder + name; filUpload.SaveAs(strTargetFile); /*if (this.isImageFile(strTargetFile)) { this.createThumbnail(strTargetFile, strThumbFile); }*/ } // end response if (Request.Form["fback"] == "true") { Response.Redirect(this.strCurrLink); } else { Response.End(); } break; case "download": FileInfo objFile = new FileInfo(this.objConfig.strUploadPath + "\\" + this.strFile); Response.ClearHeaders(); Response.AddHeader("Pragma", "private"); Response.AddHeader("Cache-control", "private, must-revalidate"); Response.AddHeader("Content-Type", "application/octet-stream"); Response.AddHeader("Content-Length", objFile.Length.ToString()); Response.AddHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(this.strFile)); Response.WriteFile(this.objConfig.strUploadPath + "\\" + this.strFile); break; case "delfile": try { File.Delete(this.objConfig.strUploadPath + "\\" + this.strFile); if (File.Exists(this.objConfig.strThumbPath + "\\" + this.strFile)) { File.Delete(this.objConfig.strThumbPath + "\\" + this.strFile); } } catch { //TODO: set error } goto default; case "delfolder": try { Directory.Delete(this.objConfig.strUploadPath + "\\" + strFolder, true); Directory.Delete(this.objConfig.strThumbPath + "\\" + strFolder, true); } catch { //TODO: set error } goto default; default: //just a regular page load if (this.strCurrPath != "") { // add "up one" folder this.objFItem = new TinyFileManager.NET.clsFileItem(); this.objFItem.strName = ".."; this.objFItem.boolIsFolder = true; this.objFItem.boolIsFolderUp = true; this.objFItem.intColNum = this.getNextColNum(); this.objFItem.strPath = this.getUpOneDir(this.strCurrPath); this.objFItem.strClassType = "dir"; this.objFItem.strDeleteLink = "<a class=\"btn erase-button top-right disabled\" title=\"Erase\"><i class=\"icon-trash\"></i></a>"; this.objFItem.strThumbImage = "img/ico/folder_return.png"; this.objFItem.strLink = "<a title=\"Open\" href=\"" + this.strCurrLink + "&currpath=" + this.objFItem.strPath + "\"><img class=\"directory-img\" src=\"" + this.objFItem.strThumbImage + "\" alt=\"folder\" /><h3>..</h3></a>"; this.arrLinks.Add(objFItem); } if (this.strCurrPath.Contains(this.objConfig.strUploadPath)) this.strCurrPath = defaultRootPath; //load folders arrFolders = Directory.GetDirectories(this.objConfig.strUploadPath + this.strCurrPath); var renameLink = "<a href='javascript:void(0)' class='btn btn-rename'><i class='fa fa-text-width' aria-hidden='true'></i></a>"; foreach (string strF in arrFolders) { this.objFItem = new TinyFileManager.NET.clsFileItem(); this.objFItem.strName = Path.GetFileName(strF); this.objFItem.boolIsFolder = true; this.objFItem.intColNum = this.getNextColNum(); this.objFItem.strPath = this.strCurrPath + Path.GetFileName(strF); this.objFItem.strClassType = "dir"; if (this.objConfig.boolAllowDeleteFolder) { this.objFItem.strDeleteLink = "<a href=\"" + this.strCurrLink + "&cmd=delfolder&folder=" + this.objFItem.strPath + "&currpath=" + this.strCurrPath + "\" class=\"btn erase-button top-right\" onclick=\"return confirm('Are you sure you want to delete this folder? NOTE: All the subfolders and files under this folder will also be deleted and there is no way of getting them back.');\" title=\"Erase\"><i class=\"icon-trash\"></i></a>"; this.objFItem.strDeleteLink = this.objFItem.strDeleteLink + renameLink; } else { this.objFItem.strDeleteLink = "<a class=\"btn erase-button top-right disabled\" title=\"Erase\"><i class=\"icon-trash\"></i></a>"; } this.objFItem.strThumbImage = "img/ico/folder.png"; this.objFItem.strLink = "<a title=\"Open\" href=\"" + this.strCurrLink + "&currpath=" + this.objFItem.strPath + "\"><img class=\"directory-img\" src=\"" + this.objFItem.strThumbImage + "\" alt=\"folder\" /><h3>" + this.objFItem.strName + "</h3></a>"; this.arrLinks.Add(objFItem); } // load files arrFiles = Directory.GetFiles(this.objConfig.strUploadPath + this.strCurrPath); foreach (string strF in arrFiles) { this.objFItem = new TinyFileManager.NET.clsFileItem(); this.objFItem.strName = Path.GetFileNameWithoutExtension(strF); this.objFItem.boolIsFolder = false; this.objFItem.strPath = this.strCurrPath + Path.GetFileName(strF); this.objFItem.boolIsImage = this.isImageFile(Path.GetFileName(strF)); this.objFItem.boolIsVideo = this.isVideoFile(Path.GetFileName(strF)); this.objFItem.boolIsMusic = this.isMusicFile(Path.GetFileName(strF)); this.objFItem.boolIsMisc = this.isMiscFile(Path.GetFileName(strF)); // check to see if it's the type of file we are looking at if ((this.boolOnlyImage && this.objFItem.boolIsImage) || (this.boolOnlyVideo && this.objFItem.boolIsVideo) || (!this.boolOnlyImage && !this.boolOnlyVideo)) { this.objFItem.intColNum = this.getNextColNum(); // get display class type if (this.objFItem.boolIsImage) { this.objFItem.strClassType = "2"; } else { if (this.objFItem.boolIsMisc) { this.objFItem.strClassType = "3"; } else { if (this.objFItem.boolIsMusic) { this.objFItem.strClassType = "5"; } else { if (this.objFItem.boolIsVideo) { this.objFItem.strClassType = "4"; } else { this.objFItem.strClassType = "1"; } } } } // get delete link if (this.objConfig.boolAllowDeleteFile) { this.objFItem.strDeleteLink = "<a href=\"" + this.strCurrLink + "&cmd=delfile&file=" + this.objFItem.strPath + "&currpath=" + this.strCurrPath + "\" class=\"btn erase-button\" onclick=\"return confirm('Are you sure you want to delete this file? NOTE: There is no way to get this file back once you delete it');\" title=\"Erase\"><i class=\"icon-trash\"></i></a>"; } else { this.objFItem.strDeleteLink = "<a class=\"btn erase-button disabled\" title=\"Erase\"><i class=\"icon-trash\"></i></a>"; } // get thumbnail image if (this.objFItem.boolIsImage) { // first check to see if thumb exists if (!File.Exists(this.objConfig.strThumbPath + this.objFItem.strPath)) { // thumb doesn't exist, create it strTargetFile = this.objConfig.strUploadPath + this.objFItem.strPath; strThumbFile = this.objConfig.strThumbPath + this.objFItem.strPath; this.createThumbnail(strTargetFile, strThumbFile); } if (this.objFItem.strPath.StartsWith("\\")) this.objFItem.strPath = this.objFItem.strPath.Substring(1); this.objFItem.strThumbImage = (this.objConfig.strThumbURL + this.objFItem.strPath.Replace('\\', '/')); } else { if (File.Exists(Directory.GetParent(Request.PhysicalPath).FullName + "\\img\\ico\\" + Path.GetExtension(strF).TrimStart('.').ToUpper() + ".png")) { this.objFItem.strThumbImage = "img/ico/" + Path.GetExtension(strF).TrimStart('.').ToUpper() + ".png"; } else { this.objFItem.strThumbImage = "img/ico/Default.png"; } } this.objFItem.strDownFormOpen = "<form action=\"dialog.aspx?cmd=download&file=" + this.objFItem.strPath + "\" method=\"post\" class=\"download-form\">"; var path = strF.Replace(Server.MapPath("~/"), "").Replace("\\", "/").Replace("///", "/"); if (!path.StartsWith("/")) path = "/" + path; if (this.objFItem.boolIsImage) { this.objFItem.strPreviewLink = "<a class=\"btn preview\" title=\"Preview\" data-url=\"" + this.objConfig.strUploadURL + "/" + this.objFItem.strPath + "\" data-toggle=\"lightbox\" href=\"#previewLightbox\"><i class=\"icon-eye-open\"></i></a><a class='btn' href='"+ baseUrl + path + "' target='_blank'><i class='fa fa-external-link'></i></a>"; } else { this.objFItem.strPreviewLink = "<a class=\"btn preview disabled\" title=\"Preview\"><i class=\"icon-eye-open\"></i></a> <a class='btn' href='" + baseUrl + path + "' target='_blank'><i class='fa fa-external-link'></i></a>"; } this.objFItem.strPreviewLink = this.objFItem.strPreviewLink + renameLink + "<a class='btn' href='/Admin/Views/PageHandlers/FileEditor/Default.aspx?LoadFile=" + path + "' target='_blank'><i class='fa fa-pencil'></i></a>"; this.objFItem.strLink = "<a href=\"#\" title=\"Select\" onclick=\"" + this.strApply + "('" + baseUrl + path + "'," + this.strType + ")\";\"><img data-src=\"holder.js/140x100\" alt=\"140x100\" src=\"" + this.objFItem.strThumbImage + "?width=200" + "\" height=\"100\"><h4>" + this.objFItem.strName + new FileInfo(this.objFItem.strPath).Extension + "</h4></a>"; this.arrLinks.Add(objFItem); } } // foreach break; } // switch } // page load
public Return FieldFrontEndFormSubmissionHandler(long fieldId) { var returnObj = BaseMapper.GenerateReturn("No action performed"); if (HttpContext.Current.Request.Form["fieldId"] == null) { returnObj = BaseMapper.GenerateReturn("'fieldId' is missing"); return(returnObj); } var field = (MediaDetailField)FieldsMapper.GetByID(fieldId); if (field == null) { returnObj = BaseMapper.GenerateReturn($"Cannot find field with id '{fieldId}'"); return(returnObj); } var FormDictionary = new Dictionary <string, string>(); foreach (string key in HttpContext.Current.Request.Form.Keys) { var value = HttpContext.Current.Request.Form[key]; if (value.Contains(",")) { value = "\"" + value + "\""; } FormDictionary.Add(key, value); } FormDictionary.Add("DateSubmitted", StringHelper.FormatDateTime(DateTime.Now)); var currentEntries = StringHelper.JsonToObject <Newtonsoft.Json.Linq.JArray>(field.FrontEndSubmissions); var files = new Dictionary <string, List <string> >(); var fileIndex = 0; foreach (string key in HttpContext.Current.Request.Files) { var postedFile = HttpContext.Current.Request.Files[fileIndex]; var uploadFolder = MediaDetailField.GetUploadFolder(field); if (!uploadFolder.Exists) { uploadFolder.Create(); } var fieldName = postedFile.FileName.ToLower().Replace(" ", "-"); var uploadFilePath = uploadFolder.FullName + key + "_" + fieldName; postedFile.SaveAs(uploadFilePath); var relativePath = URIHelper.ConvertAbsPathToAbsUrl(uploadFilePath); if (files.ContainsKey(key)) { files[key].Add(relativePath); } else { files.Add(key, new List <string>() { relativePath }); } fileIndex++; } var jObjectUploadFiles = JObject.Parse(StringHelper.ObjectToJson(files)); var jsonEntry = new JavaScriptSerializer().Serialize(FormDictionary); var jObject = JObject.Parse(jsonEntry); jObject.Merge(jObjectUploadFiles); if (currentEntries == null) { currentEntries = new JArray(); currentEntries.Add(jObject); } else { currentEntries.Add(jObject); } field.FrontEndSubmissions = currentEntries.ToString(Formatting.None); returnObj = FieldsMapper.Update(field); var formFieldSettings = StringHelper.JsonToObject <FormFieldSettings>(field.FieldSettings); if (formFieldSettings != null && !string.IsNullOrEmpty(formFieldSettings.EmailTemplateMediaID) && long.TryParse(formFieldSettings.EmailTemplateMediaID, out long i)) { var media = MediasMapper.GetByID(long.Parse(formFieldSettings.EmailTemplateMediaID)); if (media != null) { var layout = MediaDetailsMapper.ParseSpecialTags(media.GetLiveMediaDetail()); var parsedLayout = ParserHelper.ParseData(layout, jObject); EmailHelper.Send(AppSettings.SystemEmailAddress, EmailHelper.GetMailAddressesFromString(formFieldSettings.EmailAddress), formFieldSettings.Subject, parsedLayout, (AppSettings.AttemptSMTPMailer)? EmailHelper.EmailMode.Both : EmailHelper.EmailMode.Direct); } } return(returnObj); }