referrers.aspx.cs

来自「个人博客系统」· CS 代码 · 共 161 行

CS
161
字号
#region Using

using System;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using BlogEngine.Core;

#endregion

public partial class admin_Pages_referrers : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!Page.IsPostBack)
    {      
      if (BlogSettings.Instance.EnableReferrerTracking)
      {
        BindDays();
        BindReferrers(DateTime.Now.ToString("dddd", System.Globalization.CultureInfo.InvariantCulture));
      }
      else
      {
        ddlDays.Enabled = false;
      }

      cbEnableReferrers.Checked = BlogSettings.Instance.EnableReferrerTracking;
    }

    ddlDays.SelectedIndexChanged += new EventHandler(ddlDays_SelectedIndexChanged);
    cbEnableReferrers.CheckedChanged += new EventHandler(cbEnableReferrers_CheckedChanged);
    Page.Title = Resources.labels.referrers;
  }

  private void cbEnableReferrers_CheckedChanged(object sender, EventArgs e)
  {
    if (cbEnableReferrers.Checked)
    {
      BindDays();
      BindReferrers(DateTime.Now.ToString("dddd", System.Globalization.CultureInfo.InvariantCulture));
    }
    else
    {
      ddlDays.Enabled = false;
    }

    BlogSettings.Instance.EnableReferrerTracking = cbEnableReferrers.Checked;
    BlogSettings.Instance.Save();
  }

  void ddlDays_SelectedIndexChanged(object sender, EventArgs e)
  {
    BindReferrers(ddlDays.SelectedValue);
  }

  private void BindDays()
  {
    int count = 0;
    ddlDays.ClearSelection();
    ddlDays.Enabled = true;
    foreach (ListItem item in ddlDays.Items)
    {
      item.Text = DateTime.MinValue.AddDays(count).ToString("dddd");
      if (item.Value == DateTime.Now.ToString("dddd", System.Globalization.CultureInfo.InvariantCulture))
      {
        item.Selected = true;
      }

      count++;
    }
  }

  private void BindReferrers(string day)
  {
    string filename = Server.MapPath("~/app_data/log/" + day + ".xml");
    if (File.Exists(filename))
    {
      DataSet ds = new DataSet();
      ds.ReadXml(filename);

      DataTable table = new DataTable();
      table.Columns.Add("url", typeof(string));
      table.Columns.Add("shortUrl", typeof(string));
      table.Columns.Add("hits", typeof(int));

      DataTable spamTable = table.Clone();

      foreach (DataRow row in ds.Tables[0].Rows)
      {
        DataRow newRow = table.NewRow();
        if (row.Table.Columns.Contains("isSpam") && row["isSpam"].ToString().ToLowerInvariant() == "true")
          newRow = spamTable.NewRow();

        newRow["url"] = Server.HtmlEncode(row["address"].ToString());
        newRow["shortUrl"] = MakeShortUrl(row["address"].ToString());
        newRow["hits"] = int.Parse(row["url_text"].ToString());

        if (row.Table.Columns.Contains("isSpam") && row["isSpam"].ToString().ToLowerInvariant() == "true")
          spamTable.Rows.Add(newRow);
        else
          table.Rows.Add(newRow);
      }

      BindTable(table, grid);
      BindTable(spamTable, spamGrid);
    }
  }

  private void BindTable(DataTable table, GridView grid)
  {
    string total = table.Compute("sum(hits)", null).ToString();

    DataView view = new DataView(table);
    view.Sort = "hits desc";

    grid.DataSource = view;
    grid.DataBind();
    
    if (grid.Rows.Count > 0)
    {
      grid.FooterRow.Cells[0].Text = "Total";
      grid.FooterRow.Cells[1].Text = total;
    }

    PaintRows(grid, 3);
  }

  private string MakeShortUrl(string url)
  {
    if (url.Length > 150)
      return url.Substring(0, 150) + "...";

    return Server.HtmlEncode(url.Replace("http://", string.Empty).Replace("www.", string.Empty));
  }

  /// <summary>
  /// Paints the background color of the alternate rows
  /// in the gridview.
  /// </summary>
  private void PaintRows(GridView grid, int alternateRows)
  {
    if (grid.Rows.Count == 0)
      return;

    int count = 0;
    for (int i = 0; i < grid.Controls[0].Controls.Count - 1; i++)
    {
      if (count > alternateRows)
        (grid.Controls[0].Controls[i] as WebControl).CssClass = "alt";

      count++;

      if (count == alternateRows + alternateRows + 1)
        count = 1;
    }
  }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?