/// <summary> /// 初始化表情正则对象数组 /// </summary> public static void InitRegexSmilies() { SmiliesInfo[] smiliesList = Smilies.GetSmiliesListWithInfo(); //对表情进行排序,将标识符长的放到最开始,这样可以让长标识表情先解释,以防止:giggle :g 解释为[:g]iggle [:g] for (int Outer = smiliesList.Length - 1; Outer >= 1; Outer--) { //一次冒泡排序比较0~ourter-1个元素的大小 for (int Inner = 0; Inner <= Outer - 1; Inner++) { //排序过程 if (smiliesList[Inner].Code.Length < smiliesList[Inner + 1].Code.Length) { SmiliesInfo temp = smiliesList[Inner]; smiliesList[Inner] = smiliesList[Inner + 1]; smiliesList[Inner + 1] = temp; } } } regexSmile = new Regex[smiliesList.Length]; for (int i = 0; i < smiliesList.Length; i++) { regexSmile[i] = new Regex(@Regex.Escape(smiliesList[i].Code), RegexOptions.None); } }
/// <summary> /// 将缓存中的表情信息返回为SmiliesInfo[],不包括表情分类 /// </summary> /// <returns></returns> public static SmiliesInfo[] GetSmiliesListWithInfo() { Discuz.Cache.DNTCache cache = Discuz.Cache.DNTCache.GetCacheService(); SmiliesInfo[] smilieslistinfo = cache.RetrieveObject("/UI/SmiliesListWithInfo") as SmiliesInfo[]; if (smilieslistinfo == null) { DataTable dt = GetSmiliesListWithoutType(); if (dt == null) { return(null); } if (dt.Rows.Count <= 0) { return(null); } smilieslistinfo = new SmiliesInfo[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { smilieslistinfo[i] = new SmiliesInfo(); smilieslistinfo[i].Id = Utils.StrToInt(dt.Rows[i]["id"], 0); smilieslistinfo[i].Code = dt.Rows[i]["Code"].ToString(); smilieslistinfo[i].Displayorder = Utils.StrToInt(dt.Rows[i]["Displayorder"], 0); smilieslistinfo[i].Type = Utils.StrToInt(dt.Rows[i]["Type"], 0); smilieslistinfo[i].Url = dt.Rows[i]["Url"].ToString(); } cache.AddObject("/UI/SmiliesListWithInfo", smilieslistinfo); //表情缓存重新加载时重新初始化表情正则对象数组 ResetRegexSmilies(smilieslistinfo); } return(smilieslistinfo); }
/// <summary> /// 装载表情信息 /// </summary> /// <param name="dt"></param> /// <returns></returns> private static SmiliesInfo[] LoadSmiliesInfo(DataTable dt) { if (dt == null || dt.Rows.Count < 1) { return(null); } SmiliesInfo[] smilieslistinfo = new SmiliesInfo[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { smilieslistinfo[i] = new SmiliesInfo(); smilieslistinfo[i].Id = TypeConverter.ObjectToInt(dt.Rows[i]["id"], 0); smilieslistinfo[i].Code = dt.Rows[i]["Code"].ToString(); smilieslistinfo[i].Displayorder = TypeConverter.ObjectToInt(dt.Rows[i]["Displayorder"], 0); smilieslistinfo[i].Type = TypeConverter.ObjectToInt(dt.Rows[i]["Type"], 0); smilieslistinfo[i].Url = dt.Rows[i]["Url"].ToString(); } return(smilieslistinfo); }
private void BindFilesList() { try { fileinfoList.Text = ""; SmiliesInfo smilies = Discuz.Forum.Smilies.GetSmiliesTypeById(DNTRequest.GetInt("typeid", 0)); if (smilies == null) { return; } fileList = GetSmilesFileList(smilies.Url); string dir = smilies.Url; DataTable dt = Smilies.GetSmilieByType(DNTRequest.GetInt("typeid", 0)); foreach (DataRow smile in dt.Rows) { ViewState["code"] += smile["code"] + ","; fileList.Remove(smile["url"].ToString().Replace(dir + "/", "")); } fileList.Remove("Thumbs.db"); int i = 1; foreach (string file in fileList) { fileinfoList.Text += "<tr class='mouseoutstyle' onmouseover='this.className=\"mouseoverstyle\"' onmouseout='this.className=\"mouseoutstyle\"'>\n"; fileinfoList.Text += "<td nowrap='nowrap' style='border-color:#EAE9E1;border-width:1px;border-style:solid;'><input type='checkbox' id='id" + i + "' name='id" + i + "' value='" + i + "'/></td>\n"; fileinfoList.Text += "<td nowrap='nowrap' style='border-color:#EAE9E1;border-width:1px;border-style:solid;'><input type='text' id='code" + i + "' name='code" + i + "' value=':" + dir + (dt.Rows.Count + i) + ":' class=\"FormBase\" onfocus=\"this.className='FormFocus';\" onblur=\"this.className='FormBase';\" /></td>\n"; fileinfoList.Text += "<td nowrap='nowrap' style='border-color:#EAE9E1;border-width:1px;border-style:solid;'><input type='text' id='order" + i + "' name='order" + i + "' value='" + i + "' class=\"FormBase\" onfocus=\"this.className='FormFocus';\" onblur=\"this.className='FormBase';\" size='4' /></td>\n"; fileinfoList.Text += "<td nowrap='nowrap' style='border-color:#EAE9E1;border-width:1px;border-style:solid;'><input type='hidden' name='url" + i + "' value='" + dir + "/" + file + "' />" + dir + "/" + file + "</td>\n"; fileinfoList.Text += "<td nowrap='nowrap' style='border-color:#EAE9E1;border-width:1px;border-style:solid;'>" + PicStr(smilies.Url + "/" + file) + "</td>\n"; fileinfoList.Text += "</tr>\n"; i++; } if (fileList.Count == 0) { SubmitButton.Visible = false; } } catch (IOException err) { base.RegisterStartupScript("", "<script>alert('" + err.Message + "');window.location.href='forum_smiliemanage.aspx';</script>"); } }
/// <summary> /// 得到不带分类的表情符数据 /// </summary> /// <returns>表情符表</returns> public static SmiliesInfo[] GetSmiliesListWithoutType() { DataTable dt = DatabaseProvider.GetInstance().GetSmiliesListWithoutType(); if (dt == null || dt.Rows.Count < 1) { return(null); } SmiliesInfo[] smilieslistinfo = new SmiliesInfo[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { smilieslistinfo[i] = new SmiliesInfo(); smilieslistinfo[i].Id = TypeConverter.ObjectToInt(dt.Rows[i]["id"], 0); smilieslistinfo[i].Code = dt.Rows[i]["Code"].ToString(); smilieslistinfo[i].Displayorder = TypeConverter.ObjectToInt(dt.Rows[i]["Displayorder"], 0); smilieslistinfo[i].Type = TypeConverter.ObjectToInt(dt.Rows[i]["Type"], 0); smilieslistinfo[i].Url = dt.Rows[i]["Url"].ToString(); } return(smilieslistinfo); }