// 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); }
// // public JsonResult OrgSearch(MainSearchInput query) { query.IncludingReferenceObjects = true; MainSearchResults results = searchServices.MainSearch(query, ref valid, ref status); return(JsonHelper.GetJsonWithWrapper(results, valid, status, null)); }
// 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); }
// public static JObject TranslateMainSearchResultToAPIResult_Pathway(MainSearchResults mainResultsData, MainSearchResult sourceResult, JObject translatedResult) { var detailData = new JObject() { { "TBD", "TBD" } }; return(JObjectify(detailData)); }
// 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); }
// //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 */ }
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)); }
// 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)); } }
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); }