public static void BindData(Chart chart, string prvName, object context, string[] seriesExpr, string labelExpr, string labelLookupName) { var prv = WebManager.GetService <IProvider <object, object> >(prvName); var ognlContext = new Dictionary <string, object>(); ognlContext["data"] = prv.Provide(context); var ognlExpr = new NReco.OGNL.EvalOgnl(); int seriesIdx = 0; foreach (var expr in seriesExpr) { var dataset = (IEnumerable)ognlExpr.Eval(expr, ognlContext); var series = chart.Series[seriesIdx]; foreach (var val in dataset) { var decVal = Convert.ToDecimal(val); series.Points.AddY(decVal); } seriesIdx++; } /*if (!String.IsNullOrEmpty(labelExpr)) { * var labels = (IEnumerable)ognlExpr.Eval( labelExpr, ognlContext ); * var labelsList = new List<string>(); * var labelPrv = String.IsNullOrEmpty(labelLookupName) ? null : WebManager.GetService<IProvider<object,string>>(labelLookupName); * foreach (var lbl in labels) { * labelsList.Add( labelPrv!=null ? labelPrv.Provide(lbl) : Convert.ToString(lbl) ); * } * res += "&"+labelParam+String.Join("|", labelsList.ToArray() ); * }*/ }
public static object GetProviderObject(string prvName, object context, bool useCache) { var prv = WebManager.GetService <IProvider <object, object> >(prvName); return(GetProviderResult(prvName, context, useCache, x => prv.Provide(x))); }
public static IDictionary[] GetProviderDictionaries(string prvName, object context, bool useCache) { var prv = WebManager.GetService <IProvider <object, IDictionary[]> >(prvName); return(GetProviderResult(prvName, context, useCache, x => prv.Provide(x)) as IDictionary[]); }
public override SiteMapNode BuildSiteMap() { lock (this) { Clear(); var dalc = WebManager.GetService <IDalc>(DalcName); var ds = new DataSet(); dalc.Load(ds, new Query(SourceName)); rootNode = new SiteMapNode(this, "root", RootUrl, RootTitle); var idToNode = new Dictionary <string, SiteMapNode>(); // build nodes foreach (DataRow r in ds.Tables[SourceName].Rows) { var node = CreateNode(r); idToNode[node.Key] = node; } // set hierarchy relations foreach (DataRow r in ds.Tables[SourceName].Rows) { var node = idToNode[Convert.ToString(r[IdField])]; var parentKey = Convert.ToString(r[FkField]); if (r[FkField] != DBNull.Value && idToNode.ContainsKey(parentKey)) { AddNode(node, idToNode[parentKey]); } else { AddNode(node, rootNode); } } } return(rootNode); }
protected string GetValueText() { var dalc = WebManager.GetService <IDalc>(DalcServiceName); var relexParser = new RelExQueryParser(false); var exprResolver = WebManager.GetService <NI.Common.Expressions.IExpressionResolver>("defaultExprResolver"); var qContext = new Hashtable(); if (DataContext is IDictionary) { qContext = new Hashtable((IDictionary)DataContext); } qContext["q"] = String.Empty; Query q = (Query)relexParser.Parse(Convert.ToString(exprResolver.Evaluate(qContext, GetRelex()))); q.Root = new QueryConditionNode((QField)ValueFieldName, Conditions.Equal, (QConst)Value); //& q.Root; var data = new Hashtable(); if (dalc.LoadRecord(data, q)) { var text = Convert.ToString(data[TextFieldName]); return(LocalizationEnabled?WebManager.GetLabel(text, this):text); } else { Value = null; return(""); } }
public static bool GetProviderBoolean(string prvName, object context, bool useCache) { var prv = WebManager.GetService <IProvider <object, object> >(prvName); var res = GetProviderResult(prvName, context, useCache, x => prv.Provide(x)); return(AssertHelper.IsFuzzyTrue(res)); }
public static string PrepareDataUrl(string prvName, object context, string[] seriesExpr, string labelParam, string labelExpr, string labelLookupName) { var prv = WebManager.GetService <IProvider <object, object> >(prvName); var ognlContext = new Dictionary <string, object>(); ognlContext["data"] = prv.Provide(context); var series = new List <string>(); decimal allMin = 0; decimal allMax = 0; var ognlExpr = new NReco.OGNL.EvalOgnl(); foreach (var expr in seriesExpr) { var dataset = (IEnumerable)ognlExpr.Eval(expr, ognlContext); var datasetList = new List <string>(); decimal min = 0; decimal max = 0; foreach (var val in dataset) { var decVal = Convert.ToDecimal(val); datasetList.Add(String.Format(CultureInfo.InvariantCulture, "{0:0.#}", decVal)); if (decVal < min) { min = decVal; } if (decVal > max) { max = decVal; } } series.Add(String.Join(",", datasetList.ToArray())); if (allMin > min) { allMin = min; } if (allMax < max) { allMax = max; } } var res = String.Format(CultureInfo.InvariantCulture, "chd=t:{0}&chds={1:0.##},{2:0.##}&chxr=1,{1:0.##},{2:0.##},{3}", String.Join("|", series.ToArray()), allMin, allMax, (allMax - allMin) / 5); if (!String.IsNullOrEmpty(labelExpr)) { var labels = (IEnumerable)ognlExpr.Eval(labelExpr, ognlContext); var labelsList = new List <string>(); var labelPrv = String.IsNullOrEmpty(labelLookupName) ? null : WebManager.GetService <IProvider <object, string> >(labelLookupName); foreach (var lbl in labels) { labelsList.Add(labelPrv != null ? labelPrv.Provide(lbl) : Convert.ToString(lbl)); } res += "&" + labelParam + String.Join("|", labelsList.ToArray()); } return(res); }
protected string GetRelex() { var relexByServiceName = WebManager.GetService <object>(Relex); if (relexByServiceName != null) { return(Convert.ToString(relexByServiceName)); } return(Relex); }
public string[] GetSelectedIds() { //non-relational mode if (RelationEditor == null) { var values = Eval(ID) as IEnumerable; if (values != null) { return(values.Cast <object>().Select(v => Convert.ToString(v)).ToArray()); } else { return(new string[0]); } } bool isEmptyId = AssertHelper.IsFuzzyEmpty(EntityId); // special hack for autoincrement "new row" ids... TBD: refactor if (EntityId is int || EntityId is long) { if (Convert.ToInt64(EntityId) == 0) { isEmptyId = true; } } if (isEmptyId) { if (DefaultValueServiceName != null) { var defaultValuePrv = WebManager.GetService <IProvider <object, object> >(DefaultValueServiceName); var defaultValues = defaultValuePrv.Provide(DefaultDataContext ?? this.GetContext()); if (defaultValues != null) { var list = new List <string>(); if (defaultValues is IList) { foreach (object defaultVal in (IList)defaultValues) { list.Add(Convert.ToString(defaultVal)); } } else { list.Add(Convert.ToString(defaultValues)); } return(list.ToArray()); } } return(new string[0]); } // select visible ids return(RelationEditor.GetToKeys(EntityId).Select(o => Convert.ToString(o)).ToArray()); }
public void ProcessRequest(HttpContext context) { try { var Request = context.Request; var Response = context.Response; log.Write(LogEvent.Info, "Processing request: {0}", Request.Url.ToString()); string providerName = Request["provider"]; string operationName = Request["operation"]; string contextJson = Request["context"]; string langCode = Request["language"]; try { if (!String.IsNullOrEmpty(langCode)) { Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(langCode); } } catch { log.Write(LogEvent.Warn, "Cannot apply language settings (language: {0}, request: {1})", langCode, Request.Url.ToString()); } var json = new JavaScriptSerializer(); var prvContext = contextJson != null?json.DeserializeObject(contextJson) : null; if (providerName != null) { var provider = WebManager.GetService <IProvider <object, object> >(providerName); if (provider != null) { var result = provider.Provide(prvContext); if (result != null) { Response.Write(json.Serialize(result)); } } } else if (operationName != null) { // maybe operation? var op = WebManager.GetService <IOperation <object> >(operationName); if (op != null) { op.Execute(prvContext); } } } catch (Exception ex) { log.Write(LogEvent.Warn, String.Format("exception={0}, url={1}", ex, context.Request.Url)); context.Response.Write(ex.Message); context.Response.StatusCode = 510; /*custom code:ajax error*/ } }
protected string GetSelectedItemsJson() { var dalc = WebManager.GetService <IDalc>(DalcServiceName); var relexParser = new RelExQueryParser(false); var exprResolver = WebManager.GetService <NI.Common.Expressions.IExpressionResolver>("defaultExprResolver"); var selectedIds = GetSelectedIds(); if (selectedIds.Length == 0) { return("[]"); } var qContext = new Hashtable(); qContext["q"] = String.Empty; Query q = (Query)relexParser.Parse(Convert.ToString(exprResolver.Evaluate(qContext, GetRelex()))); q.Root = new QueryConditionNode((QField)ValueFieldName, Conditions.In, new QConst(selectedIds)); //& q.Root; var ds = new DataSet(); dalc.Load(ds, q); var results = new IDictionary <string, object> [ds.Tables[q.SourceName].Rows.Count]; for (int i = 0; i < results.Length; i++) { results[i] = new Dictionary <string, object>(new DataRowDictionaryWrapper(ds.Tables[q.SourceName].Rows[i])); } if (PositionFieldName != null) { var initialPositions = results.Select(r => Array.IndexOf(selectedIds, Convert.ToString(r[ValueFieldName]))) .ToArray(); Array.Sort(initialPositions, results); } var json = new JavaScriptSerializer(); return(json.Serialize(results)); }
public static ICollection GetProviderDataSource(string prvName, object context) { var datasource = WebManager.GetService <IProvider <object, IEnumerable> >(prvName).Provide(context); // tbd - contexts var list = new List <object>(); if (datasource != null) { foreach (var elem in datasource) { if (elem is IDictionary) { list.Add(new DictionaryView((IDictionary)elem)); } else { list.Add(elem); } } } return(list); }
protected string GetSelectedItemsJson() { var selectedIds = GetSelectedIds(); if (selectedIds.Length == 0) { return("[]"); } var res = new List <KeyValuePair <object, string> >(); foreach (var selectedId in res) { var text = WebManager.GetService <IProvider <object, string> >(TextByIdProvider).Provide(selectedId); if (text != null) { res.Add(new KeyValuePair <object, string>(selectedId, text)); } } return(JsHelper.ToJsonString(res)); }
public void ProcessRequest(HttpContext context) { var Request = context.Request; var Response = context.Response; log.Write(LogEvent.Info, "Processing FlexBox ajax request: {0}", Request.Url.ToString()); var dalcName = Request["dalc"]; var relex = Request["relex"]; var validationCode = Request["validate"]; if (!ValidateRequest(validationCode, dalcName, relex)) { log.Write(LogEvent.Error, "Validation failed for FlexBox ajax request: {0}", Request.Url.ToString()); throw new Exception("Invalid FlexBox ajax request"); } var relexByServiceName = WebManager.GetService <object>(relex); if (relexByServiceName != null) { relex = Convert.ToString(relexByServiceName); } var dalc = WebManager.GetService <IDalc>(dalcName); var labelField = Request["label"]; var filterPrvName = Request["filter"]; var relexParser = new RelExQueryParser(false); var exprResolver = WebManager.GetService <NI.Common.Expressions.IExpressionResolver>("defaultExprResolver"); var filterPrv = filterPrvName != null?WebManager.GetService <IProvider <IDictionary <string, object>, IDictionary <string, object> > >(filterPrvName) : null; var qContext = new Hashtable(); // directly passed query parameters foreach (string key in Request.Params.Keys) { if (key != null) { qContext[key] = Request.Params[key]; } } // legacy context format (left for compatibility) if (Request["context"] != null) { var deserializedCtx = JsHelper.FromJsonString <IDictionary <string, object> >(Request["context"]); foreach (var item in deserializedCtx) { qContext[item.Key] = JsHelper.FromJsonString(Convert.ToString(item.Value)); } } // actually used context if (Request["context_json"] != null) { var deserializedCtx = JsHelper.FromJsonString <IDictionary <string, object> >(Request["context_json"]); foreach (var item in deserializedCtx) { qContext[item.Key] = item.Value; } } Query q = (Query)relexParser.Parse(Convert.ToString(exprResolver.Evaluate(qContext, relex))); if (Request["action"] == "add" && Request["textfield"] != null && Request["valuefield"] != null) { var dbMgr = new DalcManager(dalc, WebManager.GetService <IDataSetProvider>("dsFactory")); var newEntryRow = dbMgr.Create(q.SourceName); newEntryRow[Request["textfield"]] = Request["value"]; dbMgr.Update(newEntryRow); Response.Write(JsHelper.ToJsonString(new Dictionary <string, object>(ConvertManager.ChangeType <IDictionary <string, object> >(newEntryRow)))); } else { if (Request["p"] != null && Request["s"] != null) { var pageSize = Convert.ToInt32(Request["s"]); q.StartRecord = (Convert.ToInt32(Request["p"]) - 1) * pageSize; q.RecordCount = pageSize; } var ds = new DataSet(); dalc.Load(ds, q); var res = new Dictionary <string, object>(); var results = new List <IDictionary <string, object> >(); foreach (DataRow r in ds.Tables[q.SourceName].Rows) { IDictionary <string, object> data = new Dictionary <string, object>(new DataRowDictionaryWrapper(r)); // process label field (if specified) if (!String.IsNullOrEmpty(labelField) && data.ContainsKey(labelField)) { data[labelField] = WebManager.GetLabel(Convert.ToString(data[labelField]), typeof(FlexBoxAjaxHandler).FullName); } // prevent security hole if (data.ContainsKey("password")) { data["password"] = null; } // filter if (filterPrv != null) { data = filterPrv.Provide(data); } if (data != null) { results.Add(data); } } res["total"] = dalc.RecordsCount(q.SourceName, q.Root); res["results"] = results; var json = new JavaScriptSerializer(); Response.Write(json.Serialize(res)); } }
protected void ProcessRequestInternal(HttpContext context) { Context = context; var Request = context.Request; var Response = context.Response; log.Write(LogEvent.Debug, "Processing request: {0}", Request.Url.ToString()); string filesystem = GetParam("filesystem") as string; if (String.IsNullOrEmpty(filesystem)) { throw new Exception("Parameter missed: filesystem"); } var fs = WebManager.GetService <IFileSystem>(filesystem); string action = GetParam("action") as string; if (action != null && action != "" && action != "upload" && action != "download" && !Request.IsAuthenticated) { throw new System.Security.SecurityException("Action '" + action + "' is available only for authenticated users"); } if (action == "upload") { HandleUpload(Request, Response, filesystem); return; } string showDir = HttpUtility.UrlDecode(Request["dir"] ?? String.Empty).Replace("\\", "/"); if (showDir.EndsWith("/")) { showDir = showDir.Substring(0, showDir.Length - 1); } if (showDir.StartsWith("/")) { showDir = showDir.Substring(1); } var fileVfsPath = GetParam("file") as string; if (!AssertHelper.IsFuzzyEmpty(fileVfsPath)) { var fileObj = fs.ResolveFile(fileVfsPath); if (!AssertHelper.IsFuzzyEmpty(Request["thumbnail"])) { var requestThumbnailParts = Request["thumbnail"].Split(new char[] { ',' }); fileObj = GetThumbnail(fileObj, fs, requestThumbnailParts[0], requestThumbnailParts[1]); } if (action == "delete") { fileObj.Delete(); return; } else if (action == "rename") { var newFile = fs.ResolveFile(Path.Combine(Path.GetDirectoryName(fileObj.Name), Request["newname"])); fileObj.MoveTo(newFile); var renSb = new StringBuilder(); RenderFile(renSb, fs.ResolveFile(newFile.Name), false, true, Request["extraInfo"] == "1", filesystem); Response.Write(renSb.ToString()); return; } else if (action == "move") { var destFolder = Request["dest"]; var newFile = fs.ResolveFile(destFolder == "/" || destFolder == "" ? Path.GetFileName(fileObj.Name) : Path.Combine(destFolder, Path.GetFileName(fileObj.Name))); fileObj.MoveTo(newFile); return; } if (fileObj.Exists()) { // lets handle 'If-Modified-Since' header to avoid excessive http traffic if (IsFileCachedByClient(Request, fileObj.GetContent().LastModifiedTime)) { Response.StatusCode = 304; Response.SuppressContent = true; log.Write(LogEvent.Debug, "Not modified, returned HTTP/304"); } else { var fileSize = fileObj.GetContent().Size; Response.BufferOutput = false; Response.AddHeader("Content-Length", fileSize.ToString()); var fileContentType = ResolveContentType(Path.GetExtension(fileObj.Name)); if (fileContentType != null) { Response.ContentType = fileContentType; } Response.Cache.SetLastModified(fileObj.GetContent().LastModifiedTime); Response.AddHeader("Content-Disposition", String.Format("{0}; filename=\"{1}\"", action == "download" ? "attachment" : "inline", Path.GetFileName(fileObj.Name))); Stream inputStream; Stream outputStream = Response.OutputStream; using (inputStream = fileObj.GetContent().InputStream) { int bytesRead; byte[] buf = new byte[fileSize > MaxBufSize * 5 ? MaxBufSize : MinBufSize]; while ((bytesRead = inputStream.Read(buf, 0, buf.Length)) != 0) { outputStream.Write(buf, 0, bytesRead); } } } } fileObj.Close(); return; } var dirObj = fs.ResolveFile(showDir); if (action == "createdir") { var newDirName = fs.ResolveFile(Path.Combine(dirObj.Name, Request["dirname"])); newDirName.CreateFolder(); return; } if (dirObj.Type == FileType.Folder && !Request.IsAuthenticated) { throw new System.Security.SecurityException("Folder contents is available only for authenticated users"); } var sb = new StringBuilder(); RenderFile(sb, dirObj, true, false, Request["extraInfo"] == "1", filesystem); Response.Write(sb.ToString()); }
protected void HandleUpload(HttpRequest Request, HttpResponse Response, string filesystem) { var fs = WebManager.GetService <IFileSystem>(filesystem); var result = new List <IFileObject>(); var resultFormat = Request["resultFormat"] ?? "text"; for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; // skip files with empty name; such a things happends sometimes =\ if (String.IsNullOrEmpty(file.FileName.Trim())) { continue; } var allowedExtensions = AssertHelper.IsFuzzyEmpty(Request["allowedextensions"]) ? null : JsHelper.FromJsonString <IList <string> >(HttpUtility.UrlDecode(Request["allowedextensions"])); var originalFileName = Path.GetFileName(file.FileName); var fileName = Request["dir"] != null && Request["dir"] != "" && Request["dir"] != "/" ? Path.Combine(Request["dir"], originalFileName) : originalFileName; log.Write(LogEvent.Debug, "Uploading - file name: {0}", fileName); if ((allowedExtensions != null && allowedExtensions.IndexOf(Path.GetExtension(fileName).ToLower()) < 0) || Array.IndexOf(blockedExtensions, Path.GetExtension(fileName).ToLower()) >= 0) { throw new Exception(WebManager.GetLabel(FileTreeAjaxHandler.InvalidFileTypeMessage)); } var uploadFile = fs.ResolveFile(fileName); var uploadPNGFile = fs.ResolveFile(fileName + ".png"); // additional checking of resized images if file names are similar if ((uploadFile.Exists() || uploadPNGFile.Exists()) && Request["overwrite"] != null && !Convert.ToBoolean(Request["overwrite"])) { int fileNum = 0; do { fileNum++; var extIdx = fileName.LastIndexOf('.'); var newFileName = extIdx >= 0 ? String.Format("{0}{1}{2}", fileName.Substring(0, extIdx), fileNum, fileName.Substring(extIdx)) : fileName + fileNum.ToString(); uploadFile = fs.ResolveFile(newFileName); } while (uploadFile.Exists() && fileNum < 100); if (uploadFile.Exists()) { var extIdx = fileName.LastIndexOf('.'); var uniqueSuffix = Guid.NewGuid().ToString(); uploadFile = fs.ResolveFile( extIdx >= 0 ? fileName.Substring(0, extIdx) + uniqueSuffix + fileName.Substring(extIdx) : fileName + uniqueSuffix); // 99.(9)% new file! } fileName = uploadFile.Name; } // special handling for images if (Request["image"] == "compressed" || Request["imageformat"] != null || Request["image_max_width"] != null || Request["image_max_height"] != null) { uploadFile = ImageHelper.SaveAndResizeImage( file.InputStream, fs, uploadFile, Convert.ToInt32(Request["image_max_width"] ?? "0"), Convert.ToInt32(Request["image_max_height"] ?? "0"), Request["imageformat"] != null ? ImageHelper.ResolveImageFormat(Request["imageformat"]) : null ); } else { uploadFile.CopyFrom(file.InputStream); } result.Add(uploadFile); } switch (resultFormat) { case "text": Response.Write(String.Join("\n", result.Select(f => f.Name).ToArray())); break; case "json": Response.Write(JsHelper.ToJsonString( result.Select(f => new Dictionary <string, object> { { "name", Path.GetFileName(f.Name) }, { "filepath", f.Name }, { "size", f.GetContent().Size }, { "url", VfsHelper.GetFileUrl(filesystem, f.Name) }, { "full_url", VfsHelper.GetFileFullUrl(filesystem, f.Name) } } ).ToArray())); break; } }