diff --git a/config/alfresco/templates/client/summary_panel.ftl b/config/alfresco/templates/client/node_summary_panel.ftl similarity index 70% rename from config/alfresco/templates/client/summary_panel.ftl rename to config/alfresco/templates/client/node_summary_panel.ftl index d613819b9d..65e650ef19 100644 --- a/config/alfresco/templates/client/summary_panel.ftl +++ b/config/alfresco/templates/client/node_summary_panel.ftl @@ -11,8 +11,8 @@ <#assign navurl="/navigate/showSpaceDetails/"> <#assign navurl=navurl + node.nodeRef.storeRef.protocol + '/' + node.nodeRef.storeRef.identifier + '/' + node.nodeRef.id> -
Details
- Close +
Details
+ Close @@ -23,27 +23,27 @@ <#assign isImage=node.isDocument && (node.mimetype = "image/gif" || node.mimetype = "image/jpeg" || node.mimetype = "image/png")> <#assign isVideo=node.isDocument && node.mimetype?starts_with("video/")> <#if isImage> - + <#elseif isVideo> - + - <#----> - + <#----> + <#else> - + - +
- target="new"> + target="new">
diff --git a/config/alfresco/templates/client/task_summary_panel.ftl b/config/alfresco/templates/client/task_summary_panel.ftl new file mode 100644 index 0000000000..f78ed72db0 --- /dev/null +++ b/config/alfresco/templates/client/task_summary_panel.ftl @@ -0,0 +1,48 @@ +
+ + + + + + + + +
+ + + + + +
${task.description}Close
+
+ + + + + + + + + +
Type:${task.type?html}
Name:${task.name?html}
Start Date:${task.startDate?date}
Due Date: + <#if task.properties["bpm:dueDate"]?exists> + ${task.startDate?date} + <#else> + None + +
Priority:${task.properties["bpm:priority"]}
Percent Completed:${task.properties["bpm:percentComplete"]}
Status:${task.properties["bpm:status"]}
Completed:${task.isCompleted?string("Yes", "No")}
+
+
+ + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/portlets/mytasks_get.js b/config/alfresco/templates/webscripts/org/alfresco/portlets/mytasks_get.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config/alfresco/templates/webscripts/org/alfresco/portlets/mytasks_get_desc.xml b/config/alfresco/templates/webscripts/org/alfresco/portlets/mytasks_get_desc.xml new file mode 100644 index 0000000000..52ffd55d68 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/portlets/mytasks_get_desc.xml @@ -0,0 +1,7 @@ + + My Tasks + Generate the My Tasks portlet page + + user + required + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/portlets/mytasks_get_html.ftl b/config/alfresco/templates/webscripts/org/alfresco/portlets/mytasks_get_html.ftl new file mode 100644 index 0000000000..c5e499d9b0 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/portlets/mytasks_get_html.ftl @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + +<#-- get the filter mode from the passed in args --> +<#-- filters: 0=all, 1=today, 2=next week, 3=no due date, 4=overdue --> +<#if args.f?exists><#assign filter=args.f?number><#else><#assign filter=0> + + + + + + + +
  + + + + + + + + +
Tasks to doDue TodayNext 7 daysNo due dateOverdue
+
  +
+ <#assign weekms=1000*60*60*24*7> + <#list workflow.assignedTasks?sort_by('startDate') as t> + <#-- TODO: is it better to use a js script to pre-filter the list? --> + <#assign hasDue=t.properties["bpm:dueDate"]?exists> + <#if hasDue> + <#assign due=t.properties["bpm:dueDate"]> + + <#if (filter=0) || + (filter=3 && !hasDue) || + (filter=1 && hasDue && (dateCompare(date?date, due?date, 0, "==") == 1)) || + (filter=2 && hasDue && (dateCompare(due?date, date?date) == 1 && dateCompare(date?date, due?date, weekms) == 1)) || + (filter=4 && hasDue && (dateCompare(date?date, due?date) == 1))> +
+
+ <#if hasDue> + <#-- items due today? --> + <#if (filter=0 || filter=1) && (dateCompare(date?date, due?date, 0, "==") == 1)> +
+ <#-- items overdue? --> + <#elseif (filter=0 || filter=4) && (dateCompare(date?date, due?date) == 1)> +
+ <#else> +
+ + <#else> +
+ + ${t.description?html} [${t.name?html}] + <#if hasDue> + (Due: ${due?date}) + +
+ +
+
+
+ + +
+
+ + \ No newline at end of file diff --git a/source/java/org/alfresco/web/app/servlet/BaseTemplateContentServlet.java b/source/java/org/alfresco/web/app/servlet/BaseTemplateContentServlet.java index f104ead944..90e7b1e373 100644 --- a/source/java/org/alfresco/web/app/servlet/BaseTemplateContentServlet.java +++ b/source/java/org/alfresco/web/app/servlet/BaseTemplateContentServlet.java @@ -297,8 +297,8 @@ public abstract class BaseTemplateContentServlet extends BaseServlet } root.put("args", args); - // method to allow absolute client urls to be generated - root.put("absurl", new AbsoluteUrlMethod(req.getContextPath())); + // method to allow client urls to be generated + root.put("url", new URLHelper(req.getContextPath())); return root; } @@ -311,4 +311,22 @@ public abstract class BaseTemplateContentServlet extends BaseServlet return Utils.getFileTypeImage(getServletContext(), filename, small); } }; + + /** + * Helper to return context path for generating urls + */ + public static class URLHelper + { + String context; + + public URLHelper(String context) + { + this.context = context; + } + + public String getContext() + { + return context; + } + } } diff --git a/source/java/org/alfresco/web/bean/ajax/NodeInfoBean.java b/source/java/org/alfresco/web/bean/ajax/NodeInfoBean.java index fe07c20aa9..ae779e37d1 100644 --- a/source/java/org/alfresco/web/bean/ajax/NodeInfoBean.java +++ b/source/java/org/alfresco/web/bean/ajax/NodeInfoBean.java @@ -39,6 +39,7 @@ import org.alfresco.repo.template.UrlEncodeMethod; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.TemplateImageResolver; +import org.alfresco.web.app.servlet.BaseTemplateContentServlet; import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.ui.common.Utils; import org.apache.commons.logging.Log; @@ -77,7 +78,7 @@ public class NodeInfoBean if (this.nodeService.exists(nodeRef)) { Repository.getServiceRegistry(context).getTemplateService().processTemplate( - "/alfresco/templates/client/summary_panel.ftl", getModel(nodeRef), out); + "/alfresco/templates/client/node_summary_panel.ftl", getModel(nodeRef), out); } else { @@ -104,12 +105,13 @@ public class NodeInfoBean private Map getModel(NodeRef nodeRef) { FacesContext context = FacesContext.getCurrentInstance(); - Map model = new HashMap(7, 1.0f); + Map model = new HashMap(8, 1.0f); // create api methods model.put("date", new Date()); model.put("cropContent", new CropContentMethod()); - model.put("absurl", new AbsoluteUrlMethod(context.getExternalContext().getRequestContextPath())); + model.put("url", new BaseTemplateContentServlet.URLHelper( + context.getExternalContext().getRequestContextPath())); model.put("node", new TemplateNode( nodeRef, Repository.getServiceRegistry(context), diff --git a/source/java/org/alfresco/web/bean/ajax/TaskInfoBean.java b/source/java/org/alfresco/web/bean/ajax/TaskInfoBean.java new file mode 100644 index 0000000000..43507a5d2d --- /dev/null +++ b/source/java/org/alfresco/web/bean/ajax/TaskInfoBean.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.web.bean.ajax; + +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import javax.faces.context.FacesContext; +import javax.faces.context.ResponseWriter; + +import org.alfresco.repo.template.AbsoluteUrlMethod; +import org.alfresco.repo.template.CropContentMethod; +import org.alfresco.repo.template.TemplateNode; +import org.alfresco.repo.template.UrlEncodeMethod; +import org.alfresco.repo.template.Workflow; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.TemplateImageResolver; +import org.alfresco.service.cmr.workflow.WorkflowService; +import org.alfresco.service.cmr.workflow.WorkflowTask; +import org.alfresco.web.app.servlet.BaseTemplateContentServlet; +import org.alfresco.web.bean.repository.Repository; +import org.alfresco.web.ui.common.Utils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Bean used by an AJAX control to send information back on the requested workflow task. + * + * @author Kevin Roast + */ +public class TaskInfoBean +{ + private WorkflowService workflowService; + + /** + * Returns information on the node identified by the 'taskId' + * parameter found in the ExternalContext. + *

+ * The result is the formatted HTML to show on the client. + */ + public void sendTaskInfo() throws IOException + { + FacesContext context = FacesContext.getCurrentInstance(); + ResponseWriter out = context.getResponseWriter(); + + String taskId = (String)context.getExternalContext().getRequestParameterMap().get("taskId"); + if (taskId == null || taskId.length() == 0) + { + throw new IllegalArgumentException("'taskId' parameter is missing"); + } + + WorkflowTask task = this.workflowService.getTaskById(taskId); + if (task != null) + { + Repository.getServiceRegistry(context).getTemplateService().processTemplate( + "/alfresco/templates/client/task_summary_panel.ftl", getModel(task), out); + } + else + { + out.write("Task could not be found."); + } + } + + + // ------------------------------------------------------------------------------ + // Bean getters and setters + + /** + * @param workflowService The WorkflowService to set. + */ + public void setWorkflowService(WorkflowService workflowService) + { + this.workflowService = workflowService; + } + + + // ------------------------------------------------------------------------------ + // Helper methods + + private Map getModel(WorkflowTask task) + { + FacesContext context = FacesContext.getCurrentInstance(); + Map model = new HashMap(8, 1.0f); + + // create template api methods and objects + model.put("date", new Date()); + model.put("url", new BaseTemplateContentServlet.URLHelper( + context.getExternalContext().getRequestContextPath())); + model.put("task", new Workflow.WorkflowTaskItem( + Repository.getServiceRegistry(context), + this.imageResolver, + task)); + + return model; + } + + /** Template Image resolver helper */ + private TemplateImageResolver imageResolver = new TemplateImageResolver() + { + public String resolveImagePathForName(String filename, boolean small) + { + return Utils.getFileTypeImage(FacesContext.getCurrentInstance(), filename, small); + } + }; +} diff --git a/source/java/org/alfresco/web/ui/repo/component/UINodeInfo.java b/source/java/org/alfresco/web/ui/repo/component/UINodeInfo.java index ae68eee4ef..9ef518ea1e 100644 --- a/source/java/org/alfresco/web/ui/repo/component/UINodeInfo.java +++ b/source/java/org/alfresco/web/ui/repo/component/UINodeInfo.java @@ -91,9 +91,8 @@ public class UINodeInfo extends SelfRenderingComponent get(NODE_INFO_SCRIPTS_WRITTEN); if (present == null) { - out.write(""); + out.write(""); context.getExternalContext().getRequestMap().put( NODE_INFO_SCRIPTS_WRITTEN, Boolean.TRUE); diff --git a/source/java/org/alfresco/web/ui/repo/tag/PageTag.java b/source/java/org/alfresco/web/ui/repo/tag/PageTag.java index 96c2a88b35..c83c133ae5 100644 --- a/source/java/org/alfresco/web/ui/repo/tag/PageTag.java +++ b/source/java/org/alfresco/web/ui/repo/tag/PageTag.java @@ -199,6 +199,11 @@ public class PageTag extends TagSupport out.write(reqPath); out.write("/scripts/ajax/common.js\">"); + // pop-up panel helper objects + out.write(""); + // set the context path used by some Alfresco script objects out.write("