Beispiel #1
0
        /// <summary>
        /// creates a new CmsResource object from an Adobe file (is PDF, PSD, AI)
        /// </summary>
        /// <param name="imageFilename"></param>
        /// <returns></returns>
        public static CmsLocalFileOnDisk CreateFomAdobeDocument(string adobeFilename)
        {
            CmsLocalFileOnDisk ret = new CmsLocalFileOnDisk();

            ret.filename      = Path.GetFileName(adobeFilename);
            ret.filepath      = adobeFilename;
            ret.fileDirectory = Path.GetDirectoryName(adobeFilename);
            ret.MimeType      = PageUtils.MimeTypeLookup(Path.GetExtension(adobeFilename));

            if (File.Exists(adobeFilename))
            {
                FileInfo fi = new FileInfo(adobeFilename);


                ret.FileSize      = fi.Length;
                ret.FileTimestamp = fi.LastWriteTime;

                MetaDataItem[] metaData = MetaDataUtils.GetXmpData(adobeFilename);
                ret.MetaData = CmsLocalFileOnDiskMetaItem.FromMetaDataItems(ret, metaData);
            }

            return(ret);
        }
Beispiel #2
0
            } // Get

            public CmsLocalFileOnDisk GetResourceByFilename(string filename)
            {
                string sql = "select AutoIncId, ResourceId, RevisionNumber, Filename, FilePath, FileDirectory, FileSize, FileTimestamp, MimeType, ModifiedBy, ModificationDate from resourceitems ";

                sql += " where LOWER(FilePath) = '" + dbEncode(filename.ToLower()) + "' AND deleted is null order by ResourceId, RevisionNumber DESC ; ";

                DataSet ds = this.RunSelectQuery(sql);

                if (this.hasRows(ds))
                {
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        CmsLocalFileOnDisk res = ResourceFromDataRow(dr);
                        int lastExistingRevNum = getLastExistingRevisionNumber(res.ResourceId);

                        if (lastExistingRevNum == res.RevisionNumber)
                        {
                            res.MetaData = CmsLocalFileOnDiskMetaItem.FetchAll(res);
                            return(res);
                        }
                    } // foreach
                }
                return(new CmsLocalFileOnDisk());
            }
Beispiel #3
0
        public static CmsLocalFileOnDisk CreateFromFile(string filenameOnDisk)
        {
            CmsLocalFileOnDisk ret = new CmsLocalFileOnDisk();

            ret.filename      = Path.GetFileName(filenameOnDisk);
            ret.filepath      = filenameOnDisk;
            ret.fileDirectory = Path.GetDirectoryName(filenameOnDisk);
            ret.MimeType      = PageUtils.MimeTypeLookup(Path.GetExtension(filenameOnDisk));

            if (File.Exists(filenameOnDisk))
            {
                FileInfo fi = new FileInfo(filenameOnDisk);


                ret.FileSize      = fi.Length;
                ret.FileTimestamp = fi.LastWriteTime;

                MetaDataItem[] metaData = new MetaDataItem[0];
                if (MetaDataUtils.CanExtractImageMetaData(filenameOnDisk))
                {
                    metaData = MetaDataUtils.GetFromImageFile(filenameOnDisk);
                }
                else if (MetaDataUtils.CanExtractOLEMetaData(filenameOnDisk))
                {
                    metaData = MetaDataUtils.GetFromOLEDocument(filenameOnDisk);
                }
                else if (MetaDataUtils.CanExtractXmpData(filenameOnDisk))
                {
                    metaData = MetaDataUtils.GetXmpData(filenameOnDisk);
                }

                ret.MetaData = CmsLocalFileOnDiskMetaItem.FromMetaDataItems(ret, metaData);
            }

            return(ret);
        }
Beispiel #4
0
 public static new CmsLocalImageOnDisk[] UpdateFolderInDatabase(DirectoryInfo di)
 {
     CmsLocalFileOnDisk[] arr = CmsLocalFileOnDisk.UpdateFolderInDatabase(di);
     return(FromFileArray(arr));
 }
Beispiel #5
0
 public static CmsLocalImageOnDisk ConvertFileToImageObj(CmsLocalFileOnDisk file)
 {
     return(new CmsLocalImageOnDisk(file));
 }
Beispiel #6
0
 public static CmsLocalImageOnDisk[] FetchAllImagesInDirectory(string directoryPath)
 {
     return(FromFileArray(CmsLocalFileOnDisk.FetchAllFilesInDirectory(directoryPath)));
 }
Beispiel #7
0
 public static CmsLocalImageOnDisk[] FetchAllImagesInDirectory(DirectoryInfo di)
 {
     return(FromFileArray(CmsLocalFileOnDisk.FetchAllFilesInDirectory(di.FullName)));
 }
Beispiel #8
0
 public static CmsLocalImageOnDisk[] FetchAllImagesInDirectory(string directoryPath, string[] fileExtensions)
 {
     return(FromFileArray(CmsLocalFileOnDisk.FetchAllFilesInDirectory(directoryPath, fileExtensions)));
 }
Beispiel #9
0
        } // CreateFromImageFile

        public static CmsLocalImageOnDisk[] FetchAllImagesInDirectory(DirectoryInfo di, string[] fileExtensions)
        {
            return(FromFileArray(CmsLocalFileOnDisk.FetchAllFilesInDirectory(di.FullName, fileExtensions)));
        }
Beispiel #10
0
            protected CmsLocalFileOnDisk[] ResourcesWithMetaItemsFromDataRows(DataRowCollection rows)
            {
                Dictionary <int, CmsLocalFileOnDisk> resources = new Dictionary <int, CmsLocalFileOnDisk>();

                foreach (DataRow dr in rows)
                {
                    int resId = Convert.ToInt32(dr["ResourceId"]);
                    CmsLocalFileOnDisk item;
                    if (resources.ContainsKey(resId))
                    {
                        item = resources[resId];
                    }
                    else
                    {
                        item           = new CmsLocalFileOnDisk();
                        item.autoincid = Convert.ToInt32(dr["AutoIncId"]);

                        item.resourceid = resId;

                        item.revisionnumber = Convert.ToInt32(dr["RevisionNumber"]);

                        item.filename = (dr["Filename"]).ToString();

                        item.filepath = (dr["FilePath"]).ToString();

                        item.fileDirectory = (dr["FileDirectory"]).ToString();

                        item.filesize = Convert.ToInt64(dr["FileSize"]);

                        item.filetimestamp = Convert.ToDateTime(dr["FileTimestamp"]);

                        item.mimetype = (dr["MimeType"]).ToString();

                        // -- note: if the following line causes an exception, flush the resourceitems and resourceitemmetadata tables.
                        //          ie: run the following SQL: "truncate table resourceitems; truncate table resourceitemmetadata;"
                        //          all captions will be lost and will need to be re-created.
                        item.modifiedby = Convert.ToInt32(dr["ModifiedBy"]);

                        item.modificationdate = Convert.ToDateTime(dr["ModificationDate"]);
                    }

                    if (dr["metaId"] != DBNull.Value)
                    {
                        CmsLocalFileOnDiskMetaItem metaItem = new CmsLocalFileOnDiskMetaItem();
                        metaItem.autoincid              = Convert.ToInt32(dr["metaId"]);
                        metaItem.ResourceId             = resId;
                        metaItem.ResourceRevisionNumber = item.RevisionNumber;
                        metaItem.Name      = dr["metaName"].ToString();
                        metaItem.ItemValue = dr["metaValue"].ToString();

                        item.metaData.Add(metaItem);
                    }

                    if (!resources.ContainsKey(resId))
                    {
                        resources.Add(resId, item);
                    }
                } // foreach

                return((new List <CmsLocalFileOnDisk>(resources.Values)).ToArray());
            }
Beispiel #11
0
            } // Update

            public bool Delete(int ResourceId, int RevisionNumber, bool deletePhysicalFiles)
            {
                CmsLocalFileOnDisk resToDelete = Get(ResourceId, RevisionNumber);

                if (resToDelete.ResourceId != ResourceId)
                {
                    return(false);
                }

                string renamedFilename       = "";
                string renamedFilenameOnDisk = "";

                // remove all derivative thumbnail images
                if (deletePhysicalFiles)
                {
                    foreach (CmsLocalFileOnDiskMetaItem meta in resToDelete.MetaData)
                    {
                        if (meta.Name.StartsWith("IMAGEThumb") && meta.Name.EndsWith("URL") && meta.ItemValue.IndexOf(".aspx") == -1)
                        {
                            string thumbFilename = System.Web.Hosting.HostingEnvironment.MapPath(meta.ItemValue);
                            try
                            {
                                File.Delete(thumbFilename);
                            }
                            catch
                            { }
                        } // if
                    }     // foreach

                    // -- rename the actual file on disk
                    renamedFilename = DeletedFileFilenamePrefix + DateTime.Now.ToString("yyyyMMdd.HH.mm.ss.") + resToDelete.FileName;
                    string currentFilenameOnDisk = resToDelete.FilePath;
                    renamedFilenameOnDisk = Path.GetDirectoryName(currentFilenameOnDisk) + Path.DirectorySeparatorChar + renamedFilename;

                    try
                    {
                        if (System.IO.File.Exists(currentFilenameOnDisk))
                        {
                            System.IO.File.Move(currentFilenameOnDisk, renamedFilenameOnDisk);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.Write(e.Message);
                        return(false);
                    }
                } // if deletePhysicalFiles
                else
                {
                    renamedFilename       = resToDelete.filename;
                    renamedFilenameOnDisk = resToDelete.filepath;
                }
                // update the database

                string sql = "UPDATE resourceitems ";

                sql += " set deleted = " + dbEncode(DateTime.Now) + ", Filename = '" + dbEncode(renamedFilename) + "', FilePath = '" + dbEncode(renamedFilenameOnDisk) + "' ";
                sql += " WHERE ResourceId = " + ResourceId.ToString() + " AND RevisionNumber = " + RevisionNumber.ToString() + " ";
                int numAffected = this.RunUpdateQuery(sql);

                if (numAffected < 0)
                {
                    return(false);
                }
                return(true);
            }
Beispiel #12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="directoryInfo"></param>
        /// <returns></returns>
        public static CmsLocalFileOnDisk[] UpdateFolderInDatabase(DirectoryInfo directoryInfo)
        {
            List <CmsLocalFileOnDisk> existingResources = new List <CmsLocalFileOnDisk>(FetchAllFilesInDirectory(directoryInfo.FullName));

            List <CmsLocalFileOnDisk> ret = new List <CmsLocalFileOnDisk>();

            foreach (FileInfo fi in directoryInfo.GetFiles())
            {
                if (fi.Name.StartsWith(DeletedFileFilenamePrefix)) // skip deleted files
                {
                    continue;
                }

                CmsLocalFileOnDisk res = GetByFilename(fi.FullName, existingResources.ToArray());
                bool doSave            = false;
                if (res.FilePath == fi.FullName)
                {
                    if (res.FileSize != fi.Length || res.FileTimestamp.ToString("yyyy-MM-dd HH:mm:ss") != fi.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"))
                    {
                        // update file
                        CmsLocalFileOnDisk resBak = res;
                        res = CreateFromFile(fi.FullName);

                        res.autoincid      = resBak.autoincid;
                        res.resourceid     = resBak.resourceid;
                        res.revisionnumber = resBak.revisionnumber;

                        doSave = true;
                    }
                    else
                    {
                        doSave = false; // filetime has not changed
                    }
                }
                else
                {
                    // insert
                    res    = CreateFromFile(fi.FullName);
                    doSave = true;
                }


                if (doSave)
                {
                    if (!res.SaveToDatabase())
                    {
                        return(new CmsLocalFileOnDisk[0]);
                    }
                }
                else
                {
                    int idToRemove = -1;
                    for (int i = 0; i < existingResources.Count; i++)
                    {
                        if (String.Compare(existingResources[i].FilePath, res.FilePath, true) == 0)
                        {
                            idToRemove = i;
                            break;
                        }
                    } // for
                    if (idToRemove >= 0)
                    {
                        existingResources.RemoveAt(idToRemove);
                    }
                }
                ret.Add(res);
            } // foreach

            // -- remove other existingResources that no longer exist on disk
            foreach (CmsLocalFileOnDisk res in existingResources)
            {
                CmsLocalFileOnDisk.Delete(res, false);
            }


            return(ret.ToArray());
        }
Beispiel #13
0
        } // get

        public static bool Delete(CmsLocalFileOnDisk resource, bool deletePhysicalFiles)
        {
            return((new CmsResourceDB()).Delete(resource.resourceid, resource.revisionnumber, deletePhysicalFiles));
        } // Delete
        } // getAll

        public static bool BulkInsert(CmsLocalFileOnDisk item, CmsLocalFileOnDiskMetaItem[] subItems)
        {
            return((new CmsResourceMetaItemDB()).BulkInsert(item, subItems));
        } // getAll
        } // SaveToDatabase

        public static CmsLocalFileOnDiskMetaItem[] FetchAll(CmsLocalFileOnDisk parentResource)
        {
            return((new CmsResourceMetaItemDB()).FetchAllForFile(parentResource));
        } // getAll