public void UploadFile(string srcUrl, string destUrl)
        {
            if (! File.Exists(srcUrl))
            {
                FileErrorLogger _logger = new FileErrorLogger();
                _logger.LogError(String.Format("{0} does not exist", srcUrl), ErrorLogSeverity.SeverityError,
                    ErrorType.TypeApplication, "TeamSiteReports.UploadFile()");
                _logger = null;
            }

            SPWeb site = new SPSite(destUrl).OpenWeb();
            try
            {
                FileStream fStream = File.OpenRead(srcUrl);
                byte[] contents = new byte[fStream.Length];
                fStream.Read(contents, 0, (int)fStream.Length);
                fStream.Close();
                site.Files.Add(destUrl, contents,true);
            }
            catch(SPException spe)
            {
                FileErrorLogger _logger = new FileErrorLogger();
                _logger.LogError(spe.Message+srcUrl, ErrorLogSeverity.SeverityError,
                    ErrorType.TypeApplication, "TeamSiteReports.UploadFile()");
                _logger = null;

            }
            catch(Exception e)
            {
                Object thisLock = new Object();
                lock (thisLock)
                {
                    FileErrorLogger _logger = new FileErrorLogger();
                    _logger.LogError(e.Message+srcUrl, ErrorLogSeverity.SeverityError,
                        ErrorType.TypeApplication, "TeamSiteReports.UploadFile()");
                    _logger = null;
                }
            }
            finally
            {
                if (site !=null)
                    site.Dispose();

            }
        }
        public override void GenerateReport()
        {
            TeamSiteFile tf = new TeamSiteFile();
            string fileName = System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteLastModifiedReportLocation"];
            string lastModified;

            StreamWriter fwriter = File.CreateText( fileName );
            Console.WriteLine("Creating file "+System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteLastModifiedReportLocation"]);

            HtmlTextWriter txtWriter=new HtmlTextWriter(fwriter);

            HtmlTable reportHtmlTable = new HtmlTable();
            reportHtmlTable.BgColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.White);
            reportHtmlTable.Border = 1;
            reportHtmlTable.BorderColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.LightGray );
            reportHtmlTable.Style.Add("font-family", "Verdana");
            reportHtmlTable.Style.Add("font-size", "9pt");

            HtmlTableRow trMessage = new HtmlTableRow();
            HtmlTableCell tcMessage = new HtmlTableCell();
            tcMessage.ColSpan = 4;
            tcMessage.InnerText = @"Last run: " + System.DateTime.Now.ToString();
            tcMessage.Style.Add("font-style","italic");
            trMessage.Cells.Add(tcMessage);
            reportHtmlTable.Rows.Add(trMessage);

            reportHtmlTable.BgColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.White);
            reportHtmlTable.Border = 1;
            reportHtmlTable.BorderColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.LightGray );
            reportHtmlTable.Style.Add("font-family", "Verdana");
            reportHtmlTable.Style.Add("font-size", "9pt");

            HtmlTableRow trHeader = new HtmlTableRow();
            trHeader.Style.Add("font-weight","bold");

            //teamsite name
            HtmlTableCell tcHeader1 = new HtmlTableCell();
            tcHeader1.InnerText = "teamsite name";
            trHeader.Cells.Add(tcHeader1);

            //teamsite url
            HtmlTableCell tcHeader2 = new HtmlTableCell();
            tcHeader2.InnerText = "teamsite url";
            trHeader.Cells.Add(tcHeader2);

            //teamsite brand
            HtmlTableCell tcHeader3 = new HtmlTableCell();
            tcHeader3.InnerText = "brand";
            trHeader.Cells.Add(tcHeader3);

            //teamsite lastModified
            HtmlTableCell tcHeader4 = new HtmlTableCell();
            tcHeader4.InnerText = "last modified";
            trHeader.Cells.Add(tcHeader4);
            reportHtmlTable.Rows.Add(trHeader);

            Console.WriteLine("Connecting to site...");
            SPSite siteCollection = new SPSite(System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteUrl"]);
            SPWebCollection sites = siteCollection.AllWebs;
            try
            {
                foreach (SPWeb site in sites)
                {
                    lastModified = "01/01/1900 01:01:01";

                    //go through the lists in the site for the later lastmodified date
                    foreach (SPList list in site.Lists)
                    {
                        if (System.DateTime.Parse(lastModified) < list.LastItemModifiedDate)
                            lastModified = list.LastItemModifiedDate.ToString();
                    }

                    Console.WriteLine("Site:"+site.Name+" last modified:"+lastModified);
                    HtmlTableRow trData = new HtmlTableRow();

                    //teamsite name
                    HtmlTableCell tcData1 = new HtmlTableCell();
                    tcData1.InnerText = site.Name;
                    trData.Cells.Add(tcData1);

                    //teamsite url
                    HtmlTableCell tcData2 = new HtmlTableCell();
                    HtmlAnchor ha1 = new HtmlAnchor();
                    ha1.InnerText=site.Url;
                    ha1.HRef=site.Url;
                    tcData2.Controls.Add(ha1);
                    trData.Cells.Add(tcData2);

                    //teamsite brand
                    HtmlTableCell tcData3 = new HtmlTableCell();
                    string brand = site.Url.ToString();
                    try
                    {
                        string[] ary = brand.Split('/');
                        tcData3.InnerText = ary[3].ToString(); // e.g. http:///blahblah fourth index will contain the brand
                    }
                    catch  //the url may not contain the brand for instance the top level site
                    {
                        tcData3 .InnerText = "na";
                    }
                    trData.Cells.Add(tcData3);

                    //teamsite last modified date
                    HtmlTableCell tcData4 = new HtmlTableCell();
                    tcData4.InnerText = lastModified;
                    trData.Cells.Add(tcData4);

                    reportHtmlTable.Rows.Add(trData);

                    site.Dispose();
                }
            }
            catch (Exception ex)
            {
                FileErrorLogger _logger = new FileErrorLogger();
                _logger.LogError(ex.Message, ErrorLogSeverity.SeverityError,
                    ErrorType.TypeApplication, "TeamSiteReports.UploadFile()");
                _logger = null;
            }
            finally
            {
                siteCollection.Dispose();
            }

            reportHtmlTable.RenderControl(txtWriter);

            txtWriter.Close();
            tf.UploadFile(System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteLastModifiedReportLocation"],
                System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteLastModifiedReportDestination"]);
        }
        // The method that is called to invoke our task.
        public override bool Execute()
        {
            if (InputFiles == null)
            {
                return(true);
            }

            var    outCodeItems     = new List <TaskItem>();
            var    outResItems      = new List <TaskItem>();
            string generatorName    = typeof(JsonResourceGenerator).FullName;
            string generatorVersion = typeof(JsonResourceGenerator).GetTypeInfo().Assembly.GetName().Version.ToString();


            // loop over all the .resj files we were given
            foreach (var iFile in InputFiles)
            {
                var fn = Path.GetFileNameWithoutExtension(iFile.ItemSpec);

                var culturePart = Path.GetExtension(fn);
                var hasCulture  = false;
                if (culturePart?.Length > 1)
                {
                    culturePart = culturePart.Substring(1);
                    hasCulture  = Culture.IsValidCulture(culturePart);
                }

                var fileDir  = Path.GetDirectoryName(iFile.ItemSpec);
                var filePath = iFile.ItemSpec;

                var logger = new FileErrorLogger(this, filePath);

                // load the Json from the file
                var text = File.ReadAllText(filePath);
                var json = new JsonReader(new StringReader(text), logger.JsonError);
                var doc  = JsonDocument.Load(json);

                if (doc.RootNode == null)
                {
                    logger.ParseError("Failed to parse json text.", doc);
                    continue;
                }

                if (doc.RootNode.NodeType != JsonNodeType.Object)
                {
                    logger.ParseError("Expected object as root node.", doc.RootNode);
                    continue;
                }

                var root = (JsonObject)doc.RootNode;

                var resName = iFile.GetMetadata("ResourceName");

                if (string.IsNullOrEmpty(resName))
                {
                    resName = Path.GetFileNameWithoutExtension(iFile.ItemSpec);
                }

                var resourceName = resName + ".resources";

                Directory.CreateDirectory(OutputPath);

                // write the generated C# code and resources file.
                if (!hasCulture)
                {
                    var codeFile = Path.Combine(OutputPath, iFile.ItemSpec + ".g.cs");
                    var access   = iFile.GetMetadata("AccessModifier");

                    var noCodeGen = StringComparer.OrdinalIgnoreCase.Equals(access, AccessNoCodeGen);

                    if (!noCodeGen)
                    {
                        var isPublic = StringComparer.OrdinalIgnoreCase.Equals(access, AccessPublic);

                        var ns = iFile.GetMetadata("Namespace");

                        string className = Path.GetFileNameWithoutExtension(iFile.ItemSpec);
                        outCodeItems.Add(new TaskItem(codeFile));
                        Directory.CreateDirectory(Path.GetDirectoryName(codeFile));

                        using (var oStream = new FileStream(codeFile, FileMode.Create))
                            using (var w = new StreamWriter(oStream))
                            {
                                if (!string.IsNullOrEmpty(ns))
                                {
                                    w.WriteLine($"namespace {ns} {{");
                                    w.WriteLine();
                                }


                                // very simplistic resource accessor class mostly duplicated from resx output.
                                w.Write($@"using global::System.Reflection;

/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCode()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(""{generatorName}"", ""{generatorVersion}"")]
{(isPublic ? "public " : string.Empty)}static partial class {className}
{{
    static global::System.Resources.ResourceManager rm;
    static global::System.Globalization.CultureInfo resourceCulture;

    static global::System.Resources.ResourceManager ResourceManager
    {{
        get
        {{
            if (object.ReferenceEquals(rm, null))
            {{
                rm = new global::System.Resources.ResourceManager(""{resName}"", typeof({className}).GetTypeInfo().Assembly);
            }}

            return rm;
        }}
    }}

    static global::System.Globalization.CultureInfo Culture
    {{
        get
        {{
            return resourceCulture;
        }}
        set
        {{
            resourceCulture = value;
        }}
    }}
");

                                foreach (var section in root.Keys)
                                {
                                    var value = root[section];

                                    switch (section)
                                    {
                                    case "Strings":
                                    case "Files":
                                        if (value.NodeType == JsonNodeType.Object)
                                        {
                                            var obj = (JsonObject)value;
                                            foreach (var item in obj)
                                            {
                                                string comment = null;
                                                if (section == "Strings")
                                                {
                                                    // https://stackoverflow.com/a/19498780
                                                    string stringValue = new XText(((JsonString)item.Value).Value).ToString();
                                                    comment = $"Looks up a localized string similar to {stringValue.Substring(0, Math.Min(stringValue.Length, 100))}";
                                                }
                                                else if (section == "Files")
                                                {
                                                    comment = $"Looks up a {item.Key} text file";
                                                }

                                                if (comment != null)
                                                {
                                                    IEnumerable <string> commentLines = comment.Split(new[] { "\r", "\n", "\r\n" }, StringSplitOptions.None);
                                                    w.Write($@"
    /// <summary>
    /// {string.Join(Environment.NewLine + "    /// ", commentLines)}.
    /// </summary>");
                                                }

                                                w.Write($@"
    public static string {item.Key}
    {{
        get
        {{
            return ResourceManager.GetString(""{item.Key}"", resourceCulture);
        }}
    }}
");
                                            }
                                        }
                                        else
                                        {
                                            //logger.ParseError("Expected Json object.", value);
                                        }

                                        break;

                                    default:
                                        //logger.ParseError("Unexpected property.", value);
                                        break;
                                    }
                                }

                                w.WriteLine("}");

                                if (!string.IsNullOrEmpty(ns))
                                {
                                    w.WriteLine();
                                    w.WriteLine("}");
                                }
                            }
                    }
                }


                // prepare the generated files we are about to write.
                var resFile = Path.Combine(OutputPath, resourceName);

                var resItem = new TaskItem(resFile);
                resItem.SetMetadata("LogicalName", resName + ".resources");
                resItem.SetMetadata("ManifestResourceName", resourceName);
                resItem.SetMetadata("OutputResource", resourceName);

                resItem.SetMetadata("WithCulture", hasCulture ? "true" : "false");
                resItem.SetMetadata("Type", "Non-Resx");

                outResItems.Add(resItem);
                if (hasCulture)
                {
                    resItem.SetMetadata("Culture", culturePart);
                }
                else
                {
                }

                json = new JsonReader(new StringReader(text), logger.JsonError);
                using (var rw = new System.Resources.ResourceWriter(resFile))
                {
                    foreach (var section in root.Keys)
                    {
                        var sectionNode = root[section];
                        var isFile      = false;
                        switch (section)
                        {
                        case "Strings":
                            isFile = false;
                            break;

                        case "Files":
                            isFile = true;
                            break;

                        default:
                            logger.ParseError("Unexpected section.", sectionNode);
                            continue;
                        }

                        if (sectionNode.NodeType != JsonNodeType.Object)
                        {
                            logger.ParseError("Expected json object", sectionNode);
                            continue;
                        }
                        var sectionObj = (JsonObject)sectionNode;


                        foreach (var key in sectionObj.Keys)
                        {
                            var str = sectionObj[key];

                            if (str.NodeType != JsonNodeType.String)
                            {
                                logger.ParseError("Expected string value", str);
                                continue;
                            }

                            var strVal = (JsonString)str;

                            string txt;
                            if (isFile)
                            {
                                var textFilePath = Path.Combine(fileDir, strVal.Value);
                                if (!File.Exists(textFilePath))
                                {
                                    logger.ParseError("Resource file '" + strVal.Value + "' not found.", str);
                                    continue;
                                }
                                try
                                {
                                    using (var iStream = File.OpenRead(textFilePath))
                                        using (var reader = new StreamReader(iStream))
                                        {
                                            txt = reader.ReadToEnd();
                                        }
                                }
                                catch (Exception e)
                                {
                                    logger.ParseError(e.Message, str);
                                    continue;
                                }
                            }
                            else
                            {
                                txt = strVal.Value;
                            }

                            // write our string to the resources binary
                            rw.AddResource(key, txt);
                        }
                    }
                }
            }

            // put the artifacts we created in the output properties.
            OutputCode      = outCodeItems.ToArray();
            OutputResources = outResItems.ToArray();
            return(!hasError);
        }
示例#4
0
        // The method that is called to invoke our task.
        public override bool Execute()
        {
            if (InputFiles == null)
            {
                return(true);
            }

            var outCodeItems = new List <TaskItem>();
            var outResItems  = new List <TaskItem>();


            // loop over all the .resj files we were given
            foreach (var iFile in InputFiles)
            {
                var fn = Path.GetFileNameWithoutExtension(iFile.ItemSpec);

                var culturePart = Path.GetExtension(fn);
                var hasCulture  = false;
                if (culturePart?.Length > 1)
                {
                    culturePart = culturePart.Substring(1);
                    hasCulture  = Culture.IsValidCulture(culturePart);
                }

                var fileDir  = Path.GetDirectoryName(iFile.ItemSpec);
                var filePath = iFile.ItemSpec;

                var logger = new FileErrorLogger(this, filePath);

                // load the Json from the file
                var text = File.ReadAllText(filePath);
                var json = new JsonReader(new StringReader(text), logger.JsonError);
                var doc  = JsonDocument.Load(json);

                if (doc.RootNode == null)
                {
                    logger.ParseError("Failed to parse json text.", doc);
                    continue;
                }

                if (doc.RootNode.NodeType != JsonNodeType.Object)
                {
                    logger.ParseError("Expected object as root node.", doc.RootNode);
                    continue;
                }

                var root = (JsonObject)doc.RootNode;

                var resName = iFile.GetMetadata("ResourceName");

                if (string.IsNullOrEmpty(resName))
                {
                    resName = Path.GetFileNameWithoutExtension(iFile.ItemSpec);
                }

                var resourceName = resName + ".resources";

                Directory.CreateDirectory(OutputPath);

                // write the generated C# code and resources file.
                if (!hasCulture)
                {
                    var codeFile = Path.Combine(OutputPath, iFile.ItemSpec + ".g.cs");
                    var access   = iFile.GetMetadata("AccessModifier");

                    var noCodeGen = StringComparer.OrdinalIgnoreCase.Equals(access, AccessNoCodeGen);

                    if (!noCodeGen)
                    {
                        var isPublic = StringComparer.OrdinalIgnoreCase.Equals(access, AccessPublic);

                        var ns = iFile.GetMetadata("Namespace");

                        string className = Path.GetFileNameWithoutExtension(iFile.ItemSpec);
                        outCodeItems.Add(new TaskItem(codeFile));
                        Directory.CreateDirectory(Path.GetDirectoryName(codeFile));

                        using (var oStream = new FileStream(codeFile, FileMode.Create))
                            using (var w = new StreamWriter(oStream))
                            {
                                if (!string.IsNullOrEmpty(ns))
                                {
                                    w.WriteLine("namespace " + ns + " {");
                                }


                                // very simplistic resource accessor class mostly duplicated from resx output.
                                w.WriteLine("using global::System.Reflection;");
                                if (isPublic)
                                {
                                    w.Write("public ");
                                }
                                w.WriteLine("static partial class " + className + " { ");
                                w.WriteLine("static global::System.Resources.ResourceManager rm;");
                                w.WriteLine("static global::System.Globalization.CultureInfo resourceCulture;");
                                w.WriteLine("static global::System.Resources.ResourceManager ResourceManager {");
                                w.WriteLine("get {");
                                w.WriteLine("if(object.ReferenceEquals(rm, null)) {");
                                w.WriteLine("rm = new global::System.Resources.ResourceManager(\"" + resName + "\", typeof(" + className + ").GetTypeInfo().Assembly);");
                                w.WriteLine("}");
                                w.WriteLine("return rm;");
                                w.WriteLine("}");
                                w.WriteLine("}");
                                w.WriteLine("static global::System.Globalization.CultureInfo Culture {");
                                w.WriteLine("get {");
                                w.WriteLine("return resourceCulture;");
                                w.WriteLine("}");
                                w.WriteLine("set {");
                                w.WriteLine("resourceCulture = value;");
                                w.WriteLine("}");
                                w.WriteLine("}");

                                foreach (var section in root.Keys)
                                {
                                    var value = root[section];

                                    switch (section)
                                    {
                                    case "Strings":
                                    case "Files":
                                        if (value.NodeType == JsonNodeType.Object)
                                        {
                                            var obj = (JsonObject)value;
                                            foreach (var key in obj.Keys)
                                            {
                                                w.WriteLine("public static string " + key + " {");
                                                w.WriteLine("get {");
                                                w.WriteLine("return ResourceManager.GetString(\"" + key + "\", resourceCulture);");
                                                w.WriteLine("}");
                                                w.WriteLine("}");
                                            }
                                        }
                                        else
                                        {
                                            //logger.ParseError("Expected Json object.", value);
                                        }

                                        break;

                                    default:
                                        //logger.ParseError("Unexpected property.", value);
                                        break;
                                    }
                                }

                                w.WriteLine("}");

                                if (!string.IsNullOrEmpty(ns))
                                {
                                    w.WriteLine("}");
                                }
                            }
                    }
                }


                // prepare the generated files we are about to write.
                var resFile = Path.Combine(OutputPath, resourceName);

                var resItem = new TaskItem(resFile);
                resItem.SetMetadata("LogicalName", resName + ".resources");
                resItem.SetMetadata("ManifestResourceName", resourceName);
                resItem.SetMetadata("OutputResource", resourceName);

                resItem.SetMetadata("WithCulture", hasCulture ? "true" : "false");
                resItem.SetMetadata("Type", "Non-Resx");

                outResItems.Add(resItem);
                if (hasCulture)
                {
                    resItem.SetMetadata("Culture", culturePart);
                }
                else
                {
                }

                json = new JsonReader(new StringReader(text), logger.JsonError);
                using (var rw = new System.Resources.ResourceWriter(resFile))
                {
                    foreach (var section in root.Keys)
                    {
                        var sectionNode = root[section];
                        var isFile      = false;
                        switch (section)
                        {
                        case "Strings":
                            isFile = false;
                            break;

                        case "Files":
                            isFile = true;
                            break;

                        default:
                            logger.ParseError("Unexpected section.", sectionNode);
                            continue;
                        }

                        if (sectionNode.NodeType != JsonNodeType.Object)
                        {
                            logger.ParseError("Expected json object", sectionNode);
                            continue;
                        }
                        var sectionObj = (JsonObject)sectionNode;


                        foreach (var key in sectionObj.Keys)
                        {
                            var str = sectionObj[key];

                            if (str.NodeType != JsonNodeType.String)
                            {
                                logger.ParseError("Expected string value", str);
                                continue;
                            }

                            var strVal = (JsonString)str;

                            string txt;
                            if (isFile)
                            {
                                var textFilePath = Path.Combine(fileDir, strVal.Value);
                                if (!File.Exists(textFilePath))
                                {
                                    logger.ParseError("Resource file '" + strVal.Value + "' not found.", str);
                                    continue;
                                }
                                try
                                {
                                    using (var iStream = File.OpenRead(textFilePath))
                                        using (var reader = new StreamReader(iStream))
                                        {
                                            txt = reader.ReadToEnd();
                                        }
                                }
                                catch (Exception e)
                                {
                                    logger.ParseError(e.Message, str);
                                    continue;
                                }
                            }
                            else
                            {
                                txt = strVal.Value;
                            }

                            // write our string to the resources binary
                            rw.AddResource(key, txt);
                        }
                    }
                }
            }

            // put the artifacts we created in the output properties.
            OutputCode      = outCodeItems.ToArray();
            OutputResources = outResItems.ToArray();
            return(!hasError);
        }
        public override void GenerateReport()
        {
            TeamSiteFile tf = new TeamSiteFile();
            string fileName = System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteOwnersReportLocation"];
            string roleStyle;

            StreamWriter fwriter = File.CreateText( fileName );
            Console.WriteLine("Creating file "+System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteOwnersReportLocation"]);

            HtmlTextWriter txtWriter=new HtmlTextWriter(fwriter);

            HtmlTable reportHtmlTable = new HtmlTable();
            reportHtmlTable.BgColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.White);
            reportHtmlTable.Border = 1;
            reportHtmlTable.BorderColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.LightGray );
            reportHtmlTable.Style.Add("font-family", "Verdana");
            reportHtmlTable.Style.Add("font-size", "9pt");

            HtmlTableRow trMessage = new HtmlTableRow();

            HtmlTableCell tcMessage = new HtmlTableCell();
            tcMessage.ColSpan = 10;
            tcMessage.InnerText = @"Last run: " + System.DateTime.Now.ToString();
            tcMessage.Style.Add("font-style","italic");

            HtmlTableRow trHeader = new HtmlTableRow();
            trHeader.Style.Add("font-weight","bold");

            //teamsite name
            HtmlTableCell tcHeader1 = new HtmlTableCell();
            tcHeader1.InnerText = "teamsite name";
            trHeader.Cells.Add(tcHeader1);

            //teamsite url
            HtmlTableCell tcHeader2 = new HtmlTableCell();
            tcHeader2.InnerText = "teamsite url";
            trHeader.Cells.Add(tcHeader2);

            //teamsite brand
            HtmlTableCell tcHeader3 = new HtmlTableCell();
            tcHeader3.InnerText = "brand";
            trHeader.Cells.Add(tcHeader3);

            //teamsite users fullname
            HtmlTableCell tcHeader4 = new HtmlTableCell();
            tcHeader4.InnerText = "teamsite owners";
            trHeader.Cells.Add(tcHeader4);

            //lanId
            HtmlTableCell tcHeader5 = new HtmlTableCell();
            tcHeader5.InnerText = "lanId" ;
            trHeader.Cells.Add(tcHeader5);

            //email address
            HtmlTableCell tcHeader6 = new HtmlTableCell();
            tcHeader6.InnerText = "email" ;
            trHeader.Cells.Add(tcHeader6);

            //teamsite request for access email address
            HtmlTableCell tcHeader8 = new HtmlTableCell();
            tcHeader8.InnerText = "request for access email";
            trHeader.Cells.Add(tcHeader8);

            //teamsite memebership count
            HtmlTableCell tcHeader9 = new HtmlTableCell();
            tcHeader9.InnerText = "TeamSite Membership";
            trHeader.Cells.Add(tcHeader9);

            //subsites
            HtmlTableCell tcHeader10 = new HtmlTableCell();
            tcHeader10.InnerText = "Subsites";
            trHeader.Cells.Add(tcHeader10);

            reportHtmlTable.Rows.Add(trHeader);

            Console.WriteLine("Connecting to site...");
            SPSite siteCollection = new SPSite(System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteUrl"]);
            SPWebCollection sites = siteCollection.AllWebs;

            try
            {
                foreach (SPWeb site in sites)
                {
                    try
                    {
                        SPWebCollection subSites = site.Webs;
                        int subsitesCount = subSites.Count;
                        int roleCount = 0;
                        SPUserCollection users = site.Users;

                        Console.WriteLine("Site: "+site.Name);
                        foreach(SPUser user in users)
                        {
                            SPRoleCollection roles = user.Roles;

                            //we need to count the roles here we count the number of teamsite owners..
                            foreach(SPRole role in roles)
                            {
                                if (role.Name == System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.roleExclusiveInclude"].ToString())
                                {
                                    roleCount ++;
                                }
                            }

                        } //user
                        if (roleCount > Convert.ToInt16(System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteOwnersCount"]) )
                        {
                            //set the style to flag this on the cell
                            roleStyle = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.Orange);
                        }
                        else
                        {
                            roleStyle = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.White);
                        }

                        foreach(SPUser user in users)
                        {
                            SPRoleCollection roles = user.Roles;
                            Console.WriteLine("\tUser: "******"TeamSiteReports.roleExclusiveInclude"].ToString())
                                {
                                    string sRole = role.Name.ToString();

                                    SPListCollection lists =  site.Lists;
                                    HtmlTableRow trData = new HtmlTableRow();

                                    //teamsite name
                                    HtmlTableCell tcData1 = new HtmlTableCell();
                                    tcData1.InnerText = site.Name;
                                    trData.Cells.Add(tcData1);

                                    //teamsite url
                                    HtmlTableCell tcData2 = new HtmlTableCell();
                                    HtmlAnchor ha1 = new HtmlAnchor();
                                    ha1.InnerText=site.Url;
                                    ha1.HRef=site.Url;
                                    tcData2.Controls.Add(ha1);
                                    trData.Cells.Add(tcData2);

                                    //teamsite brand
                                    HtmlTableCell tcData3 = new HtmlTableCell();
                                    string brand = site.Url.ToString();
                                    try
                                    {
                                        string[] ary = brand.Split('/');
                                        tcData3.InnerText = ary[3].ToString(); // e.g. http://ts/one fourth index will contain the brand
                                    }
                                    catch  //the url may not contain the brand for instance the top level site
                                    {
                                        tcData3 .InnerText = "na";
                                    }
                                    trData.Cells.Add(tcData3);

                                    //teamsite users fullname
                                    HtmlTableCell tcData4 = new HtmlTableCell();
                                    tcData4.InnerText = user.Name;
                                    tcData4.BgColor = roleStyle;
                                    trData.Cells.Add(tcData4);

                                    //teamsite user lanId
                                    HtmlTableCell tcData5 = new HtmlTableCell();
                                    tcData5.InnerText = user.LoginName;
                                    tcData5.BgColor = roleStyle;
                                    trData.Cells.Add(tcData5);

                                    //teamsite user email address
                                    HtmlTableCell tcData6 = new HtmlTableCell();
                                    HtmlAnchor haEmail = new HtmlAnchor();
                                    haEmail.InnerText="mailto:"+user.Email;
                                    haEmail.HRef=user.Email;
                                    tcData6.Controls.Add(haEmail);
                                    tcData6.InnerText = user.Email ;  //email
                                    trData.Cells.Add(tcData6);

                                    //teamsite request for access email address
                                    HtmlTableCell tcData8 = new HtmlTableCell();
                                    try
                                    {

                                        SPPermissionCollection permsSite = site.Permissions;

                                        if (permsSite.RequestAccess)
                                        {
                                            tcData8.InnerText = permsSite.RequestAccessEmail.ToString();
                                        }
                                        else
                                        {
                                            tcData8.InnerText = "";
                                        }
                                    }
                                    catch //
                                    {
                                        tcData8.BgColor = "#FF0000";
                                        tcData8.InnerText = "permissions error";
                                    }

                                    trData.Cells.Add(tcData8);

                                    //teamsite memebrship count
                                    HtmlTableCell tcData9 = new HtmlTableCell();
                                    tcData9.InnerText = site.Users.Count.ToString();
                                    trData.Cells.Add(tcData9);

                                    //subsites

                                    HtmlTableCell tcData10 = new HtmlTableCell();
                                    tcData10.InnerText = subsitesCount.ToString();
                                    if (subsitesCount>0)
                                        tcData10.BgColor = System.Drawing.ColorTranslator.ToHtml (System.Drawing.Color.Red);
                                    trData.Cells.Add(tcData10);

                                    reportHtmlTable.Rows.Add(trData);

                                }
                            }
                            site.Dispose();
                        }
                    }
                    catch(Exception ex)
                    {
                        FileErrorLogger _logger = new FileErrorLogger();
                        _logger.LogError(ex.Message, ErrorLogSeverity.SeverityError,
                            ErrorType.TypeApplication, "Centrica.Intranet.TeamSiteReports.UploadFile()");
                        _logger = null;					}
                    finally
                    {
                        site.Dispose();
                    }

                }
            }
            catch (Exception ex)
            {
                FileErrorLogger _logger = new FileErrorLogger();
                _logger.LogError(ex.Message, ErrorLogSeverity.SeverityError,
                    ErrorType.TypeApplication, "Centrica.Intranet.TeamSiteReports.UploadFile()");
                _logger = null;
            }
            finally
            {
                siteCollection.Dispose();
            }

            reportHtmlTable.RenderControl(txtWriter);

            txtWriter.Close();
            tf.UploadFile(System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteOwnersReportLocation"],
                System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteOwnersReportDestination"]);
            Console.WriteLine("Completed");
        }
        public override void GenerateReport()
        {
            TeamSiteFile tf = new TeamSiteFile();
            string fileName = System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteSizeReportLocation"];

            StreamWriter fwriter = File.CreateText( fileName );
            Console.WriteLine("Creating file "+System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteSizeReportLocation"]);

            HtmlTextWriter txtWriter=new HtmlTextWriter(fwriter);

            HtmlTable reportHtmlTable = new HtmlTable();
            reportHtmlTable.BgColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.White);
            reportHtmlTable.Border = 1;
            reportHtmlTable.BorderColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.LightGray );
            reportHtmlTable.Style.Add("font-family", "Verdana");
            reportHtmlTable.Style.Add("font-size", "9pt");

            HtmlTableRow trMessage = new HtmlTableRow();
            HtmlTableCell tcMessage = new HtmlTableCell();
            tcMessage.ColSpan = 10;
            tcMessage.InnerText = @"Last run: " + System.DateTime.Now.ToString();
            tcMessage.Style.Add("font-style","italic");
            trMessage.Cells.Add(tcMessage);
            reportHtmlTable.Rows.Add(trMessage);

            HtmlTableRow trHeader = new HtmlTableRow();
            trHeader.Style.Add("font-weight","bold");

            //teamsite name
            HtmlTableCell tcHeader1 = new HtmlTableCell();
            tcHeader1.InnerText = "teamsite name";
            trHeader.Cells.Add(tcHeader1);

            //teamsite url
            HtmlTableCell tcHeader2 = new HtmlTableCell();
            tcHeader2.InnerText = "teamsite url";
            trHeader.Cells.Add(tcHeader2);

            //teamsite # docs
            HtmlTableCell tcHeader3 = new HtmlTableCell();
            tcHeader3.InnerText = "#docs";
            trHeader.Cells.Add(tcHeader3);

            //teamsite size Mbytes
            HtmlTableCell tcHeader4 = new HtmlTableCell();
            tcHeader4.InnerText = "filesize (MB)";
            trHeader.Cells.Add(tcHeader4);
            reportHtmlTable.Rows.Add(trHeader);

            Console.WriteLine("Connecting to site...");
            SPSite siteCollection = new SPSite(System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteUrl"]);
            SPWebCollection sites = siteCollection.AllWebs;

            try
            {
                foreach (SPWeb site in sites)
                {
                    try
                    {

                        totalFileSize = 0;
                        fileCount = 0;

                        SPFolderCollection folders = site.Folders;
                        traverseFolders(folders);

                        Console.WriteLine( "Summary: " + SPEncode.HtmlEncode(site.Name) + " Number: " + fileCount +
                            " Size: " + totalFileSize);

                        HtmlTableRow trData = new HtmlTableRow();

                        //teamsite name
                        HtmlTableCell tcData1 = new HtmlTableCell();
                        tcData1.InnerText = site.Name;
                        trData.Cells.Add(tcData1);

                        //teamsite url
                        HtmlTableCell tcData2 = new HtmlTableCell();
                        HtmlAnchor ha1 = new HtmlAnchor();
                        ha1.InnerText=site.Url;
                        ha1.HRef=site.Url;
                        tcData2.Controls.Add(ha1);
                        trData.Cells.Add(tcData2);

                        //teamsite # docs
                        HtmlTableCell tcData3 = new HtmlTableCell();
                        tcData3 .InnerText = fileCount.ToString();
                        trData.Cells.Add(tcData3);

                        //teamsite size Mbytes
                        HtmlTableCell tcData4 = new HtmlTableCell();
                        totalFileSize = totalFileSize / 1000000;
                        tcData4.InnerText = totalFileSize.ToString();
                        //tcData4.BgColor = roleStyle;
                        trData.Cells.Add(tcData4);

                        reportHtmlTable.Rows.Add(trData);

                    }
                    catch(Exception ex)
                    {
                        FileErrorLogger _logger = new FileErrorLogger();
                        _logger.LogError(ex.Message, ErrorLogSeverity.SeverityError,
                            ErrorType.TypeApplication, "Intranet.TeamSiteReports.UploadFile()");
                        _logger = null;
                    }
                    finally
                    {
                        site.Dispose();
                    }
                }

            }
            catch (Exception ex)
            {
                FileErrorLogger _logger = new FileErrorLogger();
                _logger.LogError(ex.Message, ErrorLogSeverity.SeverityError,
                    ErrorType.TypeApplication, "Intranet.TeamSiteReports.UploadFile()");
                _logger = null;
            }
            finally
            {
                siteCollection.Dispose();
            }

            reportHtmlTable.RenderControl(txtWriter);

            txtWriter.Close();
            tf.UploadFile(System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteSizeReportLocation"],
                System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteSizeReportDestination"]);
        }
        public override void GenerateReport()
        {
            TeamSiteFile tf = new TeamSiteFile();
            string fileName = System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteSubsiteReportLocation"];
            StreamWriter fwriter = File.CreateText( fileName );
            Console.WriteLine("Creating file "+System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteSubsiteReportLocation"]);
            HtmlTextWriter txtWriter=new HtmlTextWriter(fwriter);

            HtmlTable reportHtmlTable = new HtmlTable();
            reportHtmlTable.BgColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.White);
            reportHtmlTable.Border = 1;
            reportHtmlTable.BorderColor = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.LightGray );
            reportHtmlTable.Style.Add("font-family", "Verdana");

            reportHtmlTable.Style.Add("font-size", "9pt");

            HtmlTableRow trMessage = new HtmlTableRow();

            HtmlTableCell tcMessage = new HtmlTableCell();
            tcMessage.ColSpan = 10;
            tcMessage.InnerText = @"Last run: " + System.DateTime.Now.ToString();
            tcMessage.Style.Add("font-style","italic");
            trMessage.Cells.Add(tcMessage);
            reportHtmlTable.Rows.Add(trMessage);

            HtmlTableRow trHeader = new HtmlTableRow();
            trHeader.Style.Add("font-weight","bold");

            //teamsite name
            HtmlTableCell tcHeader1 = new HtmlTableCell();
            tcHeader1.InnerText = "teamsite name";
            trHeader.Cells.Add(tcHeader1);

            //teamsite url
            HtmlTableCell tcHeader2 = new HtmlTableCell();
            tcHeader2.InnerText = "teamsite url";
            trHeader.Cells.Add(tcHeader2);

            //teamsite brand
            HtmlTableCell tcHeader3 = new HtmlTableCell();
            tcHeader3.InnerText = "brand";
            trHeader.Cells.Add(tcHeader3);

            //teamsite subsite name
            HtmlTableCell tcHeader4 = new HtmlTableCell();
            tcHeader4.InnerText = "subsite name";
            trHeader.Cells.Add(tcHeader4);

            //teamsite subsite url
            HtmlTableCell tcHeader5 = new HtmlTableCell();
            tcHeader5.InnerText = "subsite url";
            trHeader.Cells.Add(tcHeader5);

            reportHtmlTable.Rows.Add(trHeader);

            SPSite siteCollection = new SPSite(System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteUrl"]);
            SPWebCollection sites = siteCollection.AllWebs;

            try
            {
                foreach (SPWeb site in sites)
                {
                    try
                    {
                        //ignore top level brand sites
                        switch (site.Name)
                        {
                            case "":
                                break;
                            case "doh":
                                break;
                            case "Re":
                                break;
                            case "Mi":
                                break;
                            default:
                                SPWebCollection subsites = site.Webs;
                                //if there are subsites log them
                                if(subsites.Count > 0)
                                {
                                    foreach (SPWeb subsite in subsites)
                                    {
                                        try
                                        {
                                            Console.WriteLine("Site:"+site.Name);
                                            Console.WriteLine("\tSubsite:"+subsite.Name);
                                            HtmlTableRow trData = new HtmlTableRow();

                                            //teamsite name
                                            HtmlTableCell tcData1 = new HtmlTableCell();
                                            tcData1.InnerText = site.Name;
                                            trData.Cells.Add(tcData1);

                                            //teamsite url
                                            HtmlTableCell tcData2 = new HtmlTableCell();
                                            HtmlAnchor ha1 = new HtmlAnchor();
                                            ha1.InnerText=site.Url;
                                            ha1.HRef=site.Url;
                                            tcData2.Controls.Add(ha1);
                                            trData.Cells.Add(tcData2);

                                            //teamsite brand
                                            HtmlTableCell tcData3 = new HtmlTableCell();
                                            string brand = site.Url.ToString();
                                            try
                                            {
                                                string[] ary = brand.Split('/');
                                                tcData3.InnerText = ary[3].ToString(); // e.g. http:///blahblah fourth index will contain the brand
                                            }
                                            catch  //the url may not contain the brand for instance the top level site
                                            {
                                                tcData3 .InnerText = "na";
                                            }
                                            trData.Cells.Add(tcData3);

                                            //subsite name
                                            HtmlTableCell tcData4 = new HtmlTableCell();
                                            tcData4.InnerText = subsite.Name;
                                            trData.Cells.Add(tcData4);

                                            //subsite url
                                            HtmlTableCell tcData5 = new HtmlTableCell();
                                            HtmlAnchor ha2 = new HtmlAnchor();
                                            ha2.InnerText=subsite.Url;
                                            ha2.HRef=subsite.Url;
                                            tcData5.Controls.Add(ha2);
                                            trData.Cells.Add(tcData5);

                                            reportHtmlTable.Rows.Add(trData);

                                        }
                                        catch(Exception ex)
                                        {
                                            FileErrorLogger _logger = new FileErrorLogger();
                                            _logger.LogError(ex.Message, ErrorLogSeverity.SeverityError,
                                                ErrorType.TypeApplication, "TeamSiteReports.UploadFile()");
                                            _logger = null;
                                        }
                                        finally
                                        {
                                            subsite.Dispose();
                                        }
                                    }

                                }
                                break;
                        }//switch
                    }//try
                    catch(Exception ex)
                    {
                        FileErrorLogger _logger = new FileErrorLogger();
                        _logger.LogError(ex.Message, ErrorLogSeverity.SeverityError,
                            ErrorType.TypeApplication, "TeamSiteReports.UploadFile()");
                        _logger = null;
                    }
                    finally
                    {
                        site.Dispose();
                    }
                }//foreach
            }//try
            catch(Exception ex)
            {
                FileErrorLogger _logger = new FileErrorLogger();
                _logger.LogError(ex.Message, ErrorLogSeverity.SeverityError,
                    ErrorType.TypeApplication, "TeamSiteReports.UploadFile()");
                _logger = null;
            }
            finally
            {

                siteCollection.Dispose();
            }

            reportHtmlTable.RenderControl(txtWriter);

            txtWriter.Close();
            tf.UploadFile(System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteSubsiteReportLocation"],
                System.Configuration.ConfigurationSettings.AppSettings["TeamSiteReports.TeamSiteSubsiteReportDestination"]);
        }