コード例 #1
0
ファイル: Scorm.cs プロジェクト: PavelPZ/NetNew
 //Definice WHERE podminky
 static IEnumerable<LANGMasterScorms> getQuery(Container db, pars par) {
   var res = db.LANGMasterScorms.Where(s => s.UserId == par.UserId); //Test na email vzdy
   if (par.AttemptId.isValue) res = res.Where(s => s.AttemptId == par.AttemptId.value); //neprazdny AttemptId, pridej podminku
   if (par.AttemptIdStr.isValue) res = res.Where(s => s.AttemptIdStr == par.AttemptIdStr.value); //neprazdny AttemptId, pridej podminku
   if (par.AttemptIdGuid.isValue) res = res.Where(s => s.AttemptIdGuid == par.AttemptIdGuid.guidValue); //neprazdny AttemptId, pridej podminku
   if (par.Key1Str.isValue) res = res.Where(s => s.Key1Str == par.Key1Str.value); //neprazdne Key1Str, pridej podminku
   if (par.Key2Str.isValue) res = res.Where(s => s.Key2Str == par.Key2Str.value); //...
   if (par.Key1Int.isValue) res = res.Where(s => s.Key1Int == par.Key1Int.value);
   if (par.Key2Int.isValue) res = res.Where(s => s.Key2Int == par.Key2Int.value);
   if (par.Key2Ints.isValue) res = par.Key2Ints.value == null ? res.Where(s => false) : res.Where(s => par.Key2Ints.value.Contains(s.Key2Int));
   return res;
 }
コード例 #2
0
ファイル: Scorm.cs プロジェクト: PavelPZ/NetNew
    //Insert nebo Update
    static void setData(pars par, string Data1, string Data2) {
      var db = Lib.CreateContext();

      //Where podminka na vsechny klice
      LANGMasterScorms cdata = db.LANGMasterScorms.
        FirstOrDefault(s => s.UserId == par.UserId
          && (par.AttemptIdStr.value==null || s.AttemptIdStr == par.AttemptIdStr.value)
          //&& s.AttemptIdGuid == par.AttemptIdGuid.guidValue  
          && s.AttemptId == par.AttemptId.value
          && (par.Key1Str.value==null || s.Key1Str == par.Key1Str.value)
          && (par.Key2Str.value==null || s.Key2Str == par.Key2Str.value)
          && s.Key1Int == par.Key1Int.value 
          && s.Key2Int == par.Key2Int.value);
      //Zaznam nenalezen, zaloz novy
      if (cdata == null)
#if !net35
        db.LANGMasterScorms.Add(cdata = new LANGMasterScorms() {
#else
        db.LANGMasterScorms.InsertOnSubmit(cdata = new LANGMasterScorm() {
#endif
          UserId = par.UserId,
          AttemptId = par.AttemptId.value,
          AttemptIdStr = par.AttemptIdStr.value,
          AttemptIdGuid = par.AttemptIdGuid.guidValue,
          Key1Str = normalizeNull(par.Key1Str.value),
          Key2Str = normalizeNull(par.Key2Str.value),
          Key1Int = par.Key1Int.value,
          Key2Int = par.Key2Int.value,
          Date = par.Date.value,
        });
      //V zaznamu aktualizuj Data1 a Data2 pole
      cdata.Data1 = Data1; cdata.Data2 = Data2;
      //Save DB
#if !net35
      Lib.SaveChanges(db);
#else
      db.SubmitChanges();
#endif
    }
コード例 #3
0
ファイル: Scorm.cs プロジェクト: PavelPZ/NetNew
 //Select
 static string getData(requestType type, pars par) {
   var db = Lib.CreateContext();
   //Where cast queryObj
   var q = getQuery(db, par);
   bool isLog = Logger.LogLowId() != null;
   string[] res;
   string[] log = null;
   //Select cast queryObj
   switch (type) {
     case requestType.get_data1: res = q.Select(s => s.Data1).ToArray(); if (isLog) log = res.Select(s => Encoding.UTF8.GetString(Convert.FromBase64String(s))).ToArray(); break; //Data1
     case requestType.get_data2: res = q.Select(s => s.Data2).ToArray(); if (isLog) log = res.Select(s => Encoding.UTF8.GetString(Convert.FromBase64String(s))).ToArray(); break; //Data1
     case requestType.get_key1str_data2: res = q.SelectMany(s => XExtension.Return(s.Key1Str, s.Data2)).ToArray(); break; //Key1Str, Data2
     case requestType.get_data1_data2: res = q.SelectMany(s => XExtension.Return(s.Data1, s.Data2)).ToArray(); if (isLog) log = res.Select(s => Encoding.UTF8.GetString(Convert.FromBase64String(s))).ToArray(); break; //Data1, Data2
     case requestType.get_key2ints_data2: res = q.Select(s => s.Data2).ToArray(); if (isLog) log = res.Select(s => Encoding.UTF8.GetString(Convert.FromBase64String(s))).ToArray(); break; //Data2
     default: throw new NotImplementedException();
   }
   if (isLog && log != null) Logger.Log(">>> GetData: " + (log.Length==0 ? "" : log.Aggregate((r, i) => r + "\r\n" + i)));
   //Vsechny hodnoty proloz oddelovacem
   StringBuilder sb = new StringBuilder();
   foreach (var s in res) { sb.Append(s); sb.Append(delim); }
   if (sb.Length > 0) sb.Length = sb.Length - 1;
   //vraceni hodnoty pro response
   return sb.ToString();
 }
コード例 #4
0
ファイル: Scorm.cs プロジェクト: PavelPZ/NetNew
      public override string ProcessRequest(HttpContext context) {

        Container db; string txt = null;

        //Parse queryObj stringu
        pars par = new pars(context);
        Logger.LogLow(() => ">>> Input:" + par.dump());
        try {
          //Dle typu operace
          switch (par.type) {
            //case requestType.logger:
            //  Logger.SendLog(context);
            //  break;
            //case requestType.no:
            //  try {
            //    if (lib.CreateContext().LANGMasterScorms.FirstOrDefault(s => s.compId == -1) == null)
            //      context.Response.Write("<h2>Handler called</h2>");
            //  } catch (Exception exp) {
            //    context.Response.Write("<h2>Error</h2>");
            //    context.Response.Write(LowUtils.ExceptionToString(exp, true));
            //  }
            //  break;
            //Set data
            case requestType.set_data:
              //par.checkValues(par.AttemptId, par.Key1Int, par.Key1Str, par.Key2Int, par.Key2Str);
              //Vlastni data jsou v "par" hodnote POST
              var postData = RewRpcLib.getPostData(context);
              string[] parts = postData.Split(delim); //ziskani "par" hodnoty a split
              if (parts.Length != 2) throw new Exception(); //kontrola
              //ulozeni dat
              setData(par, parts[0], parts[1]);
              break;
            //Get data
            case requestType.get_data1:
            case requestType.get_data2:
            case requestType.get_data1_data2:
            case requestType.get_key1str_data2:
            case requestType.get_key2ints_data2:
              //par.checkValues(par.Key1Int, par.AttemptId);
              //nacteni dat, viz getData comment
              txt = getData(par.type, par);
              break;
            case requestType.del_all_key1str:
              //par.checkValues(par.Key1Int, par.AttemptId);

              //*******************************
              //Realizace operace
              //DELETE FROM LANGMasterScorms WHERE <podminka z queryObj stringu> AND key1str IN ('key1','key2',... klice z POST hodnoty)
              //Klicu muze byt hodne, nejdrive se tedy z DB zjisti vsechny hodnoty compId, teprve na tyto hodnoty se pouzije IN operator
              db = Lib.CreateContext();
              //nacteni <compId,Key1Str> z DB pro vsechny zaznamy, urcene klici
              var all = getQuery(db, par).Select(c => new { c.Id, c.Key1Str }).ToArray();
              //Ziskani vsech Key1Str
              string[] keys = RewRpcLib.getPostData(context).Split(delim);
              //z nactenych <compId,Key1Str> vyber compId, odpovidajici klicum v POST. Z vsech compId udelej comma delimited string 
              var idCond = all.Where(ik => keys.Any(k => k == ik.Key1Str)).Select(ik => ik.Id.ToString()).DefaultIfEmpty().Aggregate((r, i) => r + "," + i);
              //comma delimited string pouzij v IN
#if !net35
              //EF7 TODO
              //if (!string.IsNullOrEmpty(idCond)) db.Database.ExecuteSqlCommand("DELETE FROM LANGMasterScorms WHERE id in (" + idCond + ")");
#else
          db.ExecuteCommand("DELETE FROM LANGMasterScorms WHERE id in (" + idCond + ")");
#endif
              break;
            default:
              Logger.Log(">>> Error: Unknown type: " + par.type.ToString());
              throw new Exception("Unknown type: " + par.type.ToString());
          }
          
          if (txt == null) return null;
          //Logger.Log(">>> Output: " + txt);
          var jsonpCallback = context.Request["callback"]; //pro eDoceo JSONP neni potreba realizovat
          if (!string.IsNullOrEmpty(jsonpCallback)) txt = jsonpCallback + "(" + JsonConvert.SerializeObject(txt) + ")"; //pro eDoceo JSONP neni potreba realizovat
        } catch (Exception exp) {
          Logger.Error(exp);
        }
        return txt;
      }