コード例 #1
0
        public ActionResult ClonePartialProduct(
            [FromBody] ClonePartialProductRequest request, bool isLive = false)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest();
            }

            Content rootContent = _contentDefinitionService
                .GetDefinitionById(request.ProductDefinitionId, isLive);

            Content partialContent = _editorPartialContentService
                .FindContentByPath(rootContent, request.ContentPath);

            Content cloneContent = _editorPartialContentService
                .FindContentByPath(rootContent, request.ContentPath, forClone: true);

            int clonedProdictId = _cloneBatchAction
                .CloneProduct(request.CloneArticleId, cloneContent.DeepCopy(), null)
                .Value;

            ArticleObject articleObject = LoadProductGraph(partialContent, clonedProdictId, isLive);

            string productJson = JsonConvert.SerializeObject(articleObject);

            return Content(productJson, "application/json");
        }
コード例 #2
0
        public ActionResult LoadProductRelation(
            [FromBody] LoadProductRelationRequest request, bool isLive = false)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            Content rootContent = _contentDefinitionService
                                  .GetDefinitionById(request.ProductDefinitionId, isLive);

            Content relationContent = _editorPartialContentService
                                      .FindContentByPath(rootContent, request.ContentPath)
                                      .ShallowCopy();

            Field relationField = relationContent.Fields
                                  .Single(f => f.FieldName == request.RelationFieldName);

            relationContent.Fields.Clear();
            relationContent.Fields.Add(relationField);

            ArticleObject parentObject = LoadProductGraph(relationContent, request.ParentArticleId, isLive);

            object relationObject = parentObject?[request.RelationFieldName];

            string relationJson = JsonConvert.SerializeObject(relationObject);

            return(Content(relationJson, "application/json"));
        }
コード例 #3
0
        public ContentResult GetEditorData(int productDefinitionId, int articleId, bool isLive = false)
        {
            Content rootContent = _contentDefinitionService.GetDefinitionById(productDefinitionId, isLive);

            ArticleObject articleObject = LoadProductGraph(rootContent, articleId, isLive);

            string dataJson = JsonConvert.SerializeObject(articleObject);

            return(Content(dataJson, "application/json"));
        }
コード例 #4
0
 public void OpenChannel(ArticleObject item)
 {
     try
     {
         MainContext.ShowUserChannelFragment(item.UserData, item.UserId.ToString());
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
 }
コード例 #5
0
        private void GetDataArticles()
        {
            try
            {
                ArticleData = JsonConvert.DeserializeObject <ArticleObject>(Intent.GetStringExtra("ItemArticle"));
                if (ArticleData != null)
                {
                    ArticleId = ArticleData.Id.ToString();

                    GlideImageLoader.LoadImage(this, ArticleData.Image, ImageBlog, ImageStyle.CenterCrop, ImagePlaceholders.Drawable);

                    SupportActionBar.Title = Methods.FunString.DecodeString(ArticleData.Title);

                    TxtTitle.Text = Methods.FunString.DecodeString(ArticleData.Title);
                    TxtViews.Text = ArticleData.Views + " " + GetText(Resource.String.Lbl_Views);

                    LikeCount.Text        = ArticleData.Likes.ToString();
                    UnlikeNumber.Text     = ArticleData.Dislikes.ToString();
                    DateTimeTextView.Text = ArticleData.TextTime;

                    string name = Methods.FunString.DecodeString(CategoriesController.ListCategories?.FirstOrDefault(a => a.Id == (ArticleData.Category))?.Name);
                    if (string.IsNullOrEmpty(name))
                    {
                        name = GetString(Resource.String.Lbl_Unknown);
                    }

                    CategoryName.Text = GetText(Resource.String.Lbl_Category) + " : " + name;

                    string style = AppSettings.SetTabDarkTheme ? "<style type='text/css'>body{color: #fff; background-color: #444;}</style>" : "<style type='text/css'>body{color: #444; background-color: #fff;}</style>";

                    var    content = Html.FromHtml(ArticleData.Text, FromHtmlOptions.ModeCompact).ToString();
                    string data    = "<!DOCTYPE html>";
                    data += "<head><title></title>" + style + "</head>";
                    data += "<body>" + content + "</body>";
                    data += "</html>";

                    TxtHtml.SetWebViewClient(new WebViewClient());
                    TxtHtml.Settings.LoadsImagesAutomatically = true;
                    TxtHtml.Settings.JavaScriptEnabled        = true;
                    TxtHtml.Settings.JavaScriptCanOpenWindowsAutomatically = true;
                    TxtHtml.Settings.SetLayoutAlgorithm(WebSettings.LayoutAlgorithm.TextAutosizing);
                    TxtHtml.Settings.DomStorageEnabled       = true;
                    TxtHtml.Settings.AllowFileAccess         = true;
                    TxtHtml.Settings.DefaultTextEncodingName = "utf-8";

                    TxtHtml.LoadDataWithBaseURL(null, data, "text/html", "UTF-8", null);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
コード例 #6
0
        public ActionResult ClonePartialProductPrototype(
            [FromBody] ClonePartialProductPrototypeRequest request, bool isLive = false)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest();
            }

            Content rootContent = _contentDefinitionService
                .GetDefinitionById(request.ProductDefinitionId, isLive);

            Content relationContent = _editorPartialContentService
                .FindContentByPath(rootContent, request.ContentPath);

            EntityField relationField = (EntityField)relationContent.Fields
                .Single(f => f.FieldName == request.RelationFieldName);

            Content cloneContent = relationField.CloneDefinition ?? relationField.Content;

            var qpFiels = _fieldService.Read(relationField.FieldId);

            int backwardFieldId = relationField is BackwardRelationField
                ? relationField.FieldId
                : qpFiels.BackRelationId.Value;

            int clonePrototypeId = 0;
            if (!String.IsNullOrWhiteSpace(relationField.ClonePrototypeCondition))
            {
                clonePrototypeId = _articleService
                    .Ids(relationField.Content.ContentId, null, filter: relationField.ClonePrototypeCondition)
                    .FirstOrDefault();
            }
            if (clonePrototypeId == 0)
            {
                throw new InvalidOperationException(
                    $"Unable to receive prototype for product creating: contentId={relationField.Content.ContentId}");
            }

            int clonedProdictId = _cloneBatchAction
                .CloneProduct(clonePrototypeId, cloneContent.DeepCopy(), new Dictionary<string, string>
                {
                    ["FieldId"] = backwardFieldId.ToString(),
                    ["ArticleId"] = request.ParentArticleId.ToString(),
                })
                .Value;

            ArticleObject articleObject = LoadProductGraph(relationField.Content, clonedProdictId, isLive);

            string productJson = JsonConvert.SerializeObject(articleObject);

            return Content(productJson, "application/json");
        }
コード例 #7
0
ファイル: ArticlesAdapter.cs プロジェクト: divitiae/playtube
        private void Initialize(ArticlesAdapterViewHolder holder, ArticleObject item)
        {
            try
            {
                GlideImageLoader.LoadImage(ActivityContext, !string.IsNullOrEmpty(item.Image) ? item.Image : "blackdefault", holder.Image, ImageStyle.CenterCrop, ImagePlaceholders.Drawable);

                GlideImageLoader.LoadImage(ActivityContext, !string.IsNullOrEmpty(item.UserData?.Avatar) ? item.UserData.Avatar : "no_profile_image_circle", holder.UserImageProfile, ImageStyle.CircleCrop, ImagePlaceholders.Drawable);

                var color = Methods.FunString.RandomColor();
                holder.Category.SetBackgroundColor(Color.ParseColor(color));
                CategoryColor.Add(item.Id, color);

                string id = item.Url.Split('/').Last();

                string name = Methods.FunString.DecodeString(CategoriesController.ListCategories?.FirstOrDefault(a => a.Id == (item.Category))?.Name);
                if (string.IsNullOrEmpty(name))
                {
                    name = ActivityContext.GetString(Resource.String.Lbl_Unknown);
                }

                holder.Category.Text = name;

                holder.Description.Text = Methods.FunString.DecodeString(item.Description);
                holder.Title.Text       = Methods.FunString.DecodeString(item.Title);
                holder.Username.Text    = Methods.FunString.DecodeString(item.UserData?.Name);
                holder.ViewMore.Text    = ActivityContext.GetText(Resource.String.Lbl_ReadMore) + " >"; //READ MORE &gt;
                holder.Time.Text        = Methods.FunString.DecodeString(item.TextTime);

                if (!holder.UserItem.HasOnClickListeners)
                {
                    holder.UserItem.Click += (sender, args) =>
                    {
                        try
                        {
                            AFragment.OpenChannel(item);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }
                    }
                }
                ;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
コード例 #8
0
        private void Initialize(BlogAdapterViewHolder holder, ArticleObject item)
        {
            try
            {
                GlideImageLoader.LoadImage(ActivityContext, !string.IsNullOrEmpty(item.Thumbnail) ? item.Thumbnail : "blackdefault", holder.Image, ImageStyle.CenterCrop, ImagePlaceholders.Drawable);

                holder.Title.Text = Methods.FunString.DecodeString(item.Title);
                holder.Time.Text  = item.CreatedAt;

                //holder.Category.Text = CategoriesController.GetCategoryName(item.Category, ""); //wael
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
コード例 #9
0
        private void GetDataArticles()
        {
            try
            {
                ArticleData = JsonConvert.DeserializeObject <ArticleObject>(Intent.GetStringExtra("itemObject"));
                if (ArticleData != null)
                {
                    ArticleId = ArticleData.Id;

                    GlideImageLoader.LoadImage(this, ArticleData.Thumbnail, ImageBlog, ImageStyle.CenterCrop, ImagePlaceholders.Drawable);

                    SupportActionBar.Title = Methods.FunString.DecodeString(ArticleData.Title);

                    TxtTitle.Text = Methods.FunString.DecodeString(ArticleData.Title);
                    TxtViews.Text = ArticleData.View + " " + GetText(Resource.String.Lbl_Views);

                    //SharedCount.Text = ArticleData.Shared.ToString();
                    DateTimeTextView.Text = ArticleData.CreatedAt;

                    //CategoryName.Text = GetText(Resource.String.Lbl_Category) + " : "  + CategoriesController.GetCategoryName(ArticleData.Category, "");

                    string style = AppSettings.SetTabDarkTheme ? "<style type='text/css'>body{color: #fff; background-color: #444;}</style>" : "<style type='text/css'>body{color: #444; background-color: #fff;}</style>";

                    var    content = Html.FromHtml(ArticleData.Content, FromHtmlOptions.ModeCompact).ToString();
                    string data    = "<!DOCTYPE html>";
                    data += "<head><title></title>" + style + "</head>";
                    data += "<body>" + content + "</body>";
                    data += "</html>";

                    TxtHtml.SetWebViewClient(new WebViewClient());
                    TxtHtml.Settings.LoadsImagesAutomatically = true;
                    TxtHtml.Settings.JavaScriptEnabled        = true;
                    TxtHtml.Settings.JavaScriptCanOpenWindowsAutomatically = true;
                    TxtHtml.Settings.SetLayoutAlgorithm(WebSettings.LayoutAlgorithm.NarrowColumns);
                    TxtHtml.Settings.DomStorageEnabled       = true;
                    TxtHtml.Settings.AllowFileAccess         = true;
                    TxtHtml.Settings.DefaultTextEncodingName = "utf-8";

                    TxtHtml.LoadDataWithBaseURL(null, data, "text/html", "UTF-8", null);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
コード例 #10
0
        public async Task <Article> UpdateArticleAsync(Article article, string token, CancellationToken cancellationToken = default)
        {
            var body = new ArticleObject {
                Article = article
            };
            var requestBody = JsonSerializer.Serialize(body, _jsonSerializerOptions);
            var httpRequest = new HttpRequestMessage(HttpMethod.Put, new Uri($"api/articles/{article.Slug}", UriKind.Relative))
            {
                Content = new StringContent(requestBody, Encoding.UTF8, "application/json")
            };

            httpRequest.Headers.Add("Authorization", $"Token {token}");

            var response = await HandleRequest <ArticleObject>(httpRequest, cancellationToken);

            return(response.Article);
        }
コード例 #11
0
        protected ArticleObject LoadProductGraph(Content content, int articleId, bool isLive)
        {
            var productDefinition = new ProductDefinition {
                StorageSchema = content
            };

            Article article = _productService.GetProductById(articleId, isLive, productDefinition);

            if (article == null)
            {
                return(null);
            }

            IArticleFilter filter = isLive ? ArticleFilter.LiveFilter : ArticleFilter.DefaultFilter;

            ArticleObject articleObject = _editorDataService.ConvertArticle(article, filter, new HashSet <Article>());

            return(articleObject);
        }
コード例 #12
0
        public ActionResult SavePartialProduct(
            [FromBody] SavePartialProductRequest request, bool isLive = false)
        {
            if (!ModelState.IsValid)
            {
                return new BadRequestResult();
            }

            Content rootContent = _contentDefinitionService
                .GetDefinitionById(request.ProductDefinitionId, isLive);

            Content partialContent = _editorPartialContentService
                .FindContentByPath(rootContent, request.ContentPath);

            Article partialProduct = _editorDataService
                .DeserializeProduct(request.PartialProduct, partialContent);

            var partialDefinition = new ProductDefinition { StorageSchema = partialContent };

            try
            {
                // TODO: what about validation ?
                InsertData[] insertData = _productUpdateService.Update(partialProduct, partialDefinition, isLive);

                var idMappings = insertData.Select(data => new
                {
                    ClientId = data.OriginalArticleId,
                    ServerId = data.CreatedArticleId,
                });

                int partialProductId = partialProduct.Id;
                if (partialProductId <= 0)
                {
                    partialProductId = insertData
                        .Single(data => data.OriginalArticleId == partialProduct.Id)
                        .CreatedArticleId;
                }

                ArticleObject articleObject = LoadProductGraph(partialContent, partialProductId, isLive);

                string responseJson = JsonConvert.SerializeObject(new
                {
                    IdMappings = idMappings,
                    PartialProduct = articleObject,
                });

                return Content(responseJson, "application/json");
            }
            catch (ProductUpdateConcurrencyException)
            {
                ArticleObject articleObject = LoadProductGraph(partialContent, partialProduct.Id, isLive);

                string productJson = JsonConvert.SerializeObject(articleObject);

                return new ContentResult
                {
                    Content = productJson, 
                    StatusCode = (int)HttpStatusCode.Conflict,
                    ContentType = "application/json"
                };
            }
        }
コード例 #13
0
 public override IProductDataSource GetExtensionContainer(string fieldName, string extensionContentName)
 {
     // при десериализации для редактора используем объект [$"{fieldName}_Extension"][extensionContentName]
     return(GetContainer(ArticleObject._Extension(fieldName)).GetContainer(extensionContentName));
 }