Exemple #1
0
        public async Task <IActionResult> AddOrUpdatePoemTranslation([FromBody] GanjoorPoemTranslationViewModel translation)
        {
            if (ReadOnlyMode)
            {
                return(BadRequest("سایت به دلایل فنی مثل انتقال سرور موقتاً در حالت فقط خواندنی قرار دارد. لطفاً ساعاتی دیگر مجدداً تلاش کنید."));
            }
            Guid userId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
            var  res    = await _translationService.AddPoemTranslation(userId, translation);

            if (!string.IsNullOrEmpty(res.ExceptionString))
            {
                return(BadRequest(res.ExceptionString));
            }
            return(Ok(res.Result));
        }
Exemple #2
0
        /// <summary>
        /// add or update poem translation
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="translation"></param>
        /// <returns></returns>
        public async Task <RServiceResult <GanjoorPoemTranslationViewModel> > AddPoemTranslation(Guid userId, GanjoorPoemTranslationViewModel translation)
        {
            try
            {
                if (translation.Published)
                {
                    var oldPublished = await _context.GanjoorPoemTranslations.Include(t => t.Language).Where(t => t.Language.Id == translation.Language.Id && t.PoemId == translation.PoemId && t.Published == true).ToListAsync();

                    foreach (var item in oldPublished)
                    {
                        item.Published = false;
                        _context.GanjoorPoemTranslations.Update(item);
                    }
                }
                var dbTranslation = new GanjoorPoemTranslation()
                {
                    LanguageId = translation.Language.Id,
                    PoemId     = translation.PoemId,
                    Title      = translation.Title,
                    Published  = translation.Published,
                    Verses     = new List <GanjoorVerseTranslation>(),
                    UserId     = userId,
                    DateTime   = DateTime.Now
                };

                var verses = await _context.GanjoorVerses.Where(v => v.PoemId == translation.PoemId).ToListAsync();

                foreach (var translatedVerse in translation.TranslatedVerses)
                {
                    var verse = verses.Where(v => v.VOrder == translatedVerse.Verse.VOrder).Single();
                    dbTranslation.Verses
                    .Add(
                        new GanjoorVerseTranslation()
                    {
                        VerseId = verse.Id,
                        TText   = translatedVerse.TText
                    });
                }

                _context.GanjoorPoemTranslations.Add(dbTranslation);

                await _context.SaveChangesAsync();

                translation.Id = dbTranslation.Id;

                return(new RServiceResult <GanjoorPoemTranslationViewModel>(translation));
            }
            catch (Exception exp)
            {
                return(new RServiceResult <GanjoorPoemTranslationViewModel>(null, exp.ToString()));
            }
        }
        public async Task <IActionResult> OnPostSendPoemTranslationAsync(int poemid, int langid, string[] translations, bool published, string note)
        {
            using (HttpClient secureClient = new HttpClient())
            {
                if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
                {
                    string title = null;
                    List <GanjoorVerseTranslationViewModel> verses = new List <GanjoorVerseTranslationViewModel>();
                    foreach (string v in translations)
                    {
                        var vParts = v.Split("TextSeparator", System.StringSplitOptions.RemoveEmptyEntries);
                        int vOrder = int.Parse(vParts[0]);
                        if (vOrder == 0)
                        {
                            if (vParts.Length > 1)
                            {
                                title = vParts[1];
                            }
                        }
                        else
                        {
                            verses.Add
                            (
                                new GanjoorVerseTranslationViewModel()
                            {
                                Verse = new GanjoorVerseViewModel()
                                {
                                    VOrder = vOrder
                                },
                                TText = vParts.Length > 1 ? vParts[1] : null
                            }
                            );;
                        }
                    }

                    if (string.IsNullOrEmpty(title) && verses.Where(v => !string.IsNullOrEmpty(v.TText)).FirstOrDefault() == null)
                    {
                        return(new BadRequestObjectResult("شما هیچ متنی را وارد نکرده‌اید!"));
                    }

                    var translation = new GanjoorPoemTranslationViewModel()
                    {
                        Language = new GanjoorLanguage()
                        {
                            Id = langid
                        },
                        PoemId           = poemid,
                        Title            = title,
                        Published        = published,
                        Description      = note,
                        TranslatedVerses = verses.ToArray()
                    };

                    HttpResponseMessage response = await secureClient.PostAsync(
                        $"{APIRoot.Url}/api/translations",
                        new StringContent(JsonConvert.SerializeObject(translation),
                                          Encoding.UTF8,
                                          "application/json"));

                    if (!response.IsSuccessStatusCode)
                    {
                        return(new BadRequestObjectResult(JsonConvert.DeserializeObject <string>(await response.Content.ReadAsStringAsync())));
                    }
                    Translation = JObject.Parse(await response.Content.ReadAsStringAsync()).ToObject <GanjoorPoemTranslationViewModel>();
                    return(new OkObjectResult(Translation.Id));
                }
                else
                {
                    return(new BadRequestObjectResult("لطفا از گنجور خارج و مجددا به آن وارد شوید."));
                }
            }
        }
        /// <summary>
        /// get
        /// </summary>
        /// <returns></returns>
        public async Task <IActionResult> OnGetAsync()
        {
            if (string.IsNullOrEmpty(Request.Cookies["Token"]))
            {
                return(Redirect("/"));
            }

            FatalError = "";
            using (HttpClient secureClient = new HttpClient())
            {
                if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
                {
                    await GanjoorSessionChecker.ApplyPermissionsToViewData(Request, Response, ViewData);

                    if (!ViewData.ContainsKey($"{RMuseumSecurableItem.GanjoorEntityShortName}-{RMuseumSecurableItem.Translations}"))
                    {
                        FatalError = "حساب کاربری شما به این بخش دسترسی ندارد.";
                        return(Page());
                    }

                    int poemId = int.Parse(Request.Query["id"]);

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

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

                    HttpResponseMessage response = await secureClient.GetAsync($"{APIRoot.Url}/api/translations/poem/{poemId}/language/{langId}");

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

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

                    var userInfoResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/users/{Request.Cookies["UserId"]}");

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

                    if (transId != -1)
                    {
                        Translation = translations.Where(t => t.Id == transId).Single();
                        langId      = Translation.Language.Id;
                    }

                    if (langId == -1)
                    {
                        var lastLangResp = await secureClient.GetAsync($"{APIRoot.Url}/api/translations/user/lastlanguage");

                        if (response.StatusCode != HttpStatusCode.NotFound)
                        {
                            var lang = JsonConvert.DeserializeObject <GanjoorLanguage>(await lastLangResp.Content.ReadAsStringAsync());
                            if (lang != null)
                            {
                                langId = lang.Id;
                            }
                        }
                    }

                    if (langId != -1 && Translation == null)
                    {
                        Translations = translations;
                        foreach (var translation in translations)
                        {
                            if (translation.ContributerId == UserInfo.Id && langId == translation.Language.Id)
                            {
                                Translation = translation;
                                break;
                            }
                        }
                    }
                    else if (translations.Length > 0 && Translation == null)
                    {
                        foreach (var translation in translations)
                        {
                            if (translation.ContributerId == UserInfo.Id)
                            {
                                Translation = translation;
                                langId      = Translation.Language.Id;
                                break;
                            }
                        }
                        if (langId == -1)
                        {
                            Translation = translations[0];
                            langId      = Translation.Language.Id;
                        }
                    }



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

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


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

                    if (Languages.Length == 0)
                    {
                        FatalError = "<a role=\"button\" target=\"_blank\" href=\"/User/Languages\" class=\"actionlink\">معرفی زبان‌ها و نویسش‌ها</a>";
                        return(Page());
                    }

                    if (langId == -1)
                    {
                        langId = Languages[0].Id;
                    }


                    var pageUrlResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/pageurl?id={poemId}");

                    if (!pageUrlResponse.IsSuccessStatusCode)
                    {
                        FatalError = JsonConvert.DeserializeObject <string>(await pageUrlResponse.Content.ReadAsStringAsync());
                        return(Page());
                    }
                    var pageUrl = JsonConvert.DeserializeObject <string>(await pageUrlResponse.Content.ReadAsStringAsync());

                    var pageQuery = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/page?url={pageUrl}");

                    if (!pageQuery.IsSuccessStatusCode)
                    {
                        FatalError = JsonConvert.DeserializeObject <string>(await pageQuery.Content.ReadAsStringAsync());
                        return(Page());
                    }
                    PageInformation = JObject.Parse(await pageQuery.Content.ReadAsStringAsync()).ToObject <GanjoorPageCompleteViewModel>();

                    if (Translation == null)
                    {
                        Translation = new GanjoorPoemTranslationViewModel()
                        {
                            Language        = Languages.Where(l => l.Id == langId).Single(),
                            PoemId          = PageInformation.Id,
                            Title           = "",
                            Published       = false,
                            Description     = "",
                            ContributerName = UserInfo.NickName == null?UserInfo.Id.ToString() : UserInfo.NickName,
                                                  TranslatedVerses = PageInformation.Poem.Verses.Select(v =>
                                                                                                        new GanjoorVerseTranslationViewModel()
                            {
                                Verse = v,
                                TText = ""
                            }
                                                                                                        ).ToArray()
                        };

                        Translations = new GanjoorPoemTranslationViewModel[] { Translation };
                    }

                    if (langId != -1)
                    {
                        Translations = translations.Where(t => t.Language.Id == langId).ToArray();
                    }
                }
                else
                {
                    FatalError = "لطفا از گنجور خارج و مجددا به آن وارد شوید.";
                }
            }
            return(Page());
        }