Пример #1
0
        private void ChekWeb(SPWeb web)
        {
            ConsoleEx.WriteLine(ConsoleColor.Green, "Checking '{0}'", web.Title);
            using (WebStructureOutput webZipOutput = new WebStructureOutput(web.Title))
            {
                foreach (SPList list in web.Lists)
                {
                    if (list.Fields.ContainsField("JChemMetaField"))
                    {
                        ConsoleEx.WriteLine(string.Format("Checking '{0}' for empty structures...", list.Title));
                        ConsoleEx.WriteLine("\tJChem structures field found.");

                        bool runCompleteFieldCheck;
                        var  metaData = CheckMetaFieldReferences(web, list, webZipOutput, out runCompleteFieldCheck);

                        if (runCompleteFieldCheck)
                        {
                            RunCheckOnAllFields(web, list, metaData, webZipOutput);
                        }
                    }
                }
                webZipOutput.Save();
            }
        }
Пример #2
0
        private void RunCheckOnAllFields(SPWeb web, SPList list, JChemMetaFieldCollector metaData, WebStructureOutput webZipOutput)
        {
            List <SPField> fields = new List <SPField>();

            foreach (SPField field in list.Fields)
            {
                if (field.Type == SPFieldType.Note && !field.Hidden)
                {
                    fields.Add(field);
                }
            }
            foreach (SPListItem listItem in list.Items)
            {
                foreach (var field in fields)
                {
                    CheckListItemField(web, list, listItem, field.Id, metaData, webZipOutput);
                }
            }
        }
Пример #3
0
        private void CheckListItemField(SPWeb web, SPList list, SPListItem listItem, Guid fieldId, JChemMetaFieldCollector metaData, WebStructureOutput webZipOutput)
        {
            try
            {
                JChemContextInfo ctx = new JChemContextInfo(
                    SPSecurity.AuthenticationMode != System.Web.Configuration.AuthenticationMode.Windows,
                    web.CurrentUser.LoginName,
                    Convert.ToBase64String(web.CurrentUser.UserToken.BinaryToken),
                    Guid.NewGuid(),
                    web.Site.ID,
                    web.ID,
                    web.Locale,
                    web.Locale,
                    Guid.NewGuid());
                StructureServiceClient client = new StructureServiceClient(ctx, SPServiceContext.GetContext(web.Site));

                var fieldContent = listItem[fieldId] as string;
                if (!string.IsNullOrEmpty(fieldContent))
                {
                    var fieldContentDocument = new HtmlDocument();
                    fieldContentDocument.LoadHtml(fieldContent);

                    HtmlNodeCollection structureHtmlNodesWithIdOrURL =
                        fieldContentDocument.DocumentNode.SelectNodes("//img[contains(@src,'/_vti_bin/JChem/CxnWebGet.svc/GetStructureImageFromSession')]");
                    if (structureHtmlNodesWithIdOrURL != null)
                    {
                        ConsoleEx.WriteLine(ConsoleColor.DarkRed, "\tEmpty structure found in '{0}/{1}/{2}'", web.Title, list.Title, listItem.Name);
                        foreach (var entry in metaData)
                        {
                            var structures = JChemMetaFieldDataProvider.GetStructures(entry.Value[FieldPropertyCollector.SructuresProperty]);
                            foreach (var structure in structures)
                            {
                                if (!structure.StructureString.StartsWith("error", StringComparison.InvariantCultureIgnoreCase))
                                {
                                    try
                                    {
                                        var image = client.GetStructureImage(structure.StructureString, structure.Format.ToString(), 200, 200, false);
                                        using (var imageStream = new MemoryStream())
                                        {
                                            image.Save(imageStream, System.Drawing.Imaging.ImageFormat.Png);
                                            imageStream.Position = 0;
                                            webZipOutput.AddStructure(list.Title, listItem.Name, listItem.ID, structure.Id.ToString(), imageStream.ToArray());
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        ConsoleEx.WriteLine(ConsoleColor.Red, "\tCannot render structure: {0}", ex.Message);
                                        Environment.Exit(1);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ConsoleEx.WriteLine("\tCannot determine content of column '{0}'. Reason: {1}", list.Fields[fieldId].Title, ex.Message);
            }
        }
Пример #4
0
        private JChemMetaFieldCollector CheckMetaFieldReferences(SPWeb web, SPList list, WebStructureOutput webZipOutput, out bool runCompleteFieldCheck)
        {
            runCompleteFieldCheck = false;
            JChemMetaFieldCollector metaData = null;

            foreach (SPListItem listItem in list.Items)
            {
                var data = listItem["JChemMetaField"] as string;
                if (data != null)
                {
                    metaData = DeserializeMetaData(data, listItem.Name);
                    foreach (var fieldId in metaData.Keys)
                    {
                        if (list.Fields.Contains(fieldId))
                        {
                            CheckListItemField(web, list, listItem, fieldId, metaData, webZipOutput);
                        }
                        else
                        {
                            ConsoleEx.WriteLine(ConsoleColor.DarkYellow, "\tMeta filed contains invalid field references. Complete list ({0}/{1}) fields check will be performed.", web.Title, list.Title);
                            runCompleteFieldCheck = true;
                        }
                    }
                }
            }

            return(metaData);
        }