/// <summary>
        /// Renders the view.
        /// </summary>
        /// <returns></returns>
        public ManagePhotosView RenderView(string view, ManagePhotoPostView postView, Func<List<Media>> retrieve)
        {
            ManagePhotosView managePhotosView = RenderMedia(postView, retrieve, "ManagedPhotoView");
            managePhotosView.BreadCrumbs = SetBreadCrumb(view);
            managePhotosView.TabName = view;
            managePhotosView.RenderAdminTags = _tagService.HyperlinkTheAdminTags;

            return managePhotosView;
        }
        /// <summary>
        /// Gets the view.
        /// </summary>
        /// <param name="viewLink">The view link.</param>
        /// <param name="postView">The post view.</param>
        /// <param name="retrieveMedia">The retrieve media.</param>
        /// <param name="user">The user.</param>
        /// <param name="authorization">The authorization.</param>
        /// <returns></returns>
        public ManagePhotosView GetView(string viewLink, ManagePhotoPostView postView, Func<List<Media>> retrieveMedia, Domain.Model.User user, Authorization authorization)
        {
            IEnumerable<IRenderManagePhotoView> photoViews = Implementions(user, authorization);
            IRenderManagePhotoView view = new GetManagePhotoView(user, _tagService, authorization);

            foreach (IRenderManagePhotoView photoView in photoViews.Where(photoView => string.Equals(photoView.ButtonName, postView.Submit, StringComparison.InvariantCultureIgnoreCase)))
            {
                view = photoView;
                break;
            }

            return view.RenderView(viewLink, postView, retrieveMedia);
        }
        /// <summary>
        /// Photoes the view.
        /// </summary>
        /// <param name="viewLink">The view link.</param>
        /// <param name="postView">The post view.</param>
        /// <param name="media">The media.</param>
        /// <returns></returns>
        public ActionResult PhotoView(string viewLink, ManagePhotoPostView postView, List<Media> media)
        {
            int page = (string.IsNullOrEmpty(postView.CP) ? 1 : Convert.ToInt32(postView.CP));
            string queryValues = (string.IsNullOrEmpty(postView.Text)
                                      ? "?cp=" + page
                                      : "?cp=" + page + "&text=" + HttpUtility.HtmlEncode(postView.Text));
            ManagePhotosView view = GetManagePhotoView(viewLink, postView, () => media);
            view = SetAuthorizationAndUrlService(view);

            view.Set = persistentCollectionService.Set(Authorization.Owner.Username + "Photos" + viewLink + "_" + postView.Text, media, Persistence.Permanent);
            persistentCollectionService.SetBackUrl(Authorization.Owner.Username + "/photos/" + viewLink + "/" + queryValues, SiteCookie);

            return View("Index", view);
        }
        /// <summary>
        /// Renders the view.
        /// </summary>
        /// <param name="viewLink">The view link.</param>
        /// <param name="postView">The post view.</param>
        /// <param name="retrieve"></param>
        /// <returns></returns>
        public ManagePhotosView RenderView(string viewLink, ManagePhotoPostView postView, Func<List<Media>> retrieve)
        {
            AddTagsToMedia(postView);

            ManagePhotosView managePhotosView = RenderMedia(postView, retrieve, "ManagedPhotoView");
            managePhotosView.UIMessage = (postView.MediaId != null ? string.Format("Tags were successfully added to {0} photo(s)", postView.MediaId.Length) : string.Empty);
            managePhotosView.BreadCrumbs = SetBreadCrumb(viewLink);

            managePhotosView.TabName = viewLink;
            managePhotosView.RenderAdminTags = _tagService.HyperlinkTheAdminTags;
            managePhotosView.Authorization = authorization;

            return managePhotosView;
        }
        /// <summary>
        /// Renders the view.
        /// </summary>
        /// <param name="view">The view.</param>
        /// <param name="postView">The post view.</param>
        /// <param name="retrieve">The retrieve.</param>
        /// <returns></returns>
        public ManagePhotosView RenderView(string view, ManagePhotoPostView postView, Func<List<Media>> retrieve)
        {
            UpdatePhotosWithApplyAction(postView);

            ManagePhotosView managePhotosView = RenderMedia(postView, retrieve, "ManagedPhotoView");
            managePhotosView.RenderAdminTags = _tagService.HyperlinkTheAdminTags;

            managePhotosView.BreadCrumbs = SetBreadCrumb(view);
            CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
            string viewName = cultureInfo.TextInfo.ToTitleCase(postView.MediaStatus);
            string friendlyViewName = (string.Equals(viewName, "Innetwork", StringComparison.InvariantCultureIgnoreCase)
                                           ? "In Network"
                                           : viewName);
            if (postView.MediaId != null && postView.MediaId.Length > 0)
            {
                managePhotosView.UIMessage = string.Format("{0} photo(s) moved to {1}.",
                                                           postView.MediaId.Length, friendlyViewName);
            }

            managePhotosView.TabName = view;
            return managePhotosView;
        }
 /// <summary>
 /// Gets the manage photo view.
 /// </summary>
 /// <param name="view">The view.</param>
 /// <param name="managePhotoPostView">The manage photo post view.</param>
 /// <param name="retreiveMedia">The retreive media.</param>
 /// <returns></returns>
 private ManagePhotosView GetManagePhotoView(string view, ManagePhotoPostView managePhotoPostView, Func<List<Media>> retreiveMedia)
 {
     return _managePhotoService.GetView(view, managePhotoPostView, retreiveMedia, Owner, Authorization);
 }
        /// <summary>
        /// Updates the photos with apply action.
        /// </summary>
        /// <param name="postView">The post view.</param>
        private void UpdatePhotosWithApplyAction(ManagePhotoPostView postView)
        {
            MediaStatus mediaStatus = postView.MediaStatus.ParseEnum<MediaStatus>();

            if (postView.MediaId != null && postView.MediaId.Length > 0)
            {
                mediaRepository.UpdateStatus(postView.MediaId, user.Id, mediaStatus);
            }
        }
        public ActionResult Search(ManagePhotoPostView postView)
        {
            List<Media> search = new List<Media>();
            if (postView != null && !string.IsNullOrEmpty(postView.Text))
            {
                search = _mediaRepository.SearchByTextAndUserId(postView.Text, Owner.Id);
            }

            // ReSharper disable PossibleNullReferenceException
            postView.Submit = "search";
            // ReSharper restore PossibleNullReferenceException

            return PhotoView("search", postView, search);
        }
 public ActionResult Public(ManagePhotoPostView postView)
 {
     List<Media> media = _mediaRepository.RetrievePublic(Owner.Id);
     return PhotoView("public", postView, media);
 }
 public ActionResult Private(ManagePhotoPostView postView)
 {
     List<Media> list = _mediaRepository.RetrievePrivate(Owner.Id);
     return PhotoView("private", postView, list);
 }
 public ActionResult InNetwork(ManagePhotoPostView postView)
 {
     List<Media> list = _mediaRepository.RetrieveInNetwork(Owner.Id);
     return PhotoView("innetwork", postView, list);
 }
 public ActionResult Index(ManagePhotoPostView postView)
 {
     List<Media> list = _mediaRepository.RetrievePublic(Owner.Id);
     return PhotoView("public", postView, list);
 }
        /// <summary>
        /// Renders the apply action.
        /// </summary>
        /// <param name="postView">The post view.</param>
        /// <param name="retrieve">The retrieve.</param>
        /// <param name="viewName">Name of the view.</param>
        /// <param name="format">The format.</param>
        /// <returns></returns>
        protected ManagePhotosView RenderMedia(ManagePhotoPostView postView, Func<List<Media>> retrieve, string viewName, string format)
        {
            ManagePhotosView view = new ManagePhotosView();
            List<Media> media = retrieve();

            int index = (string.IsNullOrEmpty(postView.CP) ? 1 : Convert.ToInt32(postView.CP));

            view.MediaStatusCount = mediaRepository.GetMediaStatusCountByUserId(user.Id);
            view.Pagination = _paginationService;
            view.TotalResults = media.Count;
            view.PartialView = viewName;
            view.UIMessage = string.Empty;
            view.Authorization = authorization;
            view.Pagination.GeneratePaging(media, index, 20, format);

            return view;
        }
 /// <summary>
 /// Renders the media.
 /// </summary>
 /// <param name="postView">The post view.</param>
 /// <param name="retrieve">The retrieve.</param>
 /// <param name="viewName">Name of the view.</param>
 /// <returns></returns>
 protected ManagePhotosView RenderMedia(ManagePhotoPostView postView, Func<List<Media>> retrieve, string viewName)
 {
     return RenderMedia(postView, retrieve, viewName, "?cp={0}");
 }
        /// <summary>
        /// Adds the tags to media.
        /// </summary>
        /// <param name="postView">The post view.</param>
        private void AddTagsToMedia(ManagePhotoPostView postView)
        {
            TagCollection tagCollection = new TagCollection(postView.Tags);
            List<Media> mediae = mediaRepository.RetrieveByMediaIds(postView.MediaId, user.Id);

            if (postView.MediaId != null)
            {
                foreach (int id in postView.MediaId)
                {
                    int mediaId = id;
                    Media media = mediae.Where(o => mediaId == o.MediaId).First();

                    TagCollection currentTags = new TagCollection(media.Tags);
                    IEnumerable<Tag> newTags = JoinTags(tagCollection, currentTags);
                    media.AddTags(newTags);

                    _updateTagService.UpdateTags(media.Tags, mediaId, user);
                }
            }
        }