Example #1
0
        public HKMediaModel PostDeleteMediaOrphans(List <MediaToDeleteModel> mediaOrphansToDelete)
        {
            string filePath = HttpContext.Current.Server.MapPath(GlobalSettings.Path + "/../media/");

            ListMediaWarnings = new List <MediaWarningModel>();
            ListMediaToDelete = new List <MediaToDeleteModel>();

            foreach (MediaToDeleteModel mediaOrphan in mediaOrphansToDelete)
            {
                var dirPathToDelete = filePath + mediaOrphan.Entry + "\\";

                if (Directory.Exists(dirPathToDelete))
                {
                    Directory.Delete(dirPathToDelete, true);

                    // ### MEDIA DELETED ###
                    var mediaDeletedModel = new MediaToDeleteModel
                    {
                        Entry   = mediaOrphan.Entry,
                        Message = Services.TextService.Localize("FALM/MediaManager.Cleanup.Deleted")
                    };
                    ListMediaToDelete.Add(mediaDeletedModel);
                }
                else
                {
                    // MEDIA IGNORED - NON STANDARD FOLDER
                    var mediaWarningModel = new MediaWarningModel
                    {
                        Entry   = mediaOrphan.Entry,
                        Message = Services.TextService.Localize("FALM/MediaManager.Cleanup.FolderNotFound")
                    };
                    ListMediaWarnings.Add(mediaWarningModel);
                }
            }

            MediaModel.ListMediaToDelete = ListMediaToDelete;
            MediaModel.ListMediaWarnings = ListMediaWarnings;

            return(MediaModel);
        }
Example #2
0
        public HKMediaModel GetMediaToDelete(string userLocale)
        {
            ListMediaWarnings = new List <MediaWarningModel>();
            ListMediaToDelete = new List <MediaToDeleteModel>();

            var currentUserCultureInfo = CultureInfo.GetCultureInfo(userLocale);

            try
            {
                // Find all media to be deleted and relative warning messages
                var filePath = HttpContext.Current.Server.MapPath(GlobalSettings.Path + "/../media/");

                // Check if the files are stored in the /media folder root with a unique ID prefixed to the filename
                if (UmbracoConfig.For.UmbracoSettings().Content.UploadAllowDirectories)
                {
                    var strSqlGetMedia = "SELECT SUBSTRING(cmsPropertyData.dataNvarchar, 8, CHARINDEX('/', cmsPropertyData.dataNvarchar, 8) - 8) AS pId ";
                    strSqlGetMedia += "FROM cmsPropertyData INNER JOIN cmsPropertyType ON cmsPropertyData.propertytypeid = cmsPropertyType.id ";
                    strSqlGetMedia += "WHERE (dataNvarchar LIKE '%media/%') AND (cmsPropertyType.Alias = 'umbracoFile') ";
                    strSqlGetMedia += "UNION ";
                    strSqlGetMedia += "SELECT SUBSTRING(";
                    strSqlGetMedia += "    SUBSTRING(";
                    strSqlGetMedia += "        cmsPropertyData.dataNtext, ";
                    strSqlGetMedia += "        CHARINDEX('/media/', cmsPropertyData.dataNtext) + 7, ";
                    strSqlGetMedia += "        LEN(RTRIM(CAST(cmsPropertyData.dataNtext as NVARCHAR(4000))))";
                    strSqlGetMedia += "    ), ";
                    strSqlGetMedia += "    0, ";
                    strSqlGetMedia += "    CHARINDEX('/', ";
                    strSqlGetMedia += "        SUBSTRING(";
                    strSqlGetMedia += "            cmsPropertyData.dataNtext, ";
                    strSqlGetMedia += "            CHARINDEX('/media/', cmsPropertyData.dataNtext) + 7, ";
                    strSqlGetMedia += "            LEN(RTRIM(CAST(cmsPropertyData.dataNtext as NVARCHAR(4000))))";
                    strSqlGetMedia += "        )";
                    strSqlGetMedia += "    )";
                    strSqlGetMedia += ")";
                    strSqlGetMedia += "FROM cmsPropertyData INNER JOIN cmsPropertyType ON cmsPropertyData.propertytypeid = cmsPropertyType.id ";
                    strSqlGetMedia += "WHERE (dataNtext LIKE '%media/%') AND (cmsPropertyType.Alias = 'umbracoFile') ";
                    strSqlGetMedia += "ORDER BY pId";

                    // Show orphan directories
                    using (var db = HkDbHelper.ResolveDatabase())
                    {
                        var allMediaPId = db.Fetch <MediaPIdModel>(strSqlGetMedia);

                        // Create an array with the list of media directories
                        var dir     = new DirectoryInfo(filePath);
                        var subDirs = dir.GetDirectories();

                        var mediaToSkip = new List <string>();

                        // Sort Directories by name
                        Array.Sort(subDirs, delegate(DirectoryInfo d1, DirectoryInfo d2)
                        {
                            int n1, n2;

                            if (int.TryParse(d1.Name, out n1) && int.TryParse(d2.Name, out n2))
                            {
                                return(n1 - n2);
                            }
                            return(string.CompareOrdinal(d1.Name, d2.Name));
                        });

                        foreach (var subDir in subDirs)
                        {
                            // Do check only if the folder have a number as a name (STANDARD FOLDER)
                            MediaWarningModel mediaWarningModel;

                            int iDirectoryName, pId;

                            if (int.TryParse(subDir.Name, out iDirectoryName))
                            {
                                var mediaAlreadyAddedToDeleteList = false;

                                MediaToDeleteModel mediaToDeleteModel;
                                if (allMediaPId.Count > 0)
                                {
                                    foreach (var media in allMediaPId)
                                    {
                                        if (int.TryParse(media.PId, out pId))
                                        {
                                            if (!mediaToSkip.Contains(pId.ToString()))
                                            {
                                                if (iDirectoryName == pId)
                                                {
                                                    mediaToSkip.Add(subDir.Name);
                                                    break;
                                                }
                                                if (iDirectoryName < pId)
                                                {
                                                    // Check if the folder is used by data type that not store image informations (like Image Cropper)
                                                    int mediaCount = 0;

                                                    mediaCount += GetCountFromCmsContentXml(db, subDir.Name);

                                                    mediaCount += GetCountFromCmsPropertyData(db, subDir.Name);

                                                    // The Media is deletable if it isn't used
                                                    if ((mediaCount == 0) && (!mediaAlreadyAddedToDeleteList))
                                                    {
                                                        // MEDIA FOUND IN FILE SYSTEM BUT NO CORRISPONDATION INTO DB OR BY DATATYPE UPLOAD
                                                        // ### DELETEBLE ###
                                                        mediaToDeleteModel = new MediaToDeleteModel
                                                        {
                                                            Entry   = subDir.Name,
                                                            Message = Services.TextService.Localize("FALM/MediaManager.Cleanup.Contains", currentUserCultureInfo) + " " + subDir.GetFileSystemInfos().Length + " " + Services.TextService.Localize("FALM/MediaManager.Cleanup.Items", currentUserCultureInfo)
                                                        };
                                                        ListMediaToDelete.Add(mediaToDeleteModel);
                                                        mediaToSkip.Add(subDir.Name);
                                                        mediaAlreadyAddedToDeleteList = true;
                                                    }
                                                    else
                                                    {
                                                        if (!mediaAlreadyAddedToDeleteList)
                                                        {
                                                            mediaWarningModel = new MediaWarningModel
                                                            {
                                                                Entry   = subDir.Name,
                                                                Message = "###" + Services.TextService.Localize("FALM/MediaManager.Cleanup.FolderFoundInFileSystemAndUploadedTroughDatatype", currentUserCultureInfo)
                                                            };
                                                            ListMediaWarnings.Add(mediaWarningModel);
                                                            mediaToSkip.Add(subDir.Name);
                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            // MEDIA IGNORED - NO MATCH STANDARD FORMAT INTO DB
                                            mediaWarningModel = new MediaWarningModel
                                            {
                                                Entry   = pId.ToString(),
                                                Message = Services.TextService.Localize("FALM/MediaManager.Cleanup.DBNotMatchFormat", currentUserCultureInfo) + " '/media/&lt;propertyid&gt;/'"
                                            };
                                            ListMediaWarnings.Add(mediaWarningModel);
                                        }
                                    }
                                }

                                if (!mediaToSkip.Contains(subDir.Name))
                                {
                                    // Check if the folder is used by data type that not store image informations (like Image Cropper)
                                    var mediaCount = 0;

                                    mediaCount += GetCountFromCmsContentXml(db, subDir.Name);

                                    mediaCount += GetCountFromCmsPropertyData(db, subDir.Name);

                                    // If the media is not used...it is deletable
                                    if (mediaCount == 0)
                                    {
                                        // MEDIA FOUND IN FILE SYSTEM BUT NO CORRISPONDATION INTO DB OR BY DATATYPE UPLOAD
                                        // ### DELETEBLE ###
                                        mediaToDeleteModel = new MediaToDeleteModel
                                        {
                                            Entry   = subDir.Name,
                                            Message = Services.TextService.Localize("FALM/MediaManager.Cleanup.Contains", currentUserCultureInfo) + " " + subDir.GetFileSystemInfos().Length + " " + Services.TextService.Localize("FALM/MediaManager.Cleanup.Items", currentUserCultureInfo)
                                        };
                                        ListMediaToDelete.Add(mediaToDeleteModel);
                                    }
                                    else
                                    {
                                        // MEDIA FOUND IN FILE SYSTEM AND UPLOADED TROUGH DATATYPE
                                        mediaWarningModel = new MediaWarningModel
                                        {
                                            Entry   = subDir.Name,
                                            Message = Services.TextService.Localize("FALM/MediaManager.Cleanup.FoundInFileSystemAndUploadedTroughDatatype", currentUserCultureInfo)
                                        };
                                        ListMediaWarnings.Add(mediaWarningModel);
                                    }
                                }
                            }
                            else
                            {
                                // MEDIA IGNORED - NON STANDARD FOLDER
                                mediaWarningModel = new MediaWarningModel
                                {
                                    Entry   = subDir.Name,
                                    Message = Services.TextService.Localize("FALM/MediaManager.Cleanup.FolderNameNotNumber", currentUserCultureInfo)
                                };
                                ListMediaWarnings.Add(mediaWarningModel);
                            }
                        }
                        //}
                        //else
                        //{
                        //    return null;
                        //}
                    }
                }

                MediaModel.ListMediaToDelete = ListMediaToDelete;
                MediaModel.ListMediaWarnings = ListMediaWarnings;
            }
            catch (Exception ex)
            {
                LogHelper.Error <Exception>(ex.Message, ex);
                return(MediaModel);
            }

            return(MediaModel);
        }