예제 #1
0
    protected string GenerateFieldDescriptorsJsonString()
    {
        if (ComposeFieldsData == null)
        {
            throw new Exception("ComposeFieldsData is not defined");
        }

        var fieldsData = ComposeFieldsData(DataContext);

        return(JsHelper.ToJsonString(fieldsData));
    }
예제 #2
0
    protected string GetSelectedItemsJson()
    {
        var selectedIds = GetSelectedIds().Select(id => Convert.ToString(id));
        var results     = new List <object>();

        foreach (var dataEntry in Data)
        {
            if (selectedIds.Contains(Convert.ToString(DataBinder.Eval(dataEntry, ValueFieldName))))
            {
                results.Add(new Dictionary <string, object>()
                {
                    { ValueFieldName, DataBinder.Eval(dataEntry, ValueFieldName) }
                });
            }
        }
        var json = new JavaScriptSerializer();

        return(JsHelper.ToJsonString(results));
    }
예제 #3
0
    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));
    }
예제 #4
0
 public static object GetProviderResult(string prvName, object context, bool useCache, Func <object, object> callProvider)
 {
     if (useCache)
     {
         var cache = HttpContext.Current.Items["DataSourceHelper.GetProviderDictionary"] as IDictionary <string, object>;
         var key   = prvName + "|" + JsHelper.ToJsonString(context);
         if (cache == null)
         {
             cache = new Dictionary <string, object>();
             HttpContext.Current.Items["DataSourceHelper.GetProviderDictionary"] = cache;
         }
         if (cache.ContainsKey(key))
         {
             return(cache[key]);
         }
         else
         {
             var res = callProvider(context);
             cache[key] = res;
             return(res);
         }
     }
     return(callProvider(context));
 }
예제 #5
0
    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));
        }
    }
예제 #6
0
    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;
        }
    }