Exemplo n.º 1
0
        /// <summary>
        /// create a record
        /// </summary>
        /// <param name="id"></param>
        /// <param name="begin"></param>
        /// <param name="end"></param>
        /// <param name="who"></param>
        /// <returns></returns>
        public static Msg Create(Guid id, DateTime begin, DateTime end, string who)
        {
            var msg = new Msg();

            try
            {
                using (var db = new GarfielderEntities())
                {
                    var dbm = new TopicElected()
                    {
                        CreatedAt = DateTime.Now,
                        CreatedBy = who,
                        DateBegin = begin,
                        DateEnd   = end,
                        Id        = id
                    };
                    db.AddToTopicElecteds(dbm);
                    db.SaveChanges();
                    ClearCache();
                }
            }
            catch (Exception ex)
            {
                msg.Error = true;
                msg.Body  = ex.Message;
            }
            return(msg);
        }
Exemplo n.º 2
0
        /// <summary>
        /// save a item.update if exists
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static dynamic Save(VMGroupEdit obj)
        {
            var msg = new Msg();
            var dbm = default(Group);

            obj.Slug = string.IsNullOrEmpty(obj.Slug) ? obj.Name.CHSToPinyin("-").ToLower() : obj.Slug.ToLower();

            //validate name existence
            if (!ValidateName(obj.Name, obj.Id.ToString()))
            {
                msg.Error = true;
                msg.Body  = string.Format("Name [{0}] exists,please choose another one!", obj.Name);
                return(msg);
            }
            ;

            using (var db = new GarfielderEntities())
            {
                if (obj.IsNew)//add new
                {
                    obj.Id        = Guid.NewGuid();
                    dbm           = new Group();
                    dbm.Id        = obj.Id;
                    dbm.CreatedAt = DateTime.Now;
                    //TODO
                    dbm.CreatedBy = "Sys";
                    db.AddToGroups(dbm);
                }
                else
                { //update
                    dbm = db.Groups.SingleOrDefault(x => x.Id.Equals(obj.Id));
                    if (dbm == null)
                    { //has been deleted!
                        msg.Error = true;
                        msg.Body  = string.Format("Obj {0} has been deleted!", obj.Id);
                        return(msg);
                    }
                }//if

                dbm.Name        = obj.Name;
                dbm.Slug        = Group.CheckSlug(db, obj.Slug);
                dbm.Description = obj.Description;

                dbm.ParentID = obj.ParentID.Equals(Guid.Empty) ? default(Guid?) : obj.ParentID;
                dbm.Level    = obj.Level;


                db.CommandTimeout = 0;
                db.SaveChanges();

                //clear cache
                ClearCache();

                if (dbm.Parent != null)
                {
                    obj.ParentName = dbm.Parent.Name;
                }
            };//using
            return(obj);
        }
Exemplo n.º 3
0
        /// <summary>
        /// delete a record
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static Msg Delete(Guid id)
        {
            var msg = new Msg();

            try
            {
                var goOn = TopicElected.Exists(id);
                if (!goOn)
                {
                    msg.Error = true;
                    msg.Body  = string.Format("Topic {0} doesn't exist!", id);
                }
                else
                {
                    var dbm = ListAll().Single(x => x.Id.Equals(id));
                    using (var db = new GarfielderEntities())
                    {
                        db.Attach(dbm);
                        db.DeleteObject(dbm);
                        db.SaveChanges();
                        ClearCache();
                    }//using
                }
            }
            catch (Exception ex)
            {
                msg.Error = true;
                msg.Body  = ex.Message;
            }
            return(msg);
        }
Exemplo n.º 4
0
        /// <summary>
        /// delete by specified id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static Msg DeleteByID(params Guid[] id)
        {
            var r = new Msg();

            if (id == null || id.Length == 0)
            {
                r.Error = true;
                r.Body  = "No selected items to be deleted!";
                return(r);
            }
            using (var db = new GarfielderEntities())
            {
                try
                {
                    var items = db.XFiles.Where(x => id.Contains(x.Id)).ToList();
                    items.ForEach(obj =>
                    {
                        obj.Topics.Clear();
                        db.XFiles.DeleteObject(obj);
                    });
                    db.SaveChanges();
                    ClearCache();
                }
                catch (Exception ex)
                {
                    r.Error = true;
                    r.Body  = ex.Message;
                }
            }            //using
            return(r);
        }
Exemplo n.º 5
0
        /// <summary>
        /// update logo field
        /// </summary>
        /// <param name="img"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static Msg UpdateLogo(string img, string id)
        {
            var msg = new Msg();

            if (string.IsNullOrWhiteSpace(img))
            {
                msg.Error = true;
                msg.Body  = "No Logo specified!";
                return(msg);
            }
            try
            {
                var gid   = Guid.Parse(id);
                var topic = default(Topic);
                using (var db = new GarfielderEntities())
                {
                    topic = db.Topics.SingleOrDefault(x => x.Id.Equals(gid));
                    if (topic != null)
                    {
                        topic.Logo = img;
                        db.SaveChanges();
                    }
                }
            }catch (Exception ex)
            {
                msg.Error = true;
                msg.Body  = ex.Message;
            }
            return(msg);
        }
Exemplo n.º 6
0
        }     //ListFileData

        /// <summary>
        /// Detach files
        /// </summary>
        /// <param name="topicID"></param>
        /// <param name="fileID"></param>
        /// <returns></returns>
        public static Msg DetachFiles(Guid topicID, params Guid[] fileID)
        {
            var msg = new Msg();

            try
            {
                using (var db = new GarfielderEntities())
                {
                    var obj = db.Topics.SingleOrDefault(x => x.Id.Equals(topicID));
                    if (obj == null || obj.XFiles.Count == 0)
                    {
                        msg.Error = true;
                        msg.Body  = string.Format("Topic with id [{0}] not exists or it has no attachments!", topicID);
                        return(msg);
                    }//if

                    //delete all attached files
                    if (fileID == null || fileID.Length == 0)
                    {
                        obj.XFiles.Clear();
                        db.SaveChanges();
                        return(msg);
                    }//if

                    //delete specified files
                    var items = obj.XFiles.Where(x => !fileID.Contains(x.Id));
                    obj.XFiles.Clear();
                    items.ToList().ForEach(x => obj.XFiles.Add(x));
                    db.SaveChanges();
                } //using
            }catch (Exception ex)
            {
                //TODO:log
                msg.Error = true;
                msg.Body  = ex.Message;
            }//try
            return(msg);
        }
Exemplo n.º 7
0
        /// <summary>
        /// save a tag object.Update if exists
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static dynamic Save(VMTagEdit obj)
        {
            var dbm = default(Tag);

            obj.Slug = string.IsNullOrEmpty(obj.Slug) ? obj.Name.CHSToPinyin("-").ToLower() : obj.Slug.ToLower();
            var msg = new Msg();

            //validate name
            if (!ValidateName(obj.Name, obj.Id.ToString()))
            {
                msg.Error = true;
                msg.Body  = string.Format("Name [{0}] exists!Please choose another one!", obj.Name);
                return(msg);
            }
            ;
            using (var db = new GarfielderEntities())
            {
                if (obj.IsNew)//add new
                {
                    obj.Id        = Guid.NewGuid();
                    dbm           = new Tag();
                    dbm.Id        = obj.Id;
                    dbm.CreatedAt = DateTime.Now;
                    //TODO
                    dbm.CreatedBy = "Sys";
                    db.AddToTags(dbm);
                }
                else
                { //update
                    dbm = db.Tags.SingleOrDefault(x => x.Id.Equals(obj.Id));
                    if (dbm == null)
                    { //has been deleted!
                        msg.Error = true;
                        msg.Body  = string.Format("Obj {0} has been deleted!", obj.Id);
                        return(msg);
                    }
                }//if



                dbm.Name          = obj.Name;
                dbm.Slug          = Tag.CheckSlug(db, obj.Slug);
                db.CommandTimeout = 0;
                db.SaveChanges();
                ClearCache();
            };//using
            return(obj);
        }
Exemplo n.º 8
0
        /// <summary>
        /// add a simple tag
        /// </summary>
        /// <param name="name"></param>
        /// <param name="slug"></param>
        /// <returns></returns>
        public static VMTagEdit QuickAddTag(string name, string slug = null, string user = "******")
        {
            var retVal = new VMTagEdit();

            if (string.IsNullOrWhiteSpace(name))
            {
                retVal.Error = true;
                retVal.Msg   = "Tag name can't be blank";
                return(retVal);
            }
            ;

            retVal.Name = name;
            retVal.Slug = string.IsNullOrWhiteSpace(slug) ? name.CHSToPinyin("-") : slug.CHSToPinyin("-");
            retVal.Slug = retVal.Slug.ToLower();

            using (var db = new GarfielderEntities()) {
                var dbm = db.Tags.SingleOrDefault(x => x.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
                if (dbm != null)
                {
                    retVal.Id = dbm.Id;
                }
                else
                {
                    retVal.Id = Guid.NewGuid();
                    //add a new tag
                    dbm           = new Tag();
                    dbm.Id        = retVal.Id;
                    dbm.Name      = retVal.Name;
                    dbm.Slug      = CheckSlug(db, retVal.Slug);
                    dbm.CreatedAt = DateTime.Now;
                    //TODO:
                    dbm.CreatedBy = user;
                    db.AddToTags(dbm);
                    //persist
                    db.CommandTimeout = 0;
                    db.SaveChanges();
                    ClearCache();
                };
            };//using
            return(retVal);
        }
Exemplo n.º 9
0
        }//SaveFile

        private static void AttachToTopic(string topicID, GarfielderEntities db, XFile file)
        {
            //refID proccess
            var objID = Guid.Parse(topicID);

            if (objID == Guid.Empty)
            {
                return;
            }
            var obj = file.Topics.SingleOrDefault(x => x.Id == objID);

            //exists
            if (obj != null)
            {
                return;
            }
            //attach
            file.Topics.Add(db.Topics.Single(x => x.Id.Equals(objID)));
            db.SaveChanges();
        }
 public ActionResult EditFile(VMXFileEdit obj)
 {
     if (this.ModelState.IsValid)
     {
         using (var db = new GarfielderEntities())
         {
             var dbm = db.XFiles.SingleOrDefault(x => x.Id == obj.Id);
             if (dbm != null)
             {
                 dbm.Title         = obj.Title;
                 dbm.Description   = obj.Description;
                 db.CommandTimeout = 0;
                 db.SaveChanges();
             }
             ;
         };
     }
     ;
     return(View(obj));
 }
 public ActionResult EditUser(VMUserEdit obj)
 {
     if (this.ModelState.IsValid)
     {
         var dbm = new User();
         dbm.Id        = Guid.NewGuid();
         dbm.Name      = obj.Name;
         dbm.Nickname  = obj.Nickname;
         dbm.Email     = obj.Email;
         dbm.Password  = obj.Password;
         dbm.CreatedAt = DateTime.Now;
         //TODO:
         dbm.CreatedBy = "Sys";
         using (var db = new GarfielderEntities())
         {
             db.CommandTimeout = 0;
             db.AddToUsers(dbm);
             db.SaveChanges();
         };
     }
     ;
     return(View(obj));
 }
Exemplo n.º 12
0
        /// <summary>
        /// Save current file uploaded
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        public static VMXFileEdit SaveFile(HttpRequestBase req)
        {
            var vm = new VMXFileEdit();

            vm.NoFlash = true;


            if (req.Files.Count == 0 || req.Files[0].FileName == "" || req.Files[0].ContentLength == 0)
            {
                vm.Error = true;
                vm.Msg   = "No file selected!Please select a file to upload!";
                return(vm);
            }
            ;
            var refid    = req.Params["RefId"];
            var uid      = req.Params["UserID"];
            var uname    = req.Params["UserName"];
            var fileName = req.Files[0].FileName.CHSToPinyin("-").ToLower();
            var path0    = getFileName(uname, fileName);                                           //虚拟路径
            var path1    = Path.Combine(_uploadsFolder, uname, DateTime.Now.ToString("yyyyMMdd")); //物理路径

            //db op
            using (var db = new GarfielderEntities())
            {
                var dbm = db.XFiles.SingleOrDefault(x => x.Name == path0);
                if (dbm == null)
                {
                    //save to disk
                    vm.Name = path0;

                    if (!Directory.Exists(path1))
                    {
                        Directory.CreateDirectory(path1);
                    }

                    try
                    {
                        vm.Title       = req.Files[0].FileName;
                        vm.Description = vm.Title;
                        vm.Extension   = vm.Name.Substring(vm.Name.LastIndexOf("."));

                        vm.Id        = Guid.NewGuid();
                        vm.CreatedAt = DateTime.Now;

                        path1 = string.Format("{0}\\{1}", path1, fileName);
                        req.Files[0].SaveAs(path1);

                        //图片缩略图处理);
                        if (IsImg(vm.Extension))
                        {
                            //大图800x600
                            var tempObj = ImageResizer.GetThumbnail(path1, GetImgName(path1, ImageFlags.L800X600), 800, 600, true);
                            vm.MetaData.Width  = tempObj.RawSize.Width;
                            vm.MetaData.Height = tempObj.RawSize.Height;

                            //原图
                            vm.MetaData.AddThumb(ImageFlags.RAW,
                                                 string.Format("{0}{1}",
                                                               Garfielder.Web.Utils.AbsoluteWebRoot, vm.Name),
                                                 vm.MetaData.Width, vm.MetaData.Height);

                            if (!tempObj.Error)
                            {
                                vm.MetaData.AddThumb(ImageFlags.L800X600,
                                                     string.Format("{0}{1}_800x600{2}",
                                                                   Garfielder.Web.Utils.AbsoluteWebRoot, vm.Name1,
                                                                   vm.Extension), tempObj.NewSize.Width, tempObj.NewSize.Height);
                            }
                            //中大图500x500
                            tempObj = ImageResizer.GetThumbnail(path1, GetImgName(path1, ImageFlags.L500X500), 500, 500, true);
                            if (!tempObj.Error)
                            {
                                vm.MetaData.AddThumb(ImageFlags.L500X500,
                                                     string.Format("{0}{1}_500x500{2}",
                                                                   Garfielder.Web.Utils.AbsoluteWebRoot, vm.Name1,
                                                                   vm.Extension), tempObj.NewSize.Width, tempObj.NewSize.Height);
                            }
                            //中
                            tempObj = ImageResizer.GetThumbnail(path1, GetImgName(path1, ImageFlags.M300X300), 300, 300, true);
                            if (!tempObj.Error)
                            {
                                vm.MetaData.AddThumb(ImageFlags.M300X300,
                                                     string.Format("{0}{1}_300x300{2}",
                                                                   Garfielder.Web.Utils.AbsoluteWebRoot, vm.Name1,
                                                                   vm.Extension), tempObj.NewSize.Width, tempObj.NewSize.Height);
                            }
                            //中小图
                            tempObj = ImageResizer.GetThumbnail(path1, GetImgName(path1, ImageFlags.M160X160), 160, 160, true);
                            if (!tempObj.Error)
                            {
                                vm.MetaData.AddThumb(ImageFlags.M160X160,
                                                     string.Format("{0}{1}_160x160{2}",
                                                                   Garfielder.Web.Utils.AbsoluteWebRoot, vm.Name1,
                                                                   vm.Extension), tempObj.NewSize.Width, tempObj.NewSize.Height);
                            }
                            tempObj = ImageResizer.GetThumbnail(path1, GetImgName(path1, ImageFlags.S160X100), 160, 100);
                            if (!tempObj.Error)
                            {
                                vm.MetaData.AddThumb(ImageFlags.S160X100,
                                                     string.Format("{0}{1}_160x100{2}",
                                                                   Garfielder.Web.Utils.AbsoluteWebRoot, vm.Name1,
                                                                   vm.Extension), tempObj.NewSize.Width, tempObj.NewSize.Height);
                            }
                            //小
                            tempObj = ImageResizer.GetThumbnail(path1, GetImgName(path1, ImageFlags.S64X64), 64, 64);
                            if (!tempObj.Error)
                            {
                                vm.MetaData.AddThumb(ImageFlags.S64X64,
                                                     string.Format("{0}{1}_64x64{2}",
                                                                   Garfielder.Web.Utils.AbsoluteWebRoot, vm.Name1,
                                                                   vm.Extension), tempObj.NewSize.Width, tempObj.NewSize.Height);
                            }
                        }
                        ; //IsImg

                        dbm             = new XFile();
                        dbm.Id          = vm.Id;
                        dbm.Name        = path0;
                        dbm.Url         = path0;
                        dbm.Title       = vm.Title;
                        dbm.Description = vm.Description;
                        dbm.Extension   = vm.Extension;
                        dbm.CreatedAt   = dbm.ModifiedAt = vm.CreatedAt;
                        dbm.Meta        = vm.Meta;

                        dbm.UserID        = Guid.Parse(uid);
                        db.CommandTimeout = 0;
                        db.AddToXFiles(dbm);
                        db.SaveChanges();
                        ClearCache();
                        //attach to topic
                        AttachToTopic(refid, db, dbm);
                    }
                    catch (Exception ex)
                    {
                        //TODO:log
                        vm.Error = true;
                        vm.Msg   = ex.Message;
                    }//TRY
                }
                else
                {
                    //FILE Exists
                    vm.Error = true;
                    vm.Msg   = string.Format("File {0} exists!", path0);
                    //attach to topic
                    AttachToTopic(refid, db, dbm);
                };
            };//using
            return(vm);
        }//SaveFile
        [HttpPost, ValidateInput(false)]/* TODO:MVC3正式版时可以将ValidateInput注释掉,因为ContentX有AllowHtml属性 */
        public ActionResult EditTopic(VMCampTopicShow obj)
        {
            if (this.ModelState.IsValid)
            {
                var dbm = default(Topic);
                using (var db = new GarfielderEntities())
                {
                    if (obj.IsNew)
                    {
                        obj.CreateAt  = DateTime.Now;
                        obj.Id        = Guid.NewGuid();
                        dbm           = new Topic();
                        dbm.CreatedAt = dbm.PublishedAt = obj.CreateAt;
                        dbm.Published = true;
                        dbm.Id        = obj.Id;
                        db.AddToTopics(dbm);
                    }
                    else
                    {
                        dbm = db.Topics.SingleOrDefault(x => x.Id == obj.Id);
                        if (dbm == null)
                        {
                            obj.Error = true;
                            obj.Msg   = string.Format("Topic with id [{0}] has been deleted!", obj.Id);
                            return(View(obj));
                        }
                    }
                    dbm.Title    = obj.Title;
                    dbm.ContentX = obj.ContentX;

                    dbm.Slug        = string.IsNullOrWhiteSpace(obj.Slug) ? obj.Title.CHSToPinyin("-") : obj.Slug.CHSToPinyin("-");
                    dbm.Description = dbm.ContentX;
                    //save to db
                    var msg = Topic.ValidateSlug(dbm.Slug, db);
                    dbm.Slug       = msg.Context["Slug"].ToString();
                    dbm.ModifiedAt = DateTime.Now;

                    obj.Logo = dbm.Logo;

                    db.Attach(CurrentUser);
                    dbm.User = CurrentUser;
                    db.SaveChanges();

                    //tags
                    if (obj.TagID != null && obj.TagID.Count > 0)
                    {
                        dbm.Tags.Clear();

                        obj.TagID.ForEach(x => dbm.Tags.Add(db.Tags.Single(y => y.Id.Equals(x))));
                    }
                    //groups
                    if (obj.GroupID != null && obj.GroupID.Count > 0)
                    {
                        dbm.Groups.Clear();

                        obj.GroupID.ForEach(
                            x => dbm.Groups.Add(db.Groups.Single(y => y.Id.Equals(x)))
                            );
                    }
                    //保存关系表

                    db.SaveChanges();

                    //update tags and groups
                    obj.Groups = dbm.Groups.ToList();
                    obj.Tags   = dbm.Tags.ToList();
                }//using
            }
            ;
            return(View(obj));
        }//edit topic