예제 #1
0
        /// <summary>
        /// comment
        /// </summary>
        /// <param name="comment"></param>
        /// <param name="poemId"></param>
        /// <param name="inReplytoId"></param>
        /// <param name="coupletIndex"></param>
        /// <returns></returns>
        public async Task <ActionResult> OnPostComment(string comment, int poemId, int inReplytoId, int coupletIndex)
        {
            using (HttpClient secureClient = new HttpClient())
            {
                if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
                {
                    var stringContent = new StringContent(
                        JsonConvert.SerializeObject
                        (
                            new GanjoorCommentPostViewModel()
                    {
                        HtmlComment  = comment,
                        InReplyToId  = inReplytoId == 0 ? null : inReplytoId,
                        PoemId       = poemId,
                        CoupletIndex = coupletIndex == -1 ? null : coupletIndex
                    }
                        ),
                        Encoding.UTF8, "application/json");
                    var response = await secureClient.PostAsync($"{APIRoot.Url}/api/ganjoor/comment", stringContent);

                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        GanjoorCommentSummaryViewModel resComment = JsonConvert.DeserializeObject <GanjoorCommentSummaryViewModel>(await response.Content.ReadAsStringAsync());
                        resComment.MyComment = true;

                        return(new PartialViewResult()
                        {
                            ViewName = "_CommentPartial",
                            ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                            {
                                Model = new _CommentPartialModel()
                                {
                                    Comment = resComment,
                                    Error = "",
                                    InReplyTo = inReplytoId == 0 ? null : new GanjoorCommentSummaryViewModel(),
                                    LoggedIn = !string.IsNullOrEmpty(Request.Cookies["Token"])
                                }
                            }
                        });
                    }
                    else
                    {
                        return(new PartialViewResult()
                        {
                            ViewName = "_CommentPartial",
                            ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                            {
                                Model = new _CommentPartialModel()
                                {
                                    Comment = null,
                                    Error = JsonConvert.DeserializeObject <string>(await response.Content.ReadAsStringAsync()),
                                    InReplyTo = null,
                                    LoggedIn = !string.IsNullOrEmpty(Request.Cookies["Token"])
                                }
                            }
                        });
                    }
                }
                else
                {
                    return(new PartialViewResult()
                    {
                        ViewName = "_CommentPartial",
                        ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                        {
                            Model = new _CommentPartialModel()
                            {
                                Comment = null,
                                Error = "لطفا از گنجور خارج و مجددا به آن وارد شوید.",
                                InReplyTo = null
                            }
                        }
                    });
                }
            }
        }
예제 #2
0
        /// <summary>
        /// get
        /// </summary>
        public async Task <IActionResult> OnGetAsync()
        {
            if (string.IsNullOrEmpty(Request.Cookies["Token"]))
            {
                return(Redirect("/"));
            }

            LastError  = "";
            TotalCount = 0;
            Skip       = string.IsNullOrEmpty(Request.Query["skip"]) ? 0 : int.Parse(Request.Query["skip"]);
            EditMode   = !string.IsNullOrEmpty(Request.Query["id"]);
            using (HttpClient secureClient = new HttpClient())
            {
                if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
                {
                    var trackResponse = await secureClient.GetAsync(
                        EditMode?
                        $"{APIRoot.Url}/api/ganjoor/song/{Request.Query["id"]}"
                        :
                        $"{APIRoot.Url}/api/ganjoor/song?skip={Skip}&onlyMine=false"
                        );

                    if (!trackResponse.IsSuccessStatusCode)
                    {
                        LastError = JsonConvert.DeserializeObject <string>(await trackResponse.Content.ReadAsStringAsync());
                    }
                    else
                    {
                        if (!EditMode)
                        {
                            string paginnationMetadata = trackResponse.Headers.GetValues("paging-headers").FirstOrDefault();
                            if (!string.IsNullOrEmpty(paginnationMetadata))
                            {
                                TotalCount = JsonConvert.DeserializeObject <PaginationMetadata>(paginnationMetadata).totalCount;
                            }
                        }

                        PoemMusicTrackViewModel = JsonConvert.DeserializeObject <PoemMusicTrackViewModel>(await trackResponse.Content.ReadAsStringAsync());

                        PoemMusicTrackViewModel.ArtistName = PoemMusicTrackViewModel.ArtistName.ToPersianNumbers().ApplyCorrectYeKe();
                        PoemMusicTrackViewModel.AlbumName  = PoemMusicTrackViewModel.AlbumName.ToPersianNumbers().ApplyCorrectYeKe();
                        PoemMusicTrackViewModel.TrackName  = PoemMusicTrackViewModel.TrackName.ToPersianNumbers().ApplyCorrectYeKe();


                        var poemResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poem/{PoemMusicTrackViewModel.PoemId}?catInfo=false&rhymes=false&recitations=false&images=false&songs=false&comments=false&verseDetails=false&navigation=false");

                        if (poemResponse.IsSuccessStatusCode)
                        {
                            Poem = JsonConvert.DeserializeObject <GanjoorPoemCompleteViewModel>(await poemResponse.Content.ReadAsStringAsync());
                        }
                        else
                        {
                            LastError = "لطفا از گنجور خارج و مجددا به آن وارد شوید.";
                        }

                        if (!EditMode)
                        {
                            var userHistoryResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/song/user/stats/{PoemMusicTrackViewModel.SuggestedById}");

                            if (userHistoryResponse.IsSuccessStatusCode)
                            {
                                UserSongSuggestionsHistory = JsonConvert.DeserializeObject <UserSongSuggestionsHistory>(await userHistoryResponse.Content.ReadAsStringAsync());
                            }
                            else
                            {
                                LastError = "لطفا از گنجور خارج و مجددا به آن وارد شوید.";
                            }
                        }
                    }
                }
                else
                {
                    LastError = "لطفا از گنجور خارج و مجددا به آن وارد شوید.";
                }
            }
            return(Page());
        }
예제 #3
0
        public async Task <IActionResult> OnPostAsync()
        {
            Skip = string.IsNullOrEmpty(Request.Query["skip"]) ? 0 : int.Parse(Request.Query["skip"]);

            if (Request.Form["next"].Count == 1)
            {
                return(Redirect($"/User/ReviewSongs/?skip={Skip + 1}"));
            }

            EditMode = !string.IsNullOrEmpty(Request.Query["id"]);
            if (EditMode)
            {
                using (HttpClient secureClient = new HttpClient())
                {
                    if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
                    {
                        if (Request.Form["approve"].Count == 1)
                        {
                            PoemMusicTrackViewModel.Approved = true;
                            var putResponse = await secureClient.PutAsync($"{APIRoot.Url}/api/ganjoor/song/update", new StringContent(JsonConvert.SerializeObject(PoemMusicTrackViewModel), Encoding.UTF8, "application/json"));

                            if (!putResponse.IsSuccessStatusCode)
                            {
                                LastError = JsonConvert.DeserializeObject <string>(await putResponse.Content.ReadAsStringAsync());
                            }
                        }
                        else
                        {
                            var delResponse = await secureClient.DeleteAsync($"{APIRoot.Url}/api/ganjoor/song?id={Request.Query["id"]}");

                            if (!delResponse.IsSuccessStatusCode)
                            {
                                LastError = JsonConvert.DeserializeObject <string>(await delResponse.Content.ReadAsStringAsync());
                            }
                        }
                    }
                    else
                    {
                        LastError = "لطفا از گنجور خارج و مجددا به آن وارد شوید.";
                    }
                }
            }
            else
            {
                PoemMusicTrackViewModel.Approved = Request.Form["approve"].Count == 1;
                PoemMusicTrackViewModel.Rejected = (Request.Form["reject1"].Count + Request.Form["reject2"].Count + Request.Form["reject3"].Count) > 0;
                if (string.IsNullOrEmpty(PoemMusicTrackViewModel.RejectionCause))
                {
                    if (Request.Form["reject1"].Count == 1)
                    {
                        PoemMusicTrackViewModel.RejectionCause = "در آهنگ این شعر خوانده نشده";
                    }
                    else
                    if (Request.Form["reject2"].Count == 1)
                    {
                        PoemMusicTrackViewModel.RejectionCause = "لینک یا اطلاعات آهنگ ایراد دارد";
                    }
                }

                using (HttpClient secureClient = new HttpClient())
                {
                    if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
                    {
                        var putResponse = await secureClient.PutAsync($"{APIRoot.Url}/api/ganjoor/song", new StringContent(JsonConvert.SerializeObject(PoemMusicTrackViewModel), Encoding.UTF8, "application/json"));

                        if (!putResponse.IsSuccessStatusCode)
                        {
                            LastError = JsonConvert.DeserializeObject <string>(await putResponse.Content.ReadAsStringAsync());
                        }
                    }
                    else
                    {
                        LastError = "لطفا از گنجور خارج و مجددا به آن وارد شوید.";
                    }
                }
            }

            if (!string.IsNullOrEmpty(LastError))
            {
                return(Page());
            }

            return(Redirect($"/User/ReviewSongs/?skip={Skip}"));
        }
        public async Task <IActionResult> OnGetAsync()
        {
            if (string.IsNullOrEmpty(Request.Cookies["Token"]))
            {
                return(Redirect("/"));
            }

            LastError = "";
            using (HttpClient secureClient = new HttpClient())
                if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
                {
                    {
                        int pageNumber = 1;
                        if (!string.IsNullOrEmpty(Request.Query["page"]))
                        {
                            pageNumber = int.Parse(Request.Query["page"]);
                        }
                        int poemId = 0;
                        if (!string.IsNullOrEmpty(Request.Query["id"]))
                        {
                            poemId = int.Parse(Request.Query["id"]);
                        }
                        var response = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poem/{poemId}/corrections/effective?PageNumber={pageNumber}&PageSize=20");

                        if (!response.IsSuccessStatusCode)
                        {
                            LastError = JsonConvert.DeserializeObject <string>(await response.Content.ReadAsStringAsync());
                            return(Page());
                        }

                        Corrections = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject <List <GanjoorPoemCorrectionViewModel> >();

                        string paginnationMetadata = response.Headers.GetValues("paging-headers").FirstOrDefault();
                        if (!string.IsNullOrEmpty(paginnationMetadata))
                        {
                            PaginationMetadata paginationMetadata = JsonConvert.DeserializeObject <PaginationMetadata>(paginnationMetadata);
                            PaginationLinks = new List <NameIdUrlImage>();
                            if (paginationMetadata.totalPages > 1)
                            {
                                if (paginationMetadata.currentPage > 3)
                                {
                                    PaginationLinks.Add
                                    (
                                        new NameIdUrlImage()
                                    {
                                        Name = "صفحهٔ اول",
                                        Url  = "/User/PoemCorrectionsHistory?page=1"
                                    }
                                    );
                                }
                                for (int i = (paginationMetadata.currentPage - 2); i <= (paginationMetadata.currentPage + 2); i++)
                                {
                                    if (i >= 1 && i <= paginationMetadata.totalPages)
                                    {
                                        if (i == paginationMetadata.currentPage)
                                        {
                                            PaginationLinks.Add
                                            (
                                                new NameIdUrlImage()
                                            {
                                                Name = i.ToPersianNumbers(),
                                            }
                                            );
                                        }
                                        else
                                        {
                                            PaginationLinks.Add
                                            (
                                                new NameIdUrlImage()
                                            {
                                                Name = i.ToPersianNumbers(),
                                                Url  = $"/User/PoemCorrectionsHistory?page={i}"
                                            }
                                            );
                                        }
                                    }
                                }
                                if (paginationMetadata.totalPages > (paginationMetadata.currentPage + 2))
                                {
                                    PaginationLinks.Add
                                    (
                                        new NameIdUrlImage()
                                    {
                                        Name = "... ",
                                    }
                                    );

                                    PaginationLinks.Add
                                    (
                                        new NameIdUrlImage()
                                    {
                                        Name = "صفحهٔ آخر",
                                        Url  = $"/User/PoemCorrectionsHistory?page={paginationMetadata.totalPages}"
                                    }
                                    );
                                }
                            }
                        }
                    }
                }
                else
                {
                    LastError = "لطفا از گنجور خارج و مجددا به آن وارد شوید.";
                }
            return(Page());
        }
예제 #5
0
        public async Task <IActionResult> OnPostAsync()
        {
            RedirectUrl = Request.Query["redirect"];
            if (string.IsNullOrEmpty(RedirectUrl))
            {
                RedirectUrl = "/";
            }

            if (!ModelState.IsValid)
            {
                return(Page());
            }

            LoginViewModel.ClientAppName = "GanjooRazor";
            LoginViewModel.Language      = "fa-IR";

            using (HttpClient client = new HttpClient())
            {
                if (string.IsNullOrEmpty(LoginViewModel.Username))
                {
                    if (await GanjoorSessionChecker.PrepareClient(client, Request, Response))
                    {
                        var logoutUrl = $"{APIRoot.Url}/api/users/delsession?userId={Request.Cookies["UserId"]}&sessionId={Request.Cookies["SessionId"]}";
                        await client.DeleteAsync(logoutUrl);
                    }


                    var cookieOption = new CookieOptions()
                    {
                        Expires = DateTime.Now.AddDays(-1)
                    };
                    foreach (var cookieName in new string[] { "UserId", "SessionId", "Token", "Username", "Name", "Permissions" })
                    {
                        if (Request.Cookies[cookieName] != null)
                        {
                            Response.Cookies.Append(cookieName, "", cookieOption);
                        }
                    }



                    return(Page());
                }
                else
                {
                    var stringContent = new StringContent(JsonConvert.SerializeObject(LoginViewModel), Encoding.UTF8, "application/json");
                    var loginUrl      = $"{APIRoot.Url}/api/users/login";
                    var response      = await client.PostAsync(loginUrl, stringContent);

                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        LastError = await response.Content.ReadAsStringAsync();

                        return(Page());
                    }

                    LoggedOnUserModel loggedOnUser = JsonConvert.DeserializeObject <LoggedOnUserModel>(await response.Content.ReadAsStringAsync());

                    var cookieOption = new CookieOptions()
                    {
                        Expires = DateTime.Now.AddDays(365),
                    };

                    Response.Cookies.Append("UserId", loggedOnUser.User.Id.ToString(), cookieOption);
                    Response.Cookies.Append("SessionId", loggedOnUser.SessionId.ToString(), cookieOption);
                    Response.Cookies.Append("Token", loggedOnUser.Token, cookieOption);
                    Response.Cookies.Append("Username", loggedOnUser.User.Username, cookieOption);
                    Response.Cookies.Append("Name", $"{loggedOnUser.User.FirstName} {loggedOnUser.User.SureName}", cookieOption);

                    List <string> permissions = new List <string>();
                    foreach (var securableItem in loggedOnUser.SecurableItem)
                    {
                        foreach (var operation in securableItem.Operations)
                        {
                            if (operation.Status)
                            {
                                permissions.Add($"{securableItem.ShortName}-{operation.ShortName}");
                            }
                        }
                    }
                    Response.Cookies.Append("Permissions", JsonConvert.SerializeObject(permissions.ToArray()), cookieOption);
                }
            }

            LastError = "Success!";


            return(Redirect(RedirectUrl));
        }
예제 #6
0
        public async Task <IActionResult> OnGetAsync()
        {
            ErrorMessage = "";

            CanTranslate = false;
            if (!string.IsNullOrEmpty(Request.Cookies["Token"]))
            {
                await GanjoorSessionChecker.ApplyPermissionsToViewData(Request, Response, ViewData);

                if (ViewData.ContainsKey($"{RMuseumSecurableItem.GanjoorEntityShortName}-{RMuseumSecurableItem.Translations}"))
                {
                    CanTranslate = true;
                }
            }



            PoemId = int.Parse(Request.Query["p"]);

            ViewData["GoogleAnalyticsCode"] = _configuration["GoogleAnalyticsCode"];

            HttpResponseMessage responseLanguages = await _httpClient.GetAsync($"{APIRoot.Url}/api/translations/languages");

            if (!responseLanguages.IsSuccessStatusCode)
            {
                ErrorMessage = JsonConvert.DeserializeObject <string>(await responseLanguages.Content.ReadAsStringAsync());
                return(Page());
            }

            var allLanguages = JsonConvert.DeserializeObject <GanjoorLanguage[]>(await responseLanguages.Content.ReadAsStringAsync());

            HttpResponseMessage response = await _httpClient.GetAsync($"{APIRoot.Url}/api/translations/poem/{PoemId}/published");

            if (!response.IsSuccessStatusCode)
            {
                ErrorMessage = JsonConvert.DeserializeObject <string>(await response.Content.ReadAsStringAsync());
                return(Page());
            }

            Translations = JsonConvert.DeserializeObject <GanjoorPoemTranslationViewModel[]>(await response.Content.ReadAsStringAsync());

            LanguageId = string.IsNullOrEmpty(Request.Query["lang"]) ? -1 : int.Parse(Request.Query["lang"]);

            List <GanjoorLanguage> poemLanguages = new List <GanjoorLanguage>();

            foreach (var lang in allLanguages)
            {
                if (Translations.Where(t => t.Language.Id == lang.Id).FirstOrDefault() != null)
                {
                    poemLanguages.Add(lang);
                }
            }
            if (LanguageId != -1)
            {
                if (!poemLanguages.Where(l => l.Id == LanguageId).Any())
                {
                    poemLanguages.Add(allLanguages.Where(l => l.Id == LanguageId).Single());
                }
            }
            Languages = poemLanguages.ToArray();

            if (LanguageId != -1)
            {
                Translations = Translations.Where(t => t.Language.Id == LanguageId).ToArray();
            }

            Translation = Translations.Length > 0 ? Translations[0] : null;

            if (Translation != null)
            {
                LanguageId = Translation.Language.Id;
            }
            var responsePoem = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poem/{PoemId}?verseDetails=true&catInfo=true&rhymes=false&recitations=false&images=false&songs=false&comments=false&navigation=true");

            if (!responsePoem.IsSuccessStatusCode)
            {
                ErrorMessage = JsonConvert.DeserializeObject <string>(await responsePoem.Content.ReadAsStringAsync());
                return(Page());
            }
            Poem = JsonConvert.DeserializeObject <GanjoorPoemCompleteViewModel>(await responsePoem.Content.ReadAsStringAsync());
            return(Page());
        }