OOTB Functionality to pull messages that contain two specific labels
I know you can add /label-name/MyLabel to the end of any URL for a board and get all the messages that have that label. Is there a way to specify a second label so I see a list of messages that contain both labels? Or is that going to require developing custom code to achieve?phoneboy2 years agoDirector84Views0likes2CommentsSearch Via API
Hi all, I hit a problem, when you do a search for multiple terms using API v2 and pass in a search term like : matches "Brown Fox Jumps" the results do not get returned in any specific order, I had hoped they would put the best matches at the top... am I missing something98Views0likes2CommentsCreate different CSS styles for category pages
We want to change the way our KB articles are shown to our customers. We do not want to show the author information for the article on any Khoros KB page. I have been able to hide the author in the below pages through css https://communitystag.lansweeper.com/t5/requirements/tkb-p/kb_requirements https://communitystag.lansweeper.com/t5/requirements/scanning-commands-run-on-linux-computers/ta-p/7940 What I cannot figure out, though, is how to hide the author from these pages. https://communitystag.lansweeper.com/t5/knowledge-center/ct-p/Knowledge_Center https://communitystag.lansweeper.com/t5/knowledge-base/ct-p/KB_Main The category pages are for the knowledge base only. We don’t want to hide the author information for the forum or other category pages. Is there a way to hide the author information for the category pages (ct-p) for only the ct-p pages related to the knowledge base?Solved137Views0likes2CommentsWYSYWIG for Single Page?
We'd like to upload our User Guidelines, Moderator Guidelines, etc somewhere that they could be easily maintained, and where permissions can be managed per-page (User Guidelines: Public. Moderators: Moderator role, etc). Are any options available outside Blogs, Discussions, & TKBs?keithkelly2 years agoLeader62Views1like1Commentcommunity urls frontPage Not Working on ToS Page
I'd like to build a link for our ToS that's like: https://stage.community.duckcreek.com/html/assets/MyFile.pdf So I used ${community.urls.frontPage} per this doc. href="${community.urls.frontPage}/html/assets/MyFile.pdf" which gave https://stage.community.duckcreek.com/t5/custom/page/page-id/$%7Bcommunity.urls.frontPage%7D/html/assets/MyFile.pdf Per above, it looks like there's a relative link assumption going on. Per the ToS instruction text, I see "Select a language, and then click "View" to edit the Terms of Service. You can use HTML or plain text in the field. Text within these characters: "${ }" reuses a text string or URL that is defined elsewhere in the repository so that you don't have to retype it. URLs should not be changed to preserve links back to pages in the community." Any tips on how to build this URL conditionally so it works on Stage and Prod?115Views0likes3CommentsSSO Keys and Tokens for Oauth
We’re having some trouble getting started with Oauth flows. Our community uses SSO for login and we need the sso.authentication_token, but I don't know if I can generate that without an SSO Key. From https://developer.khoros.com/khoroscommunitydevdocs/docs/oauth-authorization-grant : If your Community uses SSO, you’ll make a POST call to /auth/authorize passing the SSO token in the payload. Upon successful SSO authentication, Community returns an authorization code in the response body to your client application using a backend call. As I’m writing this, I think I found it in production under a cookie called: lithiumLogin:{instanceID} Can this be used as the sso.authentication_token? If so, where can I find this in stage? Does it need to be enabled somewhere for the staging environment? I read that this could be a user profile option and I’ve got my profile for both environments set the same way and nothing has changed. Additionally, I believe we are running into problems with CORS, which makes it difficult for us to test that the value I've located is actually what I need. I've got a ticket with support open for this. We’ve read everything in these guides, but I feel like there are some assumptions being made in the documentation that has us scratching our heads. https://developer.khoros.com/khoroscommunitydevdocs/reference/authauthorize How can I reliably get the user's SSO Token to move forward? I feel like we're missing something silly here.181Views0likes3CommentsLiQL match is not accurate
Our data migration to khoros had a few misses, mainly, anything in our old forums with <code></code> tags is now a jumbled mess that I can fix manually by changing that to <li-code></li-code> in the editor. But we have over 10k of these, so that's not possible manually. I'd like to search for each message with the code tag (which as an aside, is interesting because in the stored data it's not the same view I see in the editor, it's stored as "<pre class=\"lia-code-sample language-tcl\"><code></code></pre>" and my old <code> tags are stored as <CODE></CODE>) Anyway...to my point. I have this query: SELECT id, view_href, body, current_revision FROM messages where body MATCHES '<CODE' LIMIT 1 I would expect it to only find the literal <CODE string in the body of my messages, but it seems to be matching any case of code and doesn't care at all about the less than sign. Here's the body of the first message it matched: "body" : "<H5 contenteditable=\"false\" id=\"toc-hId-1990738234\">Code is community submitted, community supported, and recognized as ‘Use At Your Own Risk’.</H5>\n<H3 contenteditable=\"false\" id=\"toc-hId-216654393\">Short Description</H3>\n<P>Please enter a short and descriptive title for your snippet.</P>\n<H3 contenteditable=\"false\" id=\"toc-hId-217577914\">Problem solved by this Code Snippet</H3>\n<P>Briefly describe the problem your snippet solves.</P>\n<H3 contenteditable=\"false\" id=\"toc-hId-218501435\">How to use this Code Snippet</H3>\n<P>Tell others how to use this code snippet.</P>\n<H3 contenteditable=\"false\" id=\"toc-hId-219424956\">Code Snippet Meta Information</H3>\n<OL>\n<LI>Version:</LI>\n<LI>Coding Language:</LI>\n</OL>\n<H3 contenteditable=\"false\" id=\"toc-hId-220348477\">Full Code Snippet</H3>\n<P>Enter your code snippet here or attach a file below.</P>", Any hints would be appreciated!147Views1like3CommentsJSON subquery returns spontaneous errors
When doing a json query with a subquery for labels, I get an error from time to time. [ { "messages": { "fields": [ "id", "subject", "search_snippet", "body", "cover_image.view_href", "teaser", "view_href", "author", "conversation.last_post_time", "replies.count(*)", "kudos.sum(weight)", "metrics.views", "labels" ], "limit": 10, "subQueries": { "labels": { "fields": [ "text", "id" ] } } } } ] Some requests return the correct result, but some return this error: { "status": "error", "message": "An unexpected error occurred.", "data": { "type": "error_data", "code": 301, "developer_message": "", "more_info": "" }, "metadata": {} } The usage of the subquery is very valueable for us to avoid additional API requests for the labels in a loop. What can I do to avoid the error while still using the subquery?139Views0likes2CommentsCommunity Microblogging?
I'm thinking through creative ways to implement a blog & component to sort of simulate a microblog for the community. Purpose: To post announcements like "Just added a new board X, check it out!" or teasers like "coming soon...a whizbang such-n-such." Curious if anybody else has tried something similar114Views0likes3CommentsEmail Templates - What's the variable for "Board Name"?
I tracked it down to {3} in the text... but feel like I'm overlooking it in the email object list. Context: General Subscription Notification. I'd like to use that "BoardName" variable alone elsewhere within the email.Solvedkeithkelly2 years agoLeader98Views0likes2CommentsUser pending requests to join nodes
Hi, Does anyone know if we can get a list of nodes the user has requested to join but still pending, and if yes, how? We can only do: SELECT * FROM membership_requests WHERE node.id = 'grouphub:Cats' and we cannot constraint query with user.id. If we want to check whether a user requested to join a list of nodes, we need to grab all the users that requested to join each of those nodes and compare it with our currently logged user to see if they have a pending request. That seems like a lot of things happening on the backend to get a list. Has anyone explored this? Are there any ways to get a list of nodes the user requested to join? Oh yeah, haven't gotten any better results with restBuilder and trying subqueries on nodes. It's not a top level field. Was expecting to have that information in the user_context in nodes.81Views0likes0CommentsSearch appearing as "Go" on iPhone: How to change the search input type to type="search"
In testing our mobile V1 community, we noticed that when the user is focused on the search input, the iphone keyboard says "Go". It should say "Search". In order for it to say search, the input must have type="search". Currently it has type="text". I tried changing this with jQuery: $("#lia-body .lia-content .lia-form-all-words-entry input").attr("type","search"); But it gave me the following error, and the internet tells me that you cannot change the type of an input with jQuery. "Uncaught Error: type property can't be changed" How can this be fixed? It seems like a small oversight on Lithium's part when first designing the search input, and I hope it can be fixed. :)Solvediftomkins2 years agoMaven250Views1like6CommentsWelcome email for SSO
We are using SSO for login and we want to trigger an email when a user successfully creates a username for the community. Can you please provide information on how we can trigger an email upon a specified event (ie, username creation) and use Lithium's mail server to do this? Thanks!Solvedamanda_optly2 years agoMentor532Views0likes9CommentsQuestions on Khoros events for application subscription and bulk api
Hello, I have a few questions for how events could be extracted from Khoros. App subscriptions Bulk Api As far as I can tell application level subscriptions are few and don't have "id" parity with what exists in the bulk api, is there a way to tell if an event coming from the subscriptions is the same in the bulk api so we can deduplicate? Are subscription webhooks guaranteed to deliver in case of target url downtime? There doesn't seem to be a message.move event in bulk as opposed to subscriptions. How could we tell if message X is relocated in another group for instance? or will it trigger a message update? If a message got moved what happens to it's replies do they have a separate move event triggered or are we supposed to keep a hierarchy for the messages ourselves to redo the tree? There seems to be no subscription event for group visibility changes or actions, how could we tell if messages should be public in this case? Do user deletion events trigger application subscription events for messages that got modified? Since subscriptions don't have all the events for content that we would need for gdpr / visibility enforcement, how real time are entries stored in the bulk api? are they guaranteed to be in order (do some events get added later instead of their produced ts?) Can we filter by event type / action.key the result of a bulk api call? as to get faster responses - we do not require view metrics and the like.69Views0likes0CommentsReceiving error on API Call: /api/2.0/auth/refreshToken
Getting a 400 error on requesting for access token from /refreshToken Endpoint: Sample call: POST curl -X POST \ https://[COMMUNITY-DOMIAN]/api/2.0/auth/refreshToken \ -H "Content-Type: application/json" \ -H "client-id:[CLIENT-ID]" \ -d '{ "client_id":"CbEwdj3DjslDJLsldk30823480lkaXvNLvA=", "client_secret":"BV32987skdjfhSDlkajdhfASDF409234ItWs=", "grant_type":"refresh_token", "refresh_token":"ZVQaoDdkcsC/9vKZUw0OHEvKG3nd/HoIdwdHLNFwB8E=", }' Error received: Error code: 411 refresh_token + client_id+client_secret is NOT valid or refresh_token might have expired We are using the correct parameters. Also, receiving the same error even after using 'force_refresh' in the call.218Views0likes4CommentsReceiving a 401 Authorization Required error on POST call to get Access Token via OAuth 2
I am able to get the Authorization code in the browser following the first step of OAuth 2.0 grant flow:https://developer.khoros.com/khoroscommunitydevdocs/reference/request-auth-code-lithium-registration But getting a 401 Error on the call to get Access Token Here is the call I am making: method: 'POST' url: 'https://wxample.example.com/api/2.0/auth/accessToken' headers: {'client_id':<URL_DECODED_CLIENT_ID>','content-type': 'application/json'} data: { client_id: '<URL_DECODED_CLIENT_ID>', client_secret: '<URL_DECODED_CLIENT_SECRET>', code: '<URL_DECODED_AUTHORIZATION_CODE>', grant_type: 'authorization_code', redirect_uri: '<REDIRECT_URI_IN_APP>' } Receiving: 401 Authorization Required Relevant docs:https://developer.khoros.com/khoroscommunitydevdocs/reference/request-auth-token-oauth Any help would be appreciated.143Views0likes2CommentsIs it possible to add custom meta data field upon user creation with API V1
We had the custom field profile.country added to users. The following successfully creates a user but without the country field. /restapi/vc/users/add?user.login=apicreated2&restapi.response_format=json&user.email=apicreated2@noemail.com&profile.country=england&user.new_password=passw0rd I've tried several variations besides profile.country including profile.name.country and just country. I've successfully added a country to an existing user with API V2 using c_country but our developers are already creating users with API V1 and would like to stick with that if possible. Thanks137Views0likes3CommentsCategory level Poll overlapping on the board level Poll.
Hey all. So this is the scenario. I tried making a Poll on category level and it worked fine. I also had to make a poll on a discussion board inside the same category, totally different from the category poll and when I created on the discussion board level, both the polls started to overlap and messed up the whole thing. Is there any proper way to get two different polls on the category and it's child discussion board or am I doing something wrong? Attaching the screenshot of both category and messed up board level Poll. Please let me know if you know anything about this. Thanks in advance.pp_012 years agoMentor228Views1like2CommentsCan I assign signatures to everyone who doesn't have one?
I'd like to - by default - set users' signatures to their name (First Last) Our users' First & Last names are getting passed in by our IdP/SSO. I'm under the impression this can't be done automatically, BUT, is it possible to create a script to run periodically that'll do: for each user{ if (signature == ""){ signature = First Last } } If so that'd be sweet101Views0likes1CommentAPI to make users Subscribe to a board
Hello everyone, I want to make users subscribe to a board via API. We have currently a blog board that would be really important that users are getting this information in their email, so I was wondering if it would be possible for example, to build an excel and then run it on API so that all the users in the file would be automatically subscribed from then onwards to the blog board. Or perhaps, another way to do it, of course. Do you know if it's possible?319Views0likes6CommentsAdditional Flags on Topics - (Accepted, Pinned, Ongoing Discussion?)
To help our SME oversight teams, I'd like to give them the ability to flag a topic as an "Ongoing Discussion" to indicate to other SMEs that the topic doesn't need a solution...but rather, needs to keep evolving on its own. Tagging is the best way I can think of right now - are there any other methods I can tap into? Possibly any available custom metadata fields?65Views0likes1CommentRebuilding "Categories/Boards" List - any custom components or starter code?
I understand the "Community Board List" component can't be modified, yet there are a couple customizations I'd like to make. So, I'd like to build my own component or contribute to a component that's already in the works. Looking for a bit of quick-start code or open-source component that at a minimum, lists: Category Board Board Board Category Board Board Board etc Things I'd like to do (compared to OOTB Community Board List) Parameterize the context Minify the date format Add "Topics" field (instead of "Posts") I'm only looking for the FreeMarker code (not CSS) - If anyone has a simple component or code they can contribute for a starting point, I'm happy to share the changes I make.115Views0likes3CommentsTrending Messages - Override component questions
I would like to override the Trending Messages (Discussions) component that has the following OOB code. I would like to have this component display the most popular posts on the Home Page, Category or Board page types by both kudos and comments. Is this possible? I would also for this to not just be a list of hyperlinks to results but include potentially # of comments & kudos or the date of the last comment. Is this possible to add that in. Here is the OOB code for the component theme-lib.trending-messages that I would like to adapt. Has anyone had success with adapting this to display a more limited time frame and use kudos and comments as the criteria for the results? <@liaMarkupCache ttl="100000" variation="node" anonymousOnly="true" /> <#include "theme-lib.common-functions" /> <#include "theme-lib.message-macros" /> <#assign targetNodeType = coreNode.nodeType /> <#assign targetNodeId = coreNode.id /> <#assign whereClause = "" /> <#if targetNodeType == "board"> <#assign whereClause = "board.id = '${targetNodeId}' AND " /> <#elseif targetNodeType == "category"> <#assign whereClause = "category.id = '${targetNodeId}' AND " /> </#if> <#assign pageSize = coreNode.settings.name.get("custom.trending_messages_count", "3") /> <#assign prevTS = .now?date?long-(coreNode.settings.name.get("custom.trending_messages_history_days", "30")?number*24*60*60*1000) /> <#assign whereClause = whereClause + "post_time >= ${prevTS} AND depth = 0" /> <#assign articles = getMessages(pageSize, 0, "id, subject, view_href", whereClause, "kudos.sum(weight) DESC") /> <#if articles?size gt 0> <@generateComponentContent className="theme-lib-trending-messages" componentTitleKey="theme-lib.trending.messages.title" > <div class="trending-messages-list"> <#list articles as article> <div class="trending-message-item"> <a href="${(article.view_href)!""}">${(article.subject)!""}</a> </div> </#list> </div> </@generateComponentContent> </#if>153Views0likes3CommentsAJAX Feed of Latest Posts (for on-wall monitor)
I'd like to install a monitor on the office wall that shows incoming activity....starting w/ latest posts. What are some ways of achieving this? Risks? Tips? Gotchas? I can handle the interface mods - mainly wondering about what to call and how to call it. I was really deep into AJAX development about 10 years ago, so my current knowledge is probably dangerous. Current Plan (critique/add) Set up Read-Only user Set up Raspberry Pi to load whatever web page we build in whatever steps are to follow. ...75Views0likes1CommentPermissioning for Limited Access Areas - am I about to do it wrong?
I'm about to configure boards for our partners & customers, who will have limited access....and the method I'm about to try seems too extensive to be the right way. For most of our community, we have an internal/external parallel structure, like: Product Forums Product A (category) Product A Forum [internal] Product A Forum Product A TKB Product B (category) Product B Forum [internal] Product B Forum Product B TKB etc. Objectives: Employees have access to everything. Partners & Customers don't have access to anything labeled "[internal]" Role Permissions (as of now) All Registered Users (auto-assign on registration): CAN'T view or participate in Employees (passed in by our IdP): CAN view & participate in all areas So far so good. But, we have a test partner (Dave) with the role "Client/Partner" (as passed in by our IdP). I'd like to open up all boards (except internal) for the Client/Partner role so Dave can hop in and participate. How should I configure this? (without guidance, I'd go into each non-internal forum, and configure the Client/Partner role to be able to view/post/etc. But that seems excessive - it'll involve making the same configuration like 25 times for *each* role that needs permissions, AND having to keep up with this with each new board we launch.)97Views0likes3Comments"View" (threaded / linear) Dropdown Missing - has class "lia-js-hidden"
I'm switching to linear by default, but I discovered the toggle is hidden due to the "lia-thread-view-style-menu search-result-sorting" div having the class "lia-js-hidden" In the screenshot above, you see the SORT menu there, but not the View menu. Here are the relevant settings (I think) Any tips what might be adding this class?71Views0likes1CommentGet request origin in endpoints
I want to get the request origin in endpoint. For example, I have created a endpoint - https://community-stage.khoros.com/eksre65699/plugins/custom/khoros/khoros/grz.users-metrics Now I want to keep this endpoint open only for specific origin like if request is coming from Khoros website then it should return the result but if request is coming from any other website it should return "Anauthorised Request" as a response.76Views0likes1CommentProblem creating pagination with rest2.0 query
I'm trying to create a list of blog items with pagination but this is not working. I don't know if it is because I am doing something wrong or not but i did use a code snippet i found here. The code snippets i found was with the old rest calls, so there could be an issue. My code: <#-- Gets page size from settings (You could hard code your value instead) or defaults to 10 --> <#assign page_size = settings.name.get("blog.entries_per_page_num")?number!5 /> <#-- Gets page number from the URL and defaults to 1 --> <#assign page_number = webuisupport.path.parameters.name.get("page", 1) /> <#-- gets all the recent messages--> <#assign messages = rest("2.0","/search?q=" + "SELECT id,subject,body,view_href,cover_image,author.login,author.id,author.view_href,kudos.sum(weight),metrics.views,post_time, post_time_friendly,search_snippet FROM messages WHERE depth=0 AND conversation.style='blog' AND board.id ='${coreNode.id}' ORDER BY id LIMIT 5 OFFSET 5 "?url).data.items![] /> <#-- Gets the total number of results --> <#assign result_list_size = rest("2.0","/search?q=" + "SELECT count(*) FROM messages WHERE depth=0 AND conversation.style='blog' AND board.id ='${coreNode.id}'"?url).data.count![] /> <#-- This contains the pagination configuration options --> <#assign pageable_item = webuisupport.paging.pageableItem.setCurrentPageNumber(page_number).setItemsPerPage(page_size).setTotalItems(result_list_size).setPagingMode("trivial").build /> <#-- the setPagingMode has a few different options --> <#-- Your code--> <ul class="message-list"> <#list messages as message> <li class="message-item"> <h2 class="subject"><a href="${message.view_href}">${message.subject}</a></h2> </li> </#list> </ul> <#-- Pagination Component using the config we defined above --> <@component id="common.widget.pager" pageableItem=pageable_item /> I am using LIMIT and OFFSET for the pagination in my rest2.0 call and I'm creating the pagination links with the 'common.widget.pager'. I would assume that this widget would count the amount of items and would show the correct number of pages, but this always shows 5 items, even if i only query 10 items and show 10 per page. Am i doing something wrong or am i forgetting something to make this work?Solved151Views1like1CommentEmail Metrics URL
Have any of you implemented a way to remove the tracking keys from the end of an email link (below in red)? /t5/forum/thread/m-p/123456/emcs_t/N6VZws2U85Sjg[truncated]nDzmRwWjN2#M123 The link should simply end up in the address bar as: /t5/forum/thread/m-p/123456/ I’m seeing more people share the links from the address bar with the tracking reference, which presumably skews metrics. It also causes Google Analytics to do weird things. I believe it could be done with JavaScript, but I don’t know if it could happen without a page refresh. Ideally, it would be stripped on the server-side after being registered as a hit.101Views0likes1CommentLithiumSSO token || How to calculate session inactivity
Hi Team, As per the documentation https://developer.khoros.com/khoroscommunitydevdocs/docs/lithiumsso-token The session key expires after 30 minutes of inactivity, after 24 hours, or when the community is restarted (whichever comes first). Reg 24h limit : For every 24hrs ( Using scheduler ) we can refresh the token. But, How to calculate the inactivity. What is the best practice for it.Solved152Views0likes2Comments- 74Views0likes1Comment
Unable to change SSO ID of user with the API
Hey all, We need to update the SSO ID of our users systematically and I am writing a Python script to do so. However, when attempting to do so in the API v1 using a POST call to the /users/id/{id}/sso_id/set endpoint, I am getting the following response. { "response": { "status": "error", "error": { "code": 303, "message": "Permission Denied" } } } I am authenticated as a user with full admin privileges so I'm not sure why I would be getting the Permission Denied message, especially since my user can change SSO IDs via Community Admin just fine. The payload (value=) is also a simple numeric string so it shouldn't be due to invalid. characters or anything. Anyone ever experienced this and know how I can get around it? Thanks in advance!Solved525Views0likes10CommentsHow to get core component Freemarker code to edit / override
I'm trying to edit thesolutions.widget.recently-solved-threads to remove links to boards. How can I get access to the original Freemarker code inside core components in order to copy into a custom component within Studio?Solved173Views0likes3CommentsHow to setup C# or dot net environment for development?
Hi, Currently I am using studio to develop components & to create new pages. I would like to know the process of development in C# or dot net and can we use visual studio? I have gone through documentations and couldn't find details hence reaching out to great minds here. Any inputs will be helpful. Thankyou, Radhika77Views0likes1CommentVitality values like on community.khoros.com
Dear Community, how can we add the vitality values like on the community.khoros.comstartpage? We'd like to have the stats under the search bar without any additonal icons as shown on vitalty quilt. thank you, clemenswSolvedclemensw2 years agoGuide288Views0likes4CommentsLocalize Category and Board Names
We are adding in language packs to our platform. Our navigation component automatically pulls the name of the categories and boards from our Community Structure in Admin, which is great for the English site, but I can't find what the best practice is for embedding a reference to a custom text field so that the navigation component can show the nav in the user's language. Note that using a <p>${text.format("custom.board-name")} context object won't work as a category or board name (I tried). Anyone have a suggestion for how to make the category and board names localizable... other than creating a 100% custom-coded navigation component (the reason this is not preferred for us is that it would mean creating multiple versions of the component to present different variations of the nav based on the sections each role has access to)? Jeff218Views0likes4Commentspush notification support
Hi, I trying to build an app via Cordova of existing community portal with push notification support: 1. Is there an API call that allows the client to report the device token (FCM push token), in a way that dopes not incorporate the native SDK? 2. On the other way around: Is there a way to perform a login through the native SDK, and extract the access token/cookie in order to pass it to a webview? Thank you in advanced, Asherelgar3 years agoContributor152Views0likes2Comments