コード例 #1
0
        //

        public static JObject TranslateMainSearchResultToAPIResult_Generic2(MainSearchResults mainResultsData, MainSearchResult sourceResult)
        {
            //Basic Information common to all top-level types
            var result = JObjectify(TranslateBasicData(mainResultsData, sourceResult));

            //Type-Specific Information
            switch (mainResultsData.SearchType)
            {
            case "organization":
                TranslateLocations(sourceResult, result, "Address");
                AddIfPresent(sourceResult.Properties, "ResultImageUrl", result, "Image");
                break;

            case "credential":
                TranslateLocations(sourceResult, result, "AvailableAt");
                AddIfPresent(sourceResult.Properties, "ResultImageUrl", result, "Image");
                AddIfPresent(sourceResult.Properties, "ResultIconUrl", result, "Meta_Icon");
                break;

            case "assessment":
            case "learningopportunity":
                TranslateLocations(sourceResult, result, "AvailableAt");
                break;

            default: break;
            }

            //Gray Buttons
            TranslateGrayButtonsToResultPills(mainResultsData, sourceResult, result);

            return(result);
        }
コード例 #2
0
        //

        //
        public JsonResult OrgSearch(MainSearchInput query)
        {
            query.IncludingReferenceObjects = true;
            MainSearchResults results = searchServices.MainSearch(query, ref valid, ref status);

            return(JsonHelper.GetJsonWithWrapper(results, valid, status, null));
        }
コード例 #3
0
        //

        public static JObject TranslateMainSearchResultToAPIResult_Generic <T>(MainSearchResults mainResultsData, MainSearchResult sourceResult, Func <int, bool, T> getDetailForAPI, bool skippingCache = false)
        {
            var detailData = getDetailForAPI(sourceResult.RecordId, skippingCache);
            var result     = JObjectify(detailData);

            TranslateGrayButtonsToResultPills(mainResultsData, sourceResult, result);
            return(result);
        }
コード例 #4
0
        //

        public static JObject TranslateMainSearchResultToAPIResult_Pathway(MainSearchResults mainResultsData, MainSearchResult sourceResult, JObject translatedResult)
        {
            var detailData = new JObject()
            {
                { "TBD", "TBD" }
            };

            return(JObjectify(detailData));
        }
コード例 #5
0
        //

        private static BaseDisplay TranslateBasicData(MainSearchResults mainResultsData, MainSearchResult sourceResult)
        {
            //Hold result
            var result = new BaseDisplay();

            //Meta info
            result.Meta_Language = "en";             //Not sure how to obtain this
            result.Meta_Id       = sourceResult.RecordId;
            try { result.Meta_LastUpdated = DateTime.Parse(GetValueIfPresent(sourceResult.Properties, "T_LastUpdated") ?? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } catch { }
            try { result.Meta_StateId = int.Parse(GetValueIfPresent(sourceResult.Properties, "T_StateId") ?? "0"); } catch { }

            //Common info
            result.BroadType     = GetValueIfPresent(sourceResult.Properties, "T_BroadType");
            result.CTDLType      = GetValueIfPresent(sourceResult.Properties, "T_CTDLType");
            result.CTDLTypeLabel = GetValueIfPresent(sourceResult.Properties, "T_CTDLTypeLabel");
            result.CTID          = GetValueIfPresent(sourceResult.Properties, "CTID") ?? GetValueIfPresent(sourceResult.Properties, "ctid") ?? "unknown";
            result.Name          = sourceResult.Name;
            result.FriendlyName  = sourceResult.FriendlyName;
            result.Description   = sourceResult.Description;

            //Owner
            try
            {
                if (sourceResult.Properties.ContainsKey("Owner"))
                {
                    if (mainResultsData.SearchType == "competencyframework")
                    {
                        var owner = ( JObject )sourceResult.Properties["Owner"];
                        if (owner != null)
                        {
                            result.OwnedByLabel = new LabelLink()
                            {
                                Label = CompetencyFrameworkServicesV2.GetEnglishString(owner["ceterms:name"], "Unknown Owner"),
                                URL   = "/resources/" + owner["ceterms:ctid"].ToString()
                            };
                        }
                    }
                    else
                    {
                        result.OwnedByLabel = new LabelLink()
                        {
                            Label = GetValueIfPresent(sourceResult.Properties, "Owner") ?? "Unknown Owner",
                            URL   = "/organization/" + GetValueIfPresent(sourceResult.Properties, "OwnerId") ?? "0"
                        };
                    }
                }
            }
            catch { }

            return(result);
        }
コード例 #6
0
        //

        //Search for organizations related to some entity type
        public JsonResult RelatedEntitySearch(SelectionQuery query)
        {
            /* Temporary */
            //TODO - Determine whether or not this needs to be replaced with a method that cares about the Relationship type (perhaps limit results to QA orgs?)
            var searchQuery = new MainSearchInput()
            {
                SearchType = query.SearchType.ToLower(), StartPage = query.PageNumber, PageSize = query.PageSize, Keywords = query.Keywords, UseSimpleSearch = query.UseSimpleSearch, SortOrder = query.SortOrder
            };


            searchQuery.IncludingReferenceObjects = true;
            MainSearchResults results = searchServices.MainSearch(searchQuery, ref valid, ref status);

            return(JsonHelper.GetJsonWithWrapper(results, valid, status, null));
            /* End Temporary */
        }
コード例 #7
0
ファイル: ProjectsController.cs プロジェクト: mrzuk/websearch
        public ActionResult Search(SearchModel searchModel, int?page)
        {
            var projectList = Db.Project.Where(p => p.IsApproved && p.Cause_Project.Any(cp => cp.CauseId == searchModel.CauseId) && p.SuitableSubjects_Project.Any(cp => cp.SuitableSubjectId == searchModel.SubjectId) && p.SuitableLevel_Project.Any(cp => cp.SuitableLevelId == searchModel.LevelId)).ToList().Select(p => new SearchResultsModel {
                Id = p.Id, Title = p.Title, AddedBy = p.AddedByName, Date = p.Date, Cause = p.Cause_Project.Select(c => c.Cause.Description).ToList(), Subjects = p.SuitableSubjects_Project.Select(c => c.SuitableSubject.Description).ToList(), Level = p.SuitableLevel_Project.Select(c => c.SuitableLevel.Description).ToList()
            });
            int pageN = (page ?? 1);

            ViewBag.Cause           = new SelectList(Db.Cause, "Id", "Description");
            ViewBag.SuitableSubject = new SelectList(Db.SuitableSubject, "Id", "Description");
            ViewBag.Level           = new SelectList(Db.SuitableLevel, "Id", "Description");

            MainSearchResults model = new MainSearchResults();

            model.SearchModel   = new SearchModel();
            model.SearchResults = projectList.ToPagedList(pageN, 10);

            return(View("SearchResults", model));
        }
コード例 #8
0
        //

        public static void TranslateGrayButtonsToResultPills(MainSearchResults mainResultsData, MainSearchResult sourceResult, JObject translatedResult)
        {
            var pills            = new List <Models.API.TagSet>();
            var grayButtonErrors = new List <JObject>();

            foreach (var button in sourceResult.Buttons ?? new List <Models.Helpers.SearchResultButton>())
            {
                var set = new Models.API.TagSet();

                set.Label  = button.CategoryLabel;
                set.Total  = button.TotalItems;
                set.Values = new List <Models.API.TagItem>();
                set.Icon   = TranslateGrayButtonIcon(button.CategoryType);

                try
                {
                    switch (button.HandlerType)
                    {
                    case "handler_RenderCheckboxFilter":
                    case "handler_RenderExternalCodeFilter":
                        set.TagItemType = "tagItemType:FilterItem";
                        foreach (var item in button.Items)
                        {
                            set.Values.Add(new Models.API.TagItem()
                            {
                                Label          = GetValueIfPresent(item, "ItemCodeTitle") ?? GetValueIfPresent(item, "ItemLabel"),
                                FilterID       = int.Parse(GetValueIfPresent(item, "CategoryId") ?? "0"),
                                FilterItemID   = int.Parse(GetValueIfPresent(item, "ItemCodeId") ?? "0"),
                                FilterItemText = GetValueIfPresent(item, "ItemCodeTitle")
                            });
                        }
                        break;

                    case "handler_RenderDetailPageLink":
                    case "handler_RenderConnection":
                        set.TagItemType = "tagItemType:Link";
                        foreach (var item in button.Items)
                        {
                            set.Values.Add(new Models.API.TagItem()
                            {
                                Label = GetValueIfPresent(item, "TargetLabel"),
                                URL   = "/" + GetValueIfPresent(item, "TargetType") + "/" + (GetValueIfPresent(item, "TargetId") == "0" ? GetValueIfPresent(item, "TargetCTID") : GetValueIfPresent(item, "TargetId"))
                            });
                        }
                        break;

                    case "handler_RenderQualityAssurance":
                        set.TagItemType = "tagItemType:Link";
                        foreach (var item in button.Items)
                        {
                            set.Values.Add(new Models.API.TagItem()
                            {
                                Label = GetValueIfPresent(item, "Relationship") + " " + GetValueIfPresent(item, "Agent"),
                                URL   = "/organization/" + GetValueIfPresent(item, "AgentId")
                            });
                        }
                        break;

                    case "handler_GetRelatedItemsViaAJAX":
                        set.TagItemType = "tagItemType:Link";
                        set.URL         = "/Search/GetTagSetItems";
                        set.QueryData   = new TagSetRequest()
                        {
                            TargetType = GetValueIfPresent(button.RenderData, "TargetEntityType"),
                            RecordId   = sourceResult.RecordId,
                            SearchType = mainResultsData.SearchType
                        };
                        break;

                    default:
                        grayButtonErrors.Add(new JObject()
                        {
                            { "Error matching handler", button.HandlerType }
                        });
                        break;
                    }
                }
                catch (Exception ex)
                {
                    grayButtonErrors.Add(new JObject()
                    {
                        { "Error Translating Tag Item", ex.Message },
                        { "Inner Exception", ex.InnerException?.Message ?? "" },
                        { "Raw Item", JObject.FromObject(button) }
                    });
                }

                pills.Add(set);
            }

            translatedResult.Add("SearchTags", JArray.FromObject(pills));

            if (grayButtonErrors.Count() > 0)
            {
                translatedResult.Add("debug:grayButtonErrors", JArray.FromObject(grayButtonErrors));
            }
        }
コード例 #9
0
        public static MainQueryResponse TranslateMainSearchResultsToAPIResults(MainSearchResults mainResultsData, JObject debug = null)
        {
            //Translate the outer layer and debugging stuff
            debug = debug ?? new JObject();
            //just in case, have been seeing exception messages
            var translatedResultsData = new MainQueryResponse();

            if (mainResultsData != null)
            {
                translatedResultsData = new MainQueryResponse()
                {
                    TotalResults = mainResultsData.TotalResults
                };
            }
            else
            {
                mainResultsData = new MainSearchResults();
            }

            //Translate each result
            foreach (var sourceResult in mainResultsData.Results)
            {
                try
                {
                    var translatedResult = TranslateMainSearchResultToAPIResult_Generic2(mainResultsData, sourceResult);
                    translatedResult.Add("debug:originalData", JObject.FromObject(sourceResult));
                    translatedResultsData.Results.Add(translatedResult);
                }
                catch (Exception ex)
                {
                    translatedResultsData.Results.Add(new JObject()
                    {
                        { "Error translating this result", ex.Message },
                        { "Inner exception", ex.InnerException?.Message },
                        { "Raw Data", JObject.FromObject(sourceResult) }
                    });
                }
            }

            /*
             * //Translate each result
             * foreach( var sourceResult in mainResultsData.Results )
             * {
             *      //Hold the translated result - may want a more formalized class for this later?
             *      var translatedResult = new JObject();
             *
             *      //Try to get the result from the cache
             *      var cacheName = "CachedAPIResult_" + mainResultsData.SearchType.ToLower() + "_" + sourceResult.RecordId;
             *      var cached = ( string ) MemoryCache.Default.Get( cacheName );
             *
             *      //Otherwise, get it for real
             *      if ( string.IsNullOrWhiteSpace( cached ) )
             *      {
             *              //Do the translation - Get the detail page for now, as it should match the Data Model Planning spreadsheet (may want to trim it down to a subset later?)
             *              try
             *              {
             *                      switch ( mainResultsData.SearchType.ToLower() )
             *                      {
             *                              case "organization": translatedResult = TranslateMainSearchResultToAPIResult_Generic( mainResultsData, sourceResult, API.OrganizationServices.GetDetailForAPI ); break;
             *                              case "credential": translatedResult = TranslateMainSearchResultToAPIResult_Generic( mainResultsData, sourceResult, API.CredentialServices.GetDetailForAPI ); break;
             *                              case "assessment": translatedResult = TranslateMainSearchResultToAPIResult_Generic( mainResultsData, sourceResult, API.AssessmentServices.GetDetailForAPI ); break;
             *                              case "learningopportunity": translatedResult = TranslateMainSearchResultToAPIResult_Generic( mainResultsData, sourceResult, API.LearningOpportunityServices.GetDetailForAPI ); break;
             *                              case "competencyframework": TranslateMainSearchResultToAPIResult_CompetencyFramework( mainResultsData, sourceResult, translatedResult ); break;
             *                              case "conceptscheme": TranslateMainSearchResultToAPIResult_ConceptScheme( mainResultsData, sourceResult, translatedResult ); break;
             *                              case "pathwayset": TranslateMainSearchResultToAPIResult_PathwaySet( mainResultsData, sourceResult, translatedResult ); break;
             *                              case "pathway": translatedResult = TranslateMainSearchResultToAPIResult_Generic( mainResultsData, sourceResult, API.PathwayServices.GetDetailForAPI ); break;
             *                              case "transfervalueprofile": translatedResult = TranslateMainSearchResultToAPIResult_Generic( mainResultsData, sourceResult, API.TransferValueServices.GetDetailForAPI ); break;
             *                              default: break;
             *                      }
             *              }
             *              catch ( Exception ex )
             *              {
             *                      translatedResult.Add( "debug:error", ex.Message );
             *              }
             *
             *              //Add the debugging helper
             *              translatedResult.Add( "debug:originalData", JObject.FromObject( sourceResult ) );
             *              translatedResult.Add( "debug:loadedFromCache", false );
             *
             *              //Cache the result
             *              MemoryCache.Default.Remove( cacheName );
             *              MemoryCache.Default.Add( cacheName, translatedResult.ToString( Formatting.None ), new DateTimeOffset( DateTime.Now.AddMinutes( 5 ) ) );
             *      }
             *      else
             *      {
             *              translatedResult = JObject.Parse( cached );
             *              translatedResult[ "debug:loadedFromCache" ] = true;
             *      }
             *
             *      //Add the translated result to the translated results data
             *      translatedResultsData.Results.Add( translatedResult );
             * }
             */

            //Return the data
            return(translatedResultsData);
        }