Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

S2U-27 Messages: Convert a private message into a forum message in the FAQ forum - MASTER #11757

Merged
merged 3 commits into from
Jul 21, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions kernel/api/src/main/java/org/sakaiproject/site/api/Site.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ public interface Site extends Edit, Comparable, Serializable, AuthzGroup
*/
public final static String PROP_SITE_MATHJAX_ALLOWED = "mathJaxAllowed";

/**
* property name for site locale
*/
public final static String PROP_SITE_LOCALE = "locale_string";

/**
* property name for custom overview
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@

import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import org.sakaiproject.entity.api.Entity;
Expand Down Expand Up @@ -1441,4 +1443,16 @@ public enum SiteTitleValidationStatus {
* @return true if the stealthed tool is present in the given site; false otherwise
*/
public boolean isStealthedToolPresent(Site site, String toolID);

/**
* Gets site locale for site id
* @return Optional of locale defined as site property
*/
public Optional<Locale> getSiteLocale(String siteId);

/**
* Gets site locale for site
* @return Optional of locale defined as site property
*/
public Optional<Locale> getSiteLocale(Site site);
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,11 @@
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
import java.util.Stack;
Expand Down Expand Up @@ -3926,4 +3928,29 @@ public boolean isStealthedToolPresent(Site site, String toolID) {

return false;
}

public Optional<Locale> getSiteLocale(String siteId) {
try {
return getSiteLocale(getSite(siteId));
} catch (IdUnusedException e) {
log.error("Could not find site with id [{}], returning empty optional: {}",
siteId, e.toString());
return Optional.empty();
}
}

public Optional<Locale> getSiteLocale(Site site) {
if (site != null) {
String localeString = site.getProperties().getProperty(Site.PROP_SITE_LOCALE);
if (localeString != null) {
Locale locale = serverConfigurationService().getLocaleFromString(localeString);
return Optional.of(locale);
}
// No locale specified in site properties, that's okay
} else {
log.error("Site is null, returning empty optional: {}");
}

return Optional.empty();
}
}
13 changes: 8 additions & 5 deletions library/src/skins/default/src/sass/tool.scss
Original file line number Diff line number Diff line change
Expand Up @@ -228,11 +228,14 @@ label {
color: var(--sakai-text-color-2);
}

.form-control-required .form-control-label::after {
content: ' *';
color: var(--sakai-highlight-color);
}

.form-control-required {
.form-control-label, .form-label {
&::after {
SirSaibot marked this conversation as resolved.
Show resolved Hide resolved
content: ' *';
color: var(--sakai-highlight-color);
}
}
}

// to make sakai task accordion visible in account menu
.global-overlays {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -971,3 +971,20 @@ widget_title=Discussions

forums_revise_title_validation=Please enter a valid forum title.
topics_revise_title_validation=Please enter a valid topic title.

#S2U-27
pvt_publish_to_faq=Post to FAQ Forum
pvt_publish_to_faq_success=The message was successfully posted to FAQ
pvt_title=Title
pvt_question=Question
pvt_question_title_prefix=Q:
pvt_answer=Answer
pvt_answer_title_prefix=A:
pvt_answer_info=You can leave the answer field empty if you don\u0027t want to post it yet.
pvt_missing_title=You must enter a title before you can post to FAQ.
pvt_missing_question=You must enter a question before you can post to FAQ.

cdfm_faq_forum_title=FAQ Forum
cdfm_faq_forum_description=Forum for frequently asked questions
cdfm_faq_topic_title=FAQ Topic
cdfm_faq_topic_description=Topic for frequently asked questions
Original file line number Diff line number Diff line change
Expand Up @@ -966,3 +966,19 @@ widget_title=Debat

forums_revise_title_validation=Cal que introdu\u00efu un nom de f\u00f2rum v\u00e0lid.
topics_revise_title_validation=Cal que introdu\u00efu un nom de tema v\u00e0lid.

#S2U-27
pvt_publish_to_faq=Publicar al debat FAQ
pvt_publish_to_faq_success=El missatge s\u2019ha publicat correctament en Preguntes Mes Frequents
pvt_title=T\u00edtol
pvt_question=Pregunta
pvt_question_title_prefix=P:
pvt_answer=Resposta
pvt_answer_title_prefix=R:
pvt_answer_info=Podeu deixar el camp de resposta buit si encara no el voleu publicar
pvt_missing_title=Heu d\u0027introduir un titol abans de poder publicar a les Preguntes Freq\u00fcents
pvt_missing_question=Heu d\u0027introduir una pregunta abans de poder publicar a les Preguntes Freq\u00fcents
cdfm_faq_forum_title=F\u00f2rum Preguntes Freq\u00fcents
cdfm_faq_forum_description=F\u00f2rum per Preguntes Freq\u00fcents
cdfm_faq_topic_title=Tema Preguntes Freq\u00fcents
cdfm_faq_topic_description=Tema per a Preguntes Freq\u00fcents
Original file line number Diff line number Diff line change
Expand Up @@ -951,3 +951,19 @@ widget_title=Foros

forums_revise_title_validation=Introduzca un t\u00edtulo v\u00e1lido para el foro
topics_revise_title_validation=Introduzca un t\u00edtulo v\u00e1lido para el tema

#S2U-27
pvt_publish_to_faq=Publicar en el foro FAQ
pvt_publish_to_faq_success=El mensaje se ha publicado correctamente en preguntas m\u00e1s frecuentes
pvt_title=T\u00edtulo
pvt_question=Pregunta
pvt_question_title_prefix=P:
pvt_answer=Respuesta
pvt_answer_title_prefix=R:
pvt_answer_info=Puedes dejar la respuesta vac\u00eda si no quieres publicarla a\u00fan.
pvt_missing_title=Debe introducir un t\u00edtulo antes de poder publicar en preguntas frecuentes.
pvt_missing_question=Debe introducir una pregunta antes de poder publicar en preguntas frecuentes.
cdfm_faq_forum_title=Foro preguntas frecuentes
cdfm_faq_forum_description=Foro para preguntas frecuentes
cdfm_faq_topic_title=Preguntas frecuentes
cdfm_faq_topic_description=Tema para las preguntas m\u00e1s frecuentes
Original file line number Diff line number Diff line change
Expand Up @@ -966,3 +966,21 @@ widget_title=Foroak

forums_revise_title_validation=Idatzi baliozko titulu bat fororako.
topics_revise_title_validation=Idatzi baliozko titulu bat gairako.

#S2U-27
pvt_publish_to_faq=Publish to FAQ
pvt_publish_to_faq=Publikatu FAQ gisa
pvt_publish_to_faq_success=Mezua ongi publikatu da FAQ gisa
pvt_title=Titulua
pvt_question=Galdera
pvt_question_title_prefix=Q:
pvt_answer=Erantzuna
pvt_answer_title_prefix=A:
pvt_answer_info=Erantzunaren eremua hutsik utz dezakezu publikatu nahi ez baduzu oraindik.
pvt_missing_title=Ezinbestekoa da izenburu bat sartzea "Ohiko galderak" atalean publikatzeko.
pvt_missing_question=Ezinbestekoa da galdera bat sartzea "Ohiko galderak" atalean publikatzeko.

cdfm_faq_forum_title=FAQ foroa
cdfm_faq_forum_description=Galdera ohikoentzako foroa
cdfm_faq_topic_title=FAQ gaia
cdfm_faq_topic_description=Galdera ohikoentzako gaia
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,9 @@ public interface DiscussionForum extends OpenForum {
public Boolean getRestrictPermissionsForGroups();

public void setRestrictPermissionsForGroups(Boolean restrictPermissionsForGroups);

public Boolean getFaqForum();

public void setFaqForum(Boolean isFaqForum);

}
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,8 @@ public interface DiscussionTopic extends OpenTopic {
public Boolean getRestrictPermissionsForGroups();

public void setRestrictPermissionsForGroups(Boolean restrictPermissionsForGroups);

public Boolean getFaqTopic();

public void setFaqTopic(Boolean isFaqTopic);
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,44 @@ public interface MessageForumsForumManager {
public BaseForum getForumById(boolean open, Long forumId);
public BaseForum getForumByUuid(String forumId);

/**
* Retrieve FAQ Forum from a given area
* @return existing faq forum or null
*/
public DiscussionForum getFaqForumForArea(Area area);

/**
* Retrieve FAQ Topic from a given forum
* @return existing faq forum or null
*/
public DiscussionTopic getFaqTopicForForum(DiscussionForum discussionForum);

/**
* Create and save FAQ Forum for a given area
* @return newly created faq forum
*/
public DiscussionForum createFaqForum(Area discussionArea);

/**
* Create and save FAQ Topic for a given forum
* @return newly created faq topic
*/
public DiscussionTopic createFaqTopic(DiscussionForum discussionForum);

/**
* Retrieve or create and save FAQ Forum from a given area
* Create and save FAQ Forum for a given area
* @return existing or newly created faq forum
*/
public DiscussionForum getOrCreateFaqForumForArea(Area area);

/**
* Retrieve or create and save FAQ Topic from a given forum
* Create and save FAQ Forum for a given area
* @return existing or newly created faq topic
*/
public DiscussionTopic getOrCreateFaqTopicForForum(DiscussionForum discussionForum);

/**
* Create and save an empty discussion forum
* @return discussion forum
Expand Down
4 changes: 4 additions & 0 deletions msgcntr/messageforums-app/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,8 @@ public class DiscussionForumTool {
private static final String AUTOCREATE_TOPICS_GROUPS_DESCRIPTION = "cdfm_autocreate_topics_desc_groups";
private static final String DUPLICATE_COPY_TITLE = "cdfm_duplicate_copy_title";
private static final String TASK_NOT_CREATED = "cdfm_cant_create_task";
private static final String MSG_PVT_ANSWER_PREFIX = "pvt_answer_title_prefix";
private static final String MSG_PVT_QUESTION_PREFIX = "pvt_question_title_prefix";

private static final String FROM_PAGE = "msgForum:mainOrForumOrTopic";
/**
Expand Down Expand Up @@ -4316,12 +4318,34 @@ public String processDfMsgReplyMsgFromEntire()

public String processDfMsgReplyMsg()
{
selectedMessageCount = 0;
if(selectedMessage.getMessage().getTitle() != null && !selectedMessage.getMessage().getTitle().startsWith(getResourceBundleString(MSG_REPLY_PREFIX)))
this.composeTitle = getResourceBundleString(MSG_REPLY_PREFIX) + " " + selectedMessage.getMessage().getTitle() + " ";
else
this.composeTitle = selectedMessage.getMessage().getTitle();

selectedMessageCount = 0;
SirSaibot marked this conversation as resolved.
Show resolved Hide resolved

boolean isFaqForum = Boolean.TRUE.equals(selectedTopic.getTopic().getFaqTopic());

String replyPrefix = getResourceBundleString(MSG_REPLY_PREFIX);
String answerPrefix = getResourceBundleString(MSG_PVT_ANSWER_PREFIX);
String questionPrefix = getResourceBundleString(MSG_PVT_QUESTION_PREFIX);
String title = StringUtils.trim(selectedMessage.getMessage().getTitle());

if (StringUtils.startsWith(title, replyPrefix)) {
// Re: title --> Re: title
this.composeTitle = title;
} else if (isFaqForum) {
if (StringUtils.startsWith(title, questionPrefix)) {
// Q: title -> A: title
this.composeTitle = StringUtils.replace(title, questionPrefix, answerPrefix);
} else {
// title --> Re: title
// A: title --> Re: A: title
this.composeTitle = replyPrefix + " " + title;
}
} else {
// title --> Re: title
// A: title --> Re: A: title
// Q: title --> Re: Q: title
this.composeTitle = replyPrefix + " " + title;
}

return "dfMessageReply";
}

Expand Down
Loading
Loading