Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.jetbrains.annotations.Nullable;
import org.json.JSONObject;
import org.labkey.announcements.model.AnnouncementDigestProvider;
import org.labkey.announcements.model.AnnouncementFullModel;
import org.labkey.announcements.model.AnnouncementManager;
import org.labkey.announcements.model.AnnouncementModel;
import org.labkey.announcements.model.DailyDigestEmailPrefsSelector;
Expand Down Expand Up @@ -107,11 +108,11 @@
import org.labkey.api.util.DateUtil;
import org.labkey.api.util.GUID;
import org.labkey.api.util.HtmlString;
import org.labkey.api.util.OptionBuilder;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.util.Pair;
import org.labkey.api.util.URLHelper;
import org.labkey.api.util.OptionBuilder;
import org.labkey.api.util.SelectBuilder;
import org.labkey.api.util.URLHelper;
import org.labkey.api.view.ActionURL;
import org.labkey.api.view.AjaxCompletion;
import org.labkey.api.view.AlwaysAvailableWebPartFactory;
Expand All @@ -137,7 +138,6 @@
import org.springframework.web.servlet.ModelAndView;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
Expand Down Expand Up @@ -218,7 +218,6 @@ public static ActionURL getBeginURL(Container c)

public static AnnouncementModel copyEditableProps(AnnouncementModel target, AnnouncementModel source, boolean isInsert)
{
if (source.getApproved() != null) target.setApproved(source.getApproved());
if (source.getAssignedTo() != null) target.setAssignedTo(source.getAssignedTo());
if (source.getBody() != null) target.setBody(source.getBody());
if (source.getExpires() != null) target.setExpires(source.getExpires());
Expand Down Expand Up @@ -940,7 +939,7 @@ public BindException bindParameters(PropertyValues m) throws Exception
public ModelAndView getInsertUpdateView(AnnouncementForm form, boolean reshow, BindException errors)
{
Permissions perm = getPermissions();
AnnouncementModel parent = null;
AnnouncementFullModel parent = null;
Container c = getContainer();

if (null != form.getParentId())
Expand Down Expand Up @@ -2308,7 +2307,7 @@ protected DataRegion getDataRegion(Permissions perm, Settings settings)

public static class ThreadViewBean
{
public AnnouncementModel announcementModel;
public AnnouncementFullModel announcementModel;
public String message = "";
public Permissions perm = null;
public boolean isResponse = false;
Expand Down Expand Up @@ -2336,7 +2335,7 @@ public ThreadView(Container c, URLHelper currentURL, User user, String rowId, St
init(c, findThread(c, rowId, entityId), currentURL, getPermissions(c, user, getSettings(c)), false, false);
}

public ThreadView(Container c, ActionURL url, AnnouncementModel ann, Permissions perm)
public ThreadView(Container c, ActionURL url, AnnouncementFullModel ann, Permissions perm)
{
this();
init(c, ann, url, perm, true, false);
Expand All @@ -2345,11 +2344,11 @@ public ThreadView(Container c, ActionURL url, AnnouncementModel ann, Permissions
public ThreadView(AnnouncementForm form, Container c, ActionURL url, Permissions perm, boolean print)
{
this();
AnnouncementModel ann = findThread(c, form.get("rowId"), form.get("entityId"));
AnnouncementFullModel ann = findThread(c, form.get("rowId"), form.get("entityId"));
init(c, ann, url, perm, false, print);
}

protected void init(Container c, AnnouncementModel ann, URLHelper currentURL, Permissions perm, boolean isResponse, boolean print)
protected void init(Container c, AnnouncementFullModel ann, URLHelper currentURL, Permissions perm, boolean isResponse, boolean print)
{
if (null == c || !perm.allowRead(ann))
{
Expand Down Expand Up @@ -2454,7 +2453,7 @@ public AnnouncementModel getAnnouncement()
}


private static @Nullable AnnouncementModel findThread(Container c, String rowIdVal, String entityId)
private static @Nullable AnnouncementFullModel findThread(Container c, String rowIdVal, String entityId)
{
int rowId = 0;
if (rowIdVal != null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
<%@ page import="org.labkey.announcements.AnnouncementsController.RespondAction" %>
<%@ page import="org.labkey.announcements.AnnouncementsController.ThreadView" %>
<%@ page import="org.labkey.announcements.AnnouncementsController.ThreadViewBean" %>
<%@ page import="org.labkey.announcements.model.AnnouncementFullModel" %>
<%@ page import="org.labkey.announcements.model.AnnouncementManager" %>
<%@ page import="org.labkey.announcements.model.AnnouncementModel" %>
<%@ page import="org.labkey.announcements.model.DiscussionServiceImpl" %>
Expand All @@ -40,7 +41,7 @@
Container c = getContainer();
User user = getUser();
ThreadViewBean bean = me.getModelBean();
AnnouncementModel announcementModel = bean.announcementModel;
AnnouncementFullModel announcementModel = bean.announcementModel;
DiscussionService.Settings settings = bean.settings;

if (null == announcementModel)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.labkey.announcements.model;

import java.util.Date;

public class AnnouncementFullModel extends AnnouncementModel
{
private Date _approved = null;

public Date getApproved()
{
return _approved;
}

public void setApproved(Date approved)
{
_approved = approved;
}

public boolean isSpam()
{
return AnnouncementManager.SPAM_MAGIC_DATE.equals(getApproved());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -124,20 +124,20 @@ private AnnouncementManager()
{
}

private static @Nullable AnnouncementModel getAnnouncement(@Nullable Container c, @NotNull SimpleFilter filter)
private static @Nullable AnnouncementFullModel getAnnouncement(@Nullable Container c, @NotNull SimpleFilter filter)
{
if (c != null)
filter.addCondition(FieldKey.fromParts("Container"), c);

return new TableSelector(_comm.getTableInfoAnnouncements(), filter, null).getObject(AnnouncementModel.class);
return new TableSelector(_comm.getTableInfoAnnouncements(), filter, null).getObject(AnnouncementFullModel.class);
}

public static @Nullable AnnouncementModel getAnnouncement(@Nullable Container c, int rowId)
public static @Nullable AnnouncementFullModel getAnnouncement(@Nullable Container c, int rowId)
{
return getAnnouncement(c, new SimpleFilter(FieldKey.fromParts("RowId"), rowId));
}

public static @Nullable AnnouncementModel getAnnouncement(@Nullable Container c, String entityId)
public static @Nullable AnnouncementFullModel getAnnouncement(@Nullable Container c, String entityId)
{
try
{
Expand Down Expand Up @@ -531,7 +531,7 @@ private static AnnouncementModel validateModelWithSideEffects(AnnouncementModel
}

// Magic date value used to mark an announcement that a moderator has reviewed and marked as spam
private static final Date SPAM_MAGIC_DATE = new Date(0);
static final Date SPAM_MAGIC_DATE = new Date(0);

// Standard filters for retrieving specific classes of messages (approved, spam, needs review)
public static final SimpleFilter IS_APPROVED_FILTER = new SimpleFilter(FieldKey.fromParts("Approved"), AnnouncementManager.SPAM_MAGIC_DATE, CompareType.GT);
Expand All @@ -543,11 +543,6 @@ public static void markAsSpam(Container c, AnnouncementModel ann)
updateApproved(c, ann, SPAM_MAGIC_DATE);
}

public static boolean isSpam(AnnouncementModel ann)
{
return SPAM_MAGIC_DATE.equals(ann.getApproved());
}

// Execute direct SQL (not Table.update())... I don't think we want to change Modified or ModifiedBy. Could consider adding column for Moderator, though.
// Returns true if an update was made, false if not (e.g., message was already reviewed).
private static boolean updateApproved(Container c, AnnouncementModel ann, Date date)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ public class AnnouncementModel extends Entity implements Serializable

private Collection<AnnouncementModel> _responses = null;
private Set<User> _authors;
private Date _approved = null;

/**
* Standard constructor.
Expand Down Expand Up @@ -429,21 +428,5 @@ public AttachmentParent getAttachmentParent()
{
return new AnnouncementAttachmentParent(this);
}

public Date getApproved()
{
return _approved;
}

public void setApproved(Date approved)
{
_approved = approved;
}

@JsonIgnore
public boolean isSpam()
{
return AnnouncementManager.isSpam(this);
}
}

4 changes: 3 additions & 1 deletion api/src/org/labkey/api/action/ApiJsonWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,9 @@ public void testExceptionNotCommitted() throws IOException
var responseText = ((MockHttpServletResponse)writer.getResponse()).getContentAsString();
var json = new JSONObject(responseText);
assertEquals("throwing up", json.getString("exception"));
assertTrue(json.has("stackTrace"));
assertFalse(json.getBoolean("success"));
assertEquals("java.lang.IllegalStateException", json.get("exceptionClass"));
assertFalse(json.has("stackTrace"));
assertFalse(json.has("schemaName"));
}

Expand Down
1 change: 0 additions & 1 deletion api/src/org/labkey/api/action/ApiResponseWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,6 @@ public JSONObject toJSON(Throwable e)
JSONObject json = new JSONObject();
json.put("exception", e.getMessage() != null ? e.getMessage() : e.getClass().getName());
json.put("exceptionClass", e.getClass().getName());
json.put("stackTrace", e.getStackTrace());
return json;
}

Expand Down
2 changes: 1 addition & 1 deletion api/src/org/labkey/api/defaults/DefaultValuesAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public DefaultValuesAction(Class formClass)
protected Domain getDomain(FormType domainIdForm)
{
Domain domain = PropertyService.get().getDomain(domainIdForm.getDomainId());
if (domain == null)
if (domain == null || !domain.getContainer().equals(getContainer()))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems possible we'd want to set default values on a per-container basis, and not just in the domain's owning container. I haven't checked if that's possible today.

{
throw new NotFoundException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,5 +192,4 @@ protected HtmlString getQcStateHtml(Container container, DataStateHandler qcStat

return qcStateHtml.getHtmlString();
}

}
7 changes: 6 additions & 1 deletion api/src/org/labkey/api/qc/DataStateManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package org.labkey.api.qc;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
import org.labkey.api.cache.Cache;
import org.labkey.api.cache.CacheManager;
Expand All @@ -25,6 +27,7 @@
import org.labkey.api.data.Table;
import org.labkey.api.data.TableSelector;
import org.labkey.api.security.User;
import org.labkey.api.util.logging.LogHelper;

import java.util.ArrayList;
import java.util.Collections;
Expand All @@ -34,6 +37,7 @@

public class DataStateManager
{
private static final Logger LOG = LogHelper.getLogger(DataStateManager.class, "Data state persistence issues");
private static final DataStateManager _instance = new DataStateManager();
private static final Map<String, DataStateHandler<AbstractManageDataStatesForm>> _DataStateHandlers = new HashMap<>();
private static final Cache<Container, DataStateCollections> DATA_STATE_DB_CACHE = CacheManager.getBlockingCache(CacheManager.UNLIMITED, CacheManager.DAY, "Data states",
Expand Down Expand Up @@ -124,7 +128,8 @@ public DataState insertState(User user, DataState state)
public DataState updateState(User user, DataState state)
{
DATA_STATE_DB_CACHE.remove(state.getContainer());
return Table.update(user, CoreSchema.getInstance().getTableInfoDataStates(), state, state.getRowId());
SimpleFilter filter = SimpleFilter.createContainerFilter(state.getContainer());
return Table.update(user, CoreSchema.getInstance().getTableInfoDataStates(), state, state.getRowId(), filter, Level.WARN);
}

public boolean deleteState(DataState state)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package org.labkey.api.security.permissions;

import jakarta.servlet.http.HttpServletResponse;
import org.junit.After;
import org.junit.Assert;
import org.labkey.api.data.Container;
Expand Down Expand Up @@ -124,7 +125,7 @@ protected MockHttpServletResponse post(ActionURL url, User user) throws Exceptio
}

/** Assert that a dispatched response has the expected HTTP status code. */
protected void assertStatus(int expected, MockHttpServletResponse response)
protected void assertStatus(int expected, HttpServletResponse response)
{
assertEquals("Unexpected HTTP status", expected, response.getStatus());
}
Expand Down
Loading