示例#1
0
文件: WikiListHists.cs 项目: mnisl/OD
		///<summary>Does not save to DB. Return null if listName does not exist.</summary>
		public static WikiListHist GenerateFromName(string listName) {
			if(RemotingClient.RemotingRole==RemotingRole.ClientWeb) {
				return Meth.GetObject<WikiListHist>(MethodBase.GetCurrentMethod(),listName);
			}
			if(!WikiLists.CheckExists(listName)) {
				return null;
			}
			WikiListHist retVal=new WikiListHist();
			retVal.UserNum=Security.CurUser.UserNum;
			retVal.ListName=listName;
			retVal.DateTimeSaved=DateTime.Now;
			DataTable table=WikiLists.GetByName(listName);
			table.TableName=listName;//required for xmlwriter
			using(var writer = new System.IO.StringWriter()) {
				table.WriteXml(writer);
				retVal.ListContent=writer.ToString();
			}
			List<WikiListHeaderWidth> listHeaders=WikiListHeaderWidths.GetForList(listName);
			StringBuilder sb=new StringBuilder();
			for(int i=0;i<listHeaders.Count;i++) {
				if(i>0) {
					sb.Append(";");
				}
				sb.Append(listHeaders[i].ColName+","+listHeaders[i].ColWidth);
			}
			retVal.ListHeaders=sb.ToString();
			using(var writer=new StringWriter()) {
				table.WriteXml(writer,XmlWriteMode.WriteSchema);
				retVal.ListContent=writer.ToString();
			}
			return retVal;
		}
示例#2
0
        ///<summary>Does not save to DB. Return null if listName does not exist.
        ///Pass in the userod.UserNum of the user that is making the change.  Typically Security.CurUser.UserNum.
        ///Security.CurUser cannot be used within this method due to the server side of middle tier.</summary>
        public static WikiListHist GenerateFromName(string listName, long userNum)
        {
            if (RemotingClient.RemotingRole == RemotingRole.ClientWeb)
            {
                return(Meth.GetObject <WikiListHist>(MethodBase.GetCurrentMethod(), listName, userNum));
            }
            if (!WikiLists.CheckExists(listName))
            {
                return(null);
            }
            WikiListHist retVal = new WikiListHist();

            retVal.UserNum       = userNum;
            retVal.ListName      = listName;
            retVal.DateTimeSaved = DateTime.Now;
            DataTable table = WikiLists.GetByName(listName);

            table.TableName = listName;          //required for xmlwriter
            using (var writer = new StringWriter()) {
                table.WriteXml(writer, XmlWriteMode.WriteSchema);
                retVal.ListContent = writer.ToString();
            }
            List <WikiListHeaderWidth> listHeaders = WikiListHeaderWidths.GetForList(listName);

            if (listHeaders.Count > 0)
            {
                retVal.ListHeaders = string.Join(";", listHeaders.Select(x => x.ColName + "," + x.ColWidth));
            }
            return(retVal);
        }
示例#3
0
文件: WikiListHists.cs 项目: mnisl/OD
		///<summary></summary>
		public static long Insert(WikiListHist wikiListHist) {
			if(RemotingClient.RemotingRole==RemotingRole.ClientWeb) {
				wikiListHist.WikiListHistNum=Meth.GetLong(MethodBase.GetCurrentMethod(),wikiListHist);
				return wikiListHist.WikiListHistNum;
			}
			return Crud.WikiListHistCrud.Insert(wikiListHist);
		}
示例#4
0
 ///<summary></summary>
 public static long Insert(WikiListHist wikiListHist)
 {
     if (RemotingClient.RemotingRole == RemotingRole.ClientWeb)
     {
         wikiListHist.WikiListHistNum = Meth.GetLong(MethodBase.GetCurrentMethod(), wikiListHist);
         return(wikiListHist.WikiListHistNum);
     }
     return(Crud.WikiListHistCrud.Insert(wikiListHist));
 }
示例#5
0
		private void FormWikiListEdit_Load(object sender,EventArgs e) {
			if(!WikiLists.CheckExists(WikiListCurName)) {
				IsNew=true;
				WikiLists.CreateNewWikiList(WikiListCurName);
			}
			_table=WikiLists.GetByName(WikiListCurName);
			_wikiListOld=WikiListHists.GenerateFromName(WikiListCurName);
			if(_wikiListOld==null) {
				_wikiListOld=new WikiListHist();
			}
			FillGrid();
			ActiveControl=textSearch;//start in search box.
		}
示例#6
0
        public static List <WikiListHeaderWidth> GetFromListHist(WikiListHist wikiListHist)
        {
            List <WikiListHeaderWidth> retVal = new List <WikiListHeaderWidth>();

            string[] arrayHeaders = wikiListHist.ListHeaders.Split(';');
            for (int i = 0; i < arrayHeaders.Length; i++)
            {
                WikiListHeaderWidth hw = new WikiListHeaderWidth();
                hw.ListName = wikiListHist.ListName;
                hw.ColName  = arrayHeaders[i].Split(',')[0];
                hw.ColWidth = PIn.Int(arrayHeaders[i].Split(',')[1]);
                retVal.Add(hw);
            }
            return(retVal);
        }
示例#7
0
        ///<summary>Drops table in DB.  Recreates Table, then fills with Data.
        ///Pass in the userod.UserNum of the user that is making the change.  Typically Security.CurUser.UserNum.</summary>
        public static void RevertFrom(WikiListHist wikiListHist, long userNum)
        {
            if (RemotingClient.RemotingRole == RemotingRole.ClientWeb)
            {
                Meth.GetVoid(MethodBase.GetCurrentMethod(), wikiListHist, userNum);
                return;
            }
            if (!WikiLists.CheckExists(wikiListHist.ListName))
            {
                return;                //should never happen.
            }
            DataTable tableRevertedContent = new DataTable();

            using (XmlReader xmlReader = XmlReader.Create(new StringReader(wikiListHist.ListContent))){
                tableRevertedContent.ReadXml(xmlReader);
            }
            //Begin the process of deleting old table and creating new one.
            //Save current wiki list content to the history
            WikiListHists.Insert(GenerateFromName(wikiListHist.ListName, userNum));
            //Delete current wiki list
            WikiLists.DeleteList(wikiListHist.ListName);
            //Create a new empty wiki list, except for the PK column
            WikiLists.CreateNewWikiList(wikiListHist.ListName);
            //Load header data
            List <WikiListHeaderWidth> listHeaders = WikiListHeaderWidths.GetFromListHist(wikiListHist);

            //Add one column per header, skipping the Pk column
            for (int i = 1; i < listHeaders.Count; i++)       //skip the first one, because the first one is the primary key
            {
                WikiLists.AddColumn(listHeaders[i].ListName);
            }
            //Update db with current names and current widths of columns in the WikiListHeaderWidth table to the reverted values
            WikiListHeaderWidths.UpdateNamesAndWidths(wikiListHist.ListName, listHeaders);
            //Fill db table with the reverted values.
            for (int i = 0; i < tableRevertedContent.Rows.Count; i++)
            {
                DataRow row = tableRevertedContent.Rows[i];
                row[0] = WikiLists.AddItem(wikiListHist.ListName);              //setPK and add new row
                DataTable tableOneItem = tableRevertedContent.Clone();
                tableOneItem.Rows.Add(tableOneItem.NewRow());
                tableOneItem.Rows[0].ItemArray = row.ItemArray;
                WikiLists.UpdateItem(wikiListHist.ListName, tableOneItem);
            }
        }
示例#8
0
        ///<summary>Drops table in DB.  Recreates Table, then fills with Data.
        ///Pass in the userod.UserNum of the user that is making the change.  Typically Security.CurUser.UserNum.</summary>
        public static void RevertFrom(WikiListHist wikiListHist, long userNum)
        {
            if (RemotingClient.RemotingRole == RemotingRole.ClientWeb)
            {
                Meth.GetVoid(MethodBase.GetCurrentMethod(), wikiListHist, userNum);
                return;
            }
            if (!WikiLists.CheckExists(wikiListHist.ListName))
            {
                return;                                                                                  //should never happen.
            }
            Insert(GenerateFromName(wikiListHist.ListName, userNum));                                    //Save current wiki list content to the history
            List <WikiListHeaderWidth> listHeaders = WikiListHeaderWidths.GetFromListHist(wikiListHist); //Load header data

            WikiLists.CreateNewWikiList(wikiListHist.ListName, listHeaders, true);                       //dropTableIfExists=true, so the existing table and HeaderWidth rows will be dropped
            DataTable tableRevertedContent = new DataTable();

            using (StringReader sr = new StringReader(wikiListHist.ListContent))
                using (XmlReader xmlReader = XmlReader.Create(sr)) {
                    tableRevertedContent.ReadXml(xmlReader);
                }
            string        commandStart = $@"INSERT INTO wikilist_{POut.String(wikiListHist.ListName)} ({string.Join(",",listHeaders.Select(x => POut.String(x.ColName)))})
				VALUES "                ;
            StringBuilder sb           = new StringBuilder(commandStart);
            string        commaStr     = "";

            for (int i = 0; i < tableRevertedContent.Rows.Count; i++)
            {
                string rowStr = "(" + string.Join(",", tableRevertedContent.Rows[i].ItemArray.Select(x => "'" + POut.String(x.ToString()) + "'")) + ")";
                if (sb.Length + rowStr.Length + 1 > TableBase.MaxAllowedPacketCount)
                {
                    Db.NonQ(sb.ToString());
                    sb       = new StringBuilder(commandStart);
                    commaStr = "";
                }
                sb.Append(commaStr + rowStr);
                commaStr = ",";
                if (i == tableRevertedContent.Rows.Count - 1)
                {
                    Db.NonQ(sb.ToString());
                }
            }
        }
示例#9
0
        ///<summary>Does not save to DB. Return null if listName does not exist.
        ///Pass in the userod.UserNum of the user that is making the change.  Typically Security.CurUser.UserNum.
        ///Security.CurUser cannot be used within this method due to the server side of middle tier.</summary>
        public static WikiListHist GenerateFromName(string listName, long userNum)
        {
            if (RemotingClient.RemotingRole == RemotingRole.ClientWeb)
            {
                return(Meth.GetObject <WikiListHist>(MethodBase.GetCurrentMethod(), listName, userNum));
            }
            if (!WikiLists.CheckExists(listName))
            {
                return(null);
            }
            WikiListHist retVal = new WikiListHist();

            retVal.UserNum       = userNum;
            retVal.ListName      = listName;
            retVal.DateTimeSaved = DateTime.Now;
            DataTable table = WikiLists.GetByName(listName);

            table.TableName = listName;          //required for xmlwriter
            using (var writer = new System.IO.StringWriter()) {
                table.WriteXml(writer);
                retVal.ListContent = writer.ToString();
            }
            List <WikiListHeaderWidth> listHeaders = WikiListHeaderWidths.GetForList(listName);
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < listHeaders.Count; i++)
            {
                if (i > 0)
                {
                    sb.Append(";");
                }
                sb.Append(listHeaders[i].ColName + "," + listHeaders[i].ColWidth);
            }
            retVal.ListHeaders = sb.ToString();
            using (var writer = new StringWriter()) {
                table.WriteXml(writer, XmlWriteMode.WriteSchema);
                retVal.ListContent = writer.ToString();
            }
            return(retVal);
        }
示例#10
0
文件: WikiListHists.cs 项目: mnisl/OD
		///<summary>Drops table in DB.  Recreates Table, then fills with Data.</summary>
		public static void RevertFrom(WikiListHist wikiListHist) {
			if(RemotingClient.RemotingRole==RemotingRole.ClientWeb) {
				Meth.GetVoid(MethodBase.GetCurrentMethod(),wikiListHist);
				return;
			}
			if(!WikiLists.CheckExists(wikiListHist.ListName)) {
				return;//should never happen.
			}
			DataTable tableRevertedContent=new DataTable();
			using(XmlReader xmlReader=XmlReader.Create(new StringReader(wikiListHist.ListContent))){
				tableRevertedContent.ReadXml(xmlReader);
			}
			//Begin the process of deleting old table and creating new one.
			//Save current wiki list content to the history
			WikiListHists.Insert(GenerateFromName(wikiListHist.ListName));
			//Delete current wiki list
			WikiLists.DeleteList(wikiListHist.ListName);
			//Create a new empty wiki list, except for the PK column
			WikiLists.CreateNewWikiList(wikiListHist.ListName);
			//Load header data
			List<WikiListHeaderWidth> listHeaders=WikiListHeaderWidths.GetFromListHist(wikiListHist);
			//Add one column per header, skipping the Pk column
			for(int i=1;i<listHeaders.Count;i++) {//skip the first one, because the first one is the primary key
				WikiLists.AddColumn(listHeaders[i].ListName);
			}
			//Update db with current names and current widths of columns in the WikiListHeaderWidth table to the reverted values
			WikiListHeaderWidths.UpdateNamesAndWidths(wikiListHist.ListName,listHeaders);
			//Fill db table with the reverted values.
			for(int i=0;i<tableRevertedContent.Rows.Count;i++) {
				DataRow row=tableRevertedContent.Rows[i];
				row[0]=WikiLists.AddItem(wikiListHist.ListName);//setPK and add new row
				DataTable tableOneItem=tableRevertedContent.Clone();
				tableOneItem.Rows.Add(tableOneItem.NewRow());
				tableOneItem.Rows[0].ItemArray=row.ItemArray;
				WikiLists.UpdateItem(wikiListHist.ListName,tableOneItem);
			}
		}
示例#11
0
		private void butHistory_Click(object sender,EventArgs e) {
			FormWikiListHistory FormWLH=new FormWikiListHistory();
			FormWLH.ListNameCur=WikiListCurName;
			FormWLH.ShowDialog();
			if(!FormWLH.IsReverted) {
				return;
			}
			//Reversion has already saved a copy of the current revision.
			_wikiListOld=WikiListHists.GenerateFromName(WikiListCurName);
			_table=WikiLists.GetByName(WikiListCurName);
			FillGrid();
			_isEdited=false;
			IsNew=false;
		}
示例#12
0
		public static List<WikiListHeaderWidth> GetFromListHist(WikiListHist wikiListHist) {
			List<WikiListHeaderWidth> retVal=new List<WikiListHeaderWidth>();
			string[] arrayHeaders=wikiListHist.ListHeaders.Split(';');
			for(int i=0;i<arrayHeaders.Length;i++) {
				WikiListHeaderWidth hw=new WikiListHeaderWidth();
				hw.ListName=wikiListHist.ListName;
				hw.ColName=arrayHeaders[i].Split(',')[0];
				hw.ColWidth=PIn.Int(arrayHeaders[i].Split(',')[1]);
				retVal.Add(hw);
			}
			return retVal;
		}