FAQ auf legacy free umgestellt, aber Admin Oberfläche funktioniert noch nicht. Upgrade nicht erforderlich, da bisher nicht genutzt. Diverse kleinere Bereinigungen, Formatierungen, Doku.

git-svn-id: https://svn.libreccm.org/ccm/trunk@1503 8810af33-2d31-482b-a856-94f89814c4df
master
pb 2012-02-10 17:24:55 +00:00
parent 8235f21dd3
commit 4f83152ac7
26 changed files with 922 additions and 72 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

View File

@ -0,0 +1,18 @@
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:categorization="http://www.arsdigita.com/categorization/1.0"
xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
version="1.0">
<xsl:template match="categorization:objectCategories">
<b><xsl:value-of select="bebop:name"/></b>
<blockquote>
<xsl:apply-templates select="categorization:qualifiedCategoryName" />
</blockquote>
</xsl:template>
<xsl:template match="categorization:qualifiedCategoryName">
<xsl:value-of select="@qualifiedName"/><br />
</xsl:template>
</xsl:stylesheet>

View File

@ -18,7 +18,6 @@
*/ */
package com.arsdigita.docrepo; package com.arsdigita.docrepo;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.mimetypes.MimeType; import com.arsdigita.mimetypes.MimeType;
@ -26,7 +25,6 @@ import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.metadata.Property; import com.arsdigita.persistence.metadata.Property;
import com.arsdigita.util.Assert; import com.arsdigita.util.Assert;
import org.apache.oro.text.perl.Perl5Util;
import javax.activation.DataHandler; import javax.activation.DataHandler;
import javax.activation.FileDataSource; import javax.activation.FileDataSource;
@ -39,6 +37,9 @@ import java.math.BigDecimal;
import java.util.Iterator; import java.util.Iterator;
import java.util.Vector; import java.util.Vector;
import org.apache.log4j.Logger;
import org.apache.oro.text.perl.Perl5Util;
/** /**
* Represents a File in the document manager application. * Represents a File in the document manager application.
* *
@ -46,11 +47,10 @@ import java.util.Vector;
* @author Ron Henderson (ron@arsdigita.com) * @author Ron Henderson (ron@arsdigita.com)
* @version $Id: File.java pboy $ * @version $Id: File.java pboy $
*/ */
public class File extends ResourceImpl implements Constants { public class File extends ResourceImpl {
/** Logger instance for debugging support. */ /** Logger instance for debugging support. */
protected static org.apache.log4j.Logger s_log = protected static Logger s_log = Logger.getLogger(File.class);
org.apache.log4j.Logger.getLogger(File.class);
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.docrepo.File"; "com.arsdigita.docrepo.File";
@ -152,7 +152,7 @@ public class File extends ResourceImpl implements Constants {
*/ */
@Override @Override
protected void beforeSave() { protected void beforeSave() {
set(IS_FOLDER, Boolean.FALSE); set(Repository.IS_FOLDER, Boolean.FALSE);
super.beforeSave(); super.beforeSave();
} }
@ -169,7 +169,7 @@ public class File extends ResourceImpl implements Constants {
* content type cannot be determined. * content type cannot be determined.
*/ */
public String getContentType() { public String getContentType() {
return (String) get(TYPE); return (String) get(Repository.TYPE);
} }
/** /**
@ -198,7 +198,7 @@ public class File extends ResourceImpl implements Constants {
*/ */
private void setContentType(String type) { private void setContentType(String type) {
if (isNew()) { if (isNew()) {
set(TYPE, type); set(Repository.TYPE, type);
} else { } else {
if (!type.equals(getContentType())) { if (!type.equals(getContentType())) {
throw new TypeChangeException(getContentType(), type); throw new TypeChangeException(getContentType(), type);
@ -258,9 +258,9 @@ public class File extends ResourceImpl implements Constants {
final byte[] content = text.getBytes(); final byte[] content = text.getBytes();
DocBlobject dblob = new DocBlobject(); DocBlobject dblob = new DocBlobject();
dblob.setContent(content); dblob.setContent(content);
set(CONTENT, dblob); set(Repository.CONTENT, dblob);
set(SIZE, BigDecimal.valueOf(content.length)); set(Repository.SIZE, BigDecimal.valueOf(content.length));
setContentType(TEXT_PLAIN); setContentType(Repository.TEXT_PLAIN);
} }
/** /**
@ -318,8 +318,8 @@ public class File extends ResourceImpl implements Constants {
byte[] content = os.toByteArray(); byte[] content = os.toByteArray();
DocBlobject dblob = new DocBlobject(); DocBlobject dblob = new DocBlobject();
dblob.setContent(content); dblob.setContent(content);
set(CONTENT, dblob); set(Repository.CONTENT, dblob);
set(SIZE, BigDecimal.valueOf(content.length)); set(Repository.SIZE, BigDecimal.valueOf(content.length));
} catch (IOException e) { } catch (IOException e) {
throw new ResourceException("error reading content: " + e.getMessage()); throw new ResourceException("error reading content: " + e.getMessage());
@ -333,7 +333,7 @@ public class File extends ResourceImpl implements Constants {
* cannot be computed. * cannot be computed.
*/ */
public BigDecimal getSize() { public BigDecimal getSize() {
BigDecimal size = (BigDecimal) get(SIZE); BigDecimal size = (BigDecimal) get(Repository.SIZE);
if (size != null) { if (size != null) {
return size; return size;
} else { } else {
@ -358,8 +358,8 @@ public class File extends ResourceImpl implements Constants {
byte[] content = getRawContent(); byte[] content = getRawContent();
DocBlobject dblob = new DocBlobject(); DocBlobject dblob = new DocBlobject();
dblob.setContent(content); dblob.setContent(content);
dest.set(CONTENT,dblob); dest.set(Repository.CONTENT,dblob);
dest.set(SIZE, BigDecimal.valueOf(content.length)); dest.set(Repository.SIZE, BigDecimal.valueOf(content.length));
dest.save(); dest.save();
return dest; return dest;
} }

View File

@ -40,7 +40,7 @@ import java.util.StringTokenizer;
* @author Ron Henderson (ron@arsdigita.com) * @author Ron Henderson (ron@arsdigita.com)
* @version $Id: Folder.java pboy $ * @version $Id: Folder.java pboy $
*/ */
public class Folder extends ResourceImpl implements Constants { public class Folder extends ResourceImpl {
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.docrepo.Folder"; "com.arsdigita.docrepo.Folder";
@ -135,7 +135,7 @@ public class Folder extends ResourceImpl implements Constants {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("folder before save"); s_log.debug("folder before save");
} }
set(IS_FOLDER, Boolean.TRUE); set(Repository.IS_FOLDER, Boolean.TRUE);
super.beforeSave(); super.beforeSave();
} }
@ -200,7 +200,7 @@ public class Folder extends ResourceImpl implements Constants {
public boolean hasResource(String name) { public boolean hasResource(String name) {
DataAssociation da = (DataAssociation) get("immediateChildren"); DataAssociation da = (DataAssociation) get("immediateChildren");
DomainCollection resources = new DomainCollection(da); DomainCollection resources = new DomainCollection(da);
resources.addEqualsFilter(NAME, name); resources.addEqualsFilter(Repository.NAME, name);
try { try {
return resources.next(); return resources.next();
} finally { } finally {
@ -247,7 +247,7 @@ public class Folder extends ResourceImpl implements Constants {
String subPath[] = new String[pathElementCount]; String subPath[] = new String[pathElementCount];
for (int i = 0; i < pathElementCount; i++) { for (int i = 0; i < pathElementCount; i++) {
StringBuffer buf = new StringBuffer(); StringBuilder buf = new StringBuilder();
for (int j = 0; j <= i; j++) { for (int j = 0; j <= i; j++) {
buf.append(SEPARATOR); buf.append(SEPARATOR);
buf.append(name[j]); buf.append(name[j]);
@ -314,6 +314,7 @@ public class Folder extends ResourceImpl implements Constants {
* Returns the display name for a folder, which is equivalent to * Returns the display name for a folder, which is equivalent to
* calling getName(). * calling getName().
*/ */
@Override
public String getDisplayName() { public String getDisplayName() {
return getName(); return getName();
} }

View File

@ -72,7 +72,7 @@ public class Initializer extends CompoundInitializer {
new ACSObjectInstantiator() { new ACSObjectInstantiator() {
@Override @Override
public DomainObject doNewInstance(DataObject obj) { public DomainObject doNewInstance(DataObject obj) {
Boolean isFolder = (Boolean) obj.get(Constants.IS_FOLDER); Boolean isFolder = (Boolean) obj.get(Repository.IS_FOLDER);
if (isFolder != null && isFolder.booleanValue()) { if (isFolder != null && isFolder.booleanValue()) {
return new Folder(obj); return new Folder(obj);
} else { } else {

View File

@ -57,7 +57,7 @@ import org.apache.log4j.Logger;
* @author Ron Henderson (ron@arsdigita.com) * @author Ron Henderson (ron@arsdigita.com)
*/ */
public class Repository extends Application implements Constants { public class Repository extends Application {
/** Logger instance for debugging purpose. */ /** Logger instance for debugging purpose. */
private static Logger s_log = Logger.getLogger(Repository.class); private static Logger s_log = Logger.getLogger(Repository.class);
@ -65,20 +65,44 @@ public class Repository extends Application implements Constants {
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.docrepo.Repository"; "com.arsdigita.docrepo.Repository";
// pdl constants
private static final String ACTION = "action";
public static final String CONTENT = "content";
public static final String DESCRIPTION = "description";
private static final String DURATION = "duration";
private static final String FOLDER_ID = "folderID";
public static final String IS_FOLDER = "isFolder";
private static final String LAST_MODIFIED_DATE = "lastModifiedDate";
private static final String MIME_TYPE_LABEL = "mimeTypeDescription";
public static final String NAME = "name";
private static final String OBJECT_ID = "objectID";
public static final String PARENT = "parent";
private static final String PARTY_ID = "partyID";
public static final String PATH = "path";
public static final String SIZE = "size";
public static final String TYPE = "mimeType";
private static final String USER_ID = "userID";
private static final String OWNER = "ownerID";
private static final String ROOT = "rootID";
String REPOSITORIES_MOUNTED = "subscribedRepositories";
// MIME type constants
public static final String TEXT_PLAIN = com.arsdigita.mail.Mail.TEXT_PLAIN;
public static final String TEXT_HTML = com.arsdigita.mail.Mail.TEXT_HTML;
private Folder m_root = null;
/** /**
* *
* @return * @return
*/ */
@Override
protected String getBaseDataObjectType() { protected String getBaseDataObjectType() {
return BASE_DATA_OBJECT_TYPE; return BASE_DATA_OBJECT_TYPE;
} }
// pdl constants
private static final String OWNER = "ownerID";
private static final String ROOT = "rootID";
private Folder m_root = null;
/** /**
* Retreives a repository from the database usings its OID. * Retreives a repository from the database usings its OID.
* *
@ -137,6 +161,7 @@ public class Repository extends Application implements Constants {
/** /**
* Grant write permission to the Portal participants. * Grant write permission to the Portal participants.
*/ */
@Override
protected void afterSave() { protected void afterSave() {
super.afterSave(); super.afterSave();

View File

@ -0,0 +1,35 @@
/*
* Copyright (C) 2011 Peter boy (pboy@barkhof.uni-bremen.de
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.docrepo;
import com.arsdigita.bebop.page.BebopApplicationServlet;
import org.apache.log4j.Logger;
/**
*
* @author pb
*/
public class RepositoryServlet extends BebopApplicationServlet {
/** Private logger instance to faciliate debugging procedures */
private static final Logger s_log = Logger.getLogger(RepositoryServlet.class);
}

View File

@ -69,7 +69,7 @@ import javax.servlet.http.HttpServletRequest;
* @version $Id: ResourceImpl.java pboy $ * @version $Id: ResourceImpl.java pboy $
*/ */
public abstract class ResourceImpl extends VersionedACSObject public abstract class ResourceImpl extends VersionedACSObject
implements Resource, Constants { implements Resource {
/** Logger instance for debugging support. */ /** Logger instance for debugging support. */
protected static Logger s_log = Logger.getLogger(ResourceImpl.class); protected static Logger s_log = Logger.getLogger(ResourceImpl.class);
@ -200,8 +200,8 @@ public abstract class ResourceImpl extends VersionedACSObject
* sufficient to update the path only when the name changes, but * sufficient to update the path only when the name changes, but
* the current implementation is conservative about path updates. * the current implementation is conservative about path updates.
*/ */
final boolean pathChanged = final boolean pathChanged = isPropertyModified(Repository.PARENT)
isPropertyModified(PARENT) || isPropertyModified(NAME); || isPropertyModified(Repository.NAME);
if (pathChanged) { if (pathChanged) {
String oldPath = null; String oldPath = null;
@ -332,19 +332,19 @@ public abstract class ResourceImpl extends VersionedACSObject
public String getName() { public String getName() {
return (String) get(NAME); return (String) get(Repository.NAME);
} }
public void setName(String name) { public void setName(String name) {
set(NAME, name); set(Repository.NAME, name);
} }
public String getDescription() { public String getDescription() {
return (String) get(DESCRIPTION); return (String) get(Repository.DESCRIPTION);
} }
public void setDescription(String description) { public void setDescription(String description) {
set(DESCRIPTION, description); set(Repository.DESCRIPTION, description);
} }
public Resource getParent() { public Resource getParent() {
@ -380,12 +380,12 @@ public abstract class ResourceImpl extends VersionedACSObject
} }
public String getPath() { public String getPath() {
String path = (String) get(PATH); String path = (String) get(Repository.PATH);
return path; return path;
} }
private void setPath(String path) { private void setPath(String path) {
set(PATH, path); set(Repository.PATH, path);
} }
public abstract boolean isFolder(); public abstract boolean isFolder();
@ -406,7 +406,7 @@ public abstract class ResourceImpl extends VersionedACSObject
String ids = null; String ids = null;
if (collection.next()) { if (collection.next()) {
ids = (String)collection.get(PATH); ids = (String)collection.get(Repository.PATH);
collection.close(); collection.close();
} else { } else {
// this means that the id is not valid so there is no path // this means that the id is not valid so there is no path
@ -421,16 +421,16 @@ public abstract class ResourceImpl extends VersionedACSObject
collection = SessionManager.getSession().retrieve collection = SessionManager.getSession().retrieve
(BASE_DATA_OBJECT_TYPE); (BASE_DATA_OBJECT_TYPE);
Filter filter = collection.addFilter(PATH + " <= :ancestors"); Filter filter = collection.addFilter(Repository.PATH + " <= :ancestors");
filter.set("ancestors", ids); filter.set("ancestors", ids);
filter = collection.addFilter filter = collection.addFilter
(PATH + " = substr(:path, 1, length(" + PATH +"))"); (Repository.PATH + " = substr(:path, 1, length(" + Repository.PATH +"))");
filter.set("path", ids); filter.set("path", ids);
collection.addOrder(PATH); collection.addOrder(Repository.PATH);
while (collection.next()) { while (collection.next()) {
ancestors.append(SEPARATOR + collection.get(NAME)); ancestors.append(SEPARATOR + collection.get(Repository.NAME));
} }
return ancestors.toString(); return ancestors.toString();
@ -604,12 +604,13 @@ public abstract class ResourceImpl extends VersionedACSObject
*/ */
protected Vector getPropertyNames() { protected Vector getPropertyNames() {
Vector names = new Vector(); Vector names = new Vector();
names.addElement(NAME); names.addElement(Repository.NAME);
names.addElement(DESCRIPTION); names.addElement(Repository.DESCRIPTION);
names.addElement(IS_FOLDER); names.addElement(Repository.IS_FOLDER);
return names; return names;
} }
@Override
public java.util.Date getLastModifiedDate() { public java.util.Date getLastModifiedDate() {
java.util.Date date = (java.util.Date)get("lastModifiedDate"); java.util.Date date = (java.util.Date)get("lastModifiedDate");
return date; return date;
@ -619,6 +620,7 @@ public abstract class ResourceImpl extends VersionedACSObject
set("lastModifiedDate",date); set("lastModifiedDate",date);
} }
@Override
public java.util.Date getCreationDate() { public java.util.Date getCreationDate() {
java.util.Date date = (java.util.Date)get("creationDate"); java.util.Date date = (java.util.Date)get("creationDate");
return date; return date;
@ -628,6 +630,7 @@ public abstract class ResourceImpl extends VersionedACSObject
set("creationDate",date); set("creationDate",date);
} }
@Override
public User getCreationUser() { public User getCreationUser() {
DataObject dobj = (DataObject)get("creationUser"); DataObject dobj = (DataObject)get("creationUser");
if(dobj == null) { if(dobj == null) {
@ -641,6 +644,7 @@ public abstract class ResourceImpl extends VersionedACSObject
set("creationUser", user); set("creationUser", user);
} }
@Override
public User getLastModifiedUser() { public User getLastModifiedUser() {
DataObject dobj = (DataObject)get("lastModifiedUser"); DataObject dobj = (DataObject)get("lastModifiedUser");
if(dobj == null) { if(dobj == null) {
@ -654,6 +658,7 @@ public abstract class ResourceImpl extends VersionedACSObject
set("lastModifiedUser", user); set("lastModifiedUser", user);
} }
@Override
public String getCreationIP() { public String getCreationIP() {
String ip = (String)get("creationIP"); String ip = (String)get("creationIP");
return ip; return ip;
@ -669,6 +674,7 @@ public abstract class ResourceImpl extends VersionedACSObject
set("creationIP",ip); set("creationIP",ip);
} }
@Override
public String getLastModifiedIP() { public String getLastModifiedIP() {
String ip = (String)get("lastModifiedIP"); String ip = (String)get("lastModifiedIP");
return ip; return ip;

View File

@ -269,16 +269,16 @@ class DestinationFolderForm extends Form
int item = 0; int item = 0;
while (collection.next()) { while (collection.next()) {
Filter filter = query.addFilter Filter filter = query.addFilter
(" not " + ResourceImpl.PATH + " like " + (" not " + Repository.PATH + " like " +
":item" + item); ":item" + item);
filter.set("item" + item, filter.set("item" + item,
collection.get(ResourceImpl.PATH)); collection.get(Repository.PATH));
} }
} }
} }
query.addOrder(ResourceImpl.PATH); query.addOrder(Repository.PATH);
query.addOrder(ResourceImpl.NAME); query.addOrder(Repository.NAME);
while (query.next()) { while (query.next()) {
BigDecimal parentID = (BigDecimal) query.get("parentID"); BigDecimal parentID = (BigDecimal) query.get("parentID");

View File

@ -26,11 +26,12 @@ import com.arsdigita.persistence.DataQuery;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.SessionManager; import com.arsdigita.persistence.SessionManager;
import com.arsdigita.util.TypedText; import com.arsdigita.util.TypedText;
import com.arsdigita.web.Application; import com.arsdigita.web.Application;
import java.math.BigDecimal; import java.math.BigDecimal;
import org.apache.log4j.Logger;
/** /**
* Faq class. * Faq class.
* *
@ -39,24 +40,45 @@ import java.math.BigDecimal;
public class Faq extends Application { public class Faq extends Application {
/** Private logger instance for debugging purpose */
private static final Logger log = Logger.getLogger(Faq.class);
// PDL stuff
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.faq.Faq"; "com.arsdigita.faq.Faq";
private static final org.apache.log4j.Logger log = /**
org.apache.log4j.Logger.getLogger(Faq.class); *
* @param oid
* @throws DataObjectNotFoundException
*/
public Faq(OID oid) throws DataObjectNotFoundException { public Faq(OID oid) throws DataObjectNotFoundException {
super(oid); super(oid);
} }
/**
*
* @param key
* @throws DataObjectNotFoundException
*/
public Faq(BigDecimal key) throws DataObjectNotFoundException { public Faq(BigDecimal key) throws DataObjectNotFoundException {
this(new OID(BASE_DATA_OBJECT_TYPE, key)); this(new OID(BASE_DATA_OBJECT_TYPE, key));
} }
/**
*
* @param dataObject
*/
public Faq(DataObject dataObject) { public Faq(DataObject dataObject) {
super(dataObject); super(dataObject);
} }
/**
*
* @return
*/
@Override
protected String getBaseDataObjectType() { protected String getBaseDataObjectType() {
return BASE_DATA_OBJECT_TYPE; return BASE_DATA_OBJECT_TYPE;
} }
@ -65,10 +87,13 @@ public class Faq extends Application {
/** /**
* Use this instead of the constructor to create new Faq objects * Use this instead of the constructor to create new Faq objects
*/ */
public static Faq create(String urlName, String title, public static Faq create(String urlName,
String title,
Application parent) { Application parent) {
return (Faq) Application.createApplication return (Faq) Application.createApplication(BASE_DATA_OBJECT_TYPE,
(BASE_DATA_OBJECT_TYPE, urlName, title, parent); urlName,
title,
parent);
} }
/** /**
@ -160,7 +185,7 @@ public class Faq extends Application {
@Override @Override
public String getServletPath() { public String getServletPath() {
return "faq"; return "/faq";
} }
} }

View File

@ -38,8 +38,10 @@ public class FaqServlet extends BebopApplicationServlet {
private static final Logger s_log = Logger.getLogger(FaqServlet.class); private static final Logger s_log = Logger.getLogger(FaqServlet.class);
@Override
public void init() throws ServletException { public void init() throws ServletException {
super.init(); super.init();
s_log.debug("creating FAQ page");
Page index = buildIndexPage(); Page index = buildIndexPage();
Page admin = buildAdminIndexPage(); Page admin = buildAdminIndexPage();
@ -48,8 +50,8 @@ public class FaqServlet extends BebopApplicationServlet {
put("/index.jsp", index); put("/index.jsp", index);
put("/one.jsp", index); put("/one.jsp", index);
put("admin/", admin); // put("admin", admin);
put("admin/index.jsp", admin); // put("admin/index.jsp", admin);
} }

View File

@ -7,12 +7,12 @@
<!-- Servlets for the faq applications --> <!-- Servlets for the faq applications -->
<servlet> <servlet>
<servlet-name>FAQ</servlet-name> <servlet-name>faq-main</servlet-name>
<servlet-class>com.arsdigita.faq.FaqServlet</servlet-class> <servlet-class>com.arsdigita.faq.FaqServlet</servlet-class>
</servlet> </servlet>
<servlet-mapping> <servlet-mapping>
<servlet-name>FAQ</servlet-name> <servlet-name>faq-main</servlet-name>
<url-pattern>/faq/*</url-pattern> <url-pattern>/faq/*</url-pattern>
</servlet-mapping> </servlet-mapping>

View File

@ -2,5 +2,5 @@
<xsl:stylesheet <xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="../../../../packages/faq/xsl/faq.xsl"/> <xsl:include href="../../../packages/faq/xsl/faq.xsl"/>
</xsl:stylesheet> </xsl:stylesheet>

View File

@ -0,0 +1,735 @@
/*
* Fundamental Styles
* Copied from portalserver
*/
body {
background-color: white;
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
margin: 0;
}
table {
border-spacing: 0;
empty-cells: show;
}
td {
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
vertical-align: top;
}
.main { /* background-color: #ffffff; */ }
.dark { /* background-color: #666666; */ }
.medium { /* background-color: #999999; */ }
.light { /* background-color: #cccccc; */ }
.activeTabColor {
background: #A2E1E1;
}
.inactiveTabColor {
background: #E1E1E1;
}
.dialogTitle {
font-weight: bold;
font-size: 12pt;
}
.messageOfTheDay {
padding-left: 0.4em;
padding-right: 0.4em;
margin-top: 0.4em;
margin-bottom: 0.4em;
border-style: solid;
border-bottom-width: 1px;
border-top-width: 1px;
border-right-width: 1px;
border-left-width: 1px;
border-color: #cccccc;
}
/* We would use a div here, but it triggers a rendering bug. */
table.setInside {
width: 100%;
border-spacing: 0;
}
table.setInside td.setInside {
padding: 6px;
padding-bottom: 0;
}
/*
* Global Header
*
* This is currently a gray stripe at the top of each portal and
* application page. The left side, a context bar, uses the class
* attribute "globalNavigation" and the right uses "globalControl".
*/
table.globalHeader {
background-color: rgb(225,225,225);
font-size: 10pt;
width: 100%;
}
table.globalHeader td {
padding: 6px;
padding-bottom: 7px;
vertical-align: middle;
}
table.globalHeader td.globalLogo {
width: 25px;
height: 25px;
background-image: url(../logo.png);
background-repeat: no-repeat;
}
td.globalNavigation {
color: #3F3F3F;
}
td.globalNavigation a {
color: #3F3F3F;
}
td.global-links {
float: right;
}
td.global-link-icon {
padding: 0 4px 0 10px;
}
td.global-link-icon img {
border: 0;
}
td.global-link a {
color: blue;
text-decoration: none;
}
td.globalNavigation span.contextBarSeparator {
color: #3F3F3F;
font-weight: bold;
}
td.globalNavigation span.immediateContext {
color: #3F3F3F;
font-weight: bold;
}
form.globalSearch {
margin: 0;
border: 0;
padding: 0;
}
td.globalControl {
color: #3F3F3F;
margin: 0;
padding: 0;
padding-right: 6px;
text-align: right;
vertical-align: middle;
font-weight: bold;
}
td.globalControl a,
td.globalControl img {
margin: 0;
padding: 0;
color: #3F3F3F;
vertical-align: middle;
border: 0 none;
text-decoration: none;
}
/*
* Local Header
*
* The header elements right under the blue stripe. These are
* elements logically connected to the current application, not to the
* system in general.
*/
table.localHeader {
width: 100%;
}
table.localHeader td.localTitle {
text-align: left;
font-weight: bold;
font-size: 12pt;
}
table.localHeader td.localControl,
table.localHeader td.localControl a {
text-align: right;
}
/*
* Split Panel
*/
table.splitPanel {
width: 100%;
}
table.splitPanelHeader {
/* Nothing here yet. */
}
td.splitPanelLeft {
width: 25%;
}
td.splitPanelRight {
width: 75%;
}
/*
* Tabs and Header/Body/Footer Separators
*/
table.topRuleNoTabs {
background-color: rgb(162,30,30);
width: 100%;
margin: 0;
margin-bottom: 6px;
border-top: 1px solid black;
padding: 0;
}
table.topRuleUnderTabs {
background-color: rgb(162,30,30);
width: 100%;
margin: 0;
margin-bottom: 6px;
padding: 0;
}
table.bottomRule {
background-color: rgb(162,30,30);
width: 100%;
margin: 0;
margin-top: 6px;
border-bottom: 1px solid black;
padding: 0;
}
table.tabs {
margin: 0;
border-spacing: 0;
}
table.tabs a {
color: black;
text-decoration: none;
white-space: nowrap;
}
table.tabs td {
margin: 0;
border: 0;
padding: 0;
font-weight: bold;
font-size: 10pt;
color: black;
text-decoration: none;
white-space: nowrap;
}
table.tabs td.activeTab {
vertical-align: middle;
background-color: rgb(162,30,30);
border-top: 1px solid black;
color: #FFFFFF;
padding-top: 1px;
}
table.tabs td.inactiveTab {
vertical-align: middle;
background-color: rgb(225,225,225);
border-top: 1px solid black;
border-bottom: 1px solid black;
color: #DDDDDD;
padding-top: 2px;
}
table.tabs td.trimSpace {
border-bottom: 1px solid black;
}
table.tabs td.tabBeginning {
border-left: 1px solid black;
border-top: 1px solid black;
background-color: rgb(162,30,30);
width: 6px;
}
table.tabs td.tabBeginningOff {
border-top: 1px solid black;
border-left: 1px solid black;
border-bottom: 1px solid black;
background-color: rgb(225,225,225);
width: 6px;
}
table.tabs td.tabEnd {
border-top: 1px solid black;
border-right: 1px solid black;
background-color: rgb(162,30,30);
width: 6px;
}
table.tabs td.tabEndOff {
border-right: 1px solid black;
border-top: 1px solid black;
border-bottom: 1px solid black;
background-color: rgb(225,225,225);
width: 6px;
}
/*
* Portals and Portlets
*
* "NW" denotes Narrow and Wide columns, in that order. Other layouts
* will require other CSS rules.
*/
table.portalLayoutNW {
width: 100%;
margin: 0;
padding: 0;
}
table.portalLayoutNW td.narrowColumn {
width: 25%;
}
table.portalLayoutNW td.columnSeparator {
border: 0;
padding: 0;
}
table.portalLayoutNW td.wideColumn {
width: 75%;
}
table.portalLayoutW {
width: 100%;
margin: 0;
padding: 0;
}
table.portalLayoutW td.VeryWideColumn {
width:100%;
}
table.portalLayoutWN {
width: 100%;
margin: 0;
padding: 0;
}
table.portalLayoutWN td.narrowColumn {
width: 25%;
}
table.portalLayoutWN td.columnSeparator {
border: 0;
padding: 0;
}
table.portalLayoutWN td.wideColumn {
width: 75%;
}
table.portalLayoutNWN {
width: 100%;
margin: 0;
padding: 0;
}
table.portalLayoutNWN td.narrowColumnLeft {
width: 25%;
}
table.portalLayoutNWN td.narrowColumnRight {
width: 25%;
}
table.portalLayoutNWN td.columnSeparator {
border: 0;
padding: 0;
}
table.portalLayoutNWN td.wideColumn {
width: 50%;
}
table.portalLayoutNNN {
width: 100%;
margin: 0;
padding: 0;
}
table.portalLayoutNNN td.narrowColumnLeft {
width: 33%;
}
table.portalLayoutNNN td.narrowColumnRight {
width: 33%;
}
table.portalLayoutNNN td.columnSeparator {
border: 0;
padding: 0;
}
table.portalLayoutNNN td.narrowColumnCenter {
width: 33%;
}
table.portlet {
width: 100%;
margin: 0;
margin-bottom: 6px;
padding: 0;
}
table.portlet td.portletHeader {
font-weight: bold;
background: #dddddd;
color: #666666;
padding: 4px;
padding-left: 6px;
vertical-align: middle;
}
table.portlet td.portletIcon {
background: #dddddd;
padding: 4px;
text-align: right;
}
table.portlet td.portletBody {
padding: 6px;
}
/*
* Fancy Tables (for tabular data)
*/
table.fancy {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
border: 1px solid black;
}
table.fancy th {
padding: 4px;
border:0 none;
font-size: 9pt;
text-align: left;
}
table.fancy td {
padding: 4px;
border: 0 none;
font-size: 9pt;
}
table.fancy thead tr {
background-color: #eeeeee;
}
table.fancy thead tr.subheading {
background-color: #93bee2;
}
table.fancy thead tr.subheading td {
text-align: right;
}
table.fancy tbody td.subDivider {
padding: 0;
background-color: #93bee2;
}
table.fancy thead th {
font-weight: bold;
text-align: left;
white-space: nowrap;
}
table.fancy thead th.numeric {
text-align: right;
}
table.fancy thead th.date {
text-align: center;
}
table.fancy thead th.icon {
text-align: center;
}
table.fancy tbody td {
border-top: 1px solid black;
}
table.fancy tbody td.noborder {
border-top: none;
}
table.fancy tbody td.numeric {
text-align: right;
}
table.fancy tbody td.date {
text-align: right;
white-space: nowrap;
}
table.fancy tbody td.icon {
text-align: center;
}
/*
* With is for tables that want to look standard (no lines on the inside) but
* also want to have the really thin line around the outside
*/
table.plainWithBorder {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
border: 1px solid black;
}
/*
* Miscellaneous
*/
select {
font-family: Arial, Helvetica, sans-serif;
font-size: 9pt;
}
tr.rowEven { background-color: #eeeeff; }
th {
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
font-weight: bold;
text-align: left;
vertical-align: bottom;
}
td.panelHeader {
padding-left: 0.4em;
padding-right: 0.4em;
padding-top: 0.1em;
padding-bottom: 0.1em;
vertical-align: middle;
text-align: left;
font-weight: bold;
}
/* styles for section headers */
table.sectionHeader {
border:0 none;
}
table.sectionHeader td {
font-weight:bold;
font-size:12pt;
border:0 none;
white-space:nowrap;
}
table.sectionHeader td.add {
text-align:right;
}
table.sectionHeader td.path {
text-align:right;
font-family:monospace;
font-weight:normal;
font-size:10pt;
}
/* styles for colorpicker */
table.colorband {
border:1px solid black;
}
table.colorband td {
width:20px;
height:20px;
border:1px solid black;
}
/* styles for controlBar */
table.controlBar {
width:100%;
font-size:8pt;
border:0 none;
border-collapse:collapse;
border-spacing:0;
border:1px solid black;
}
table.controlBar td {
font-size:8pt;
border:0 none;
white-space:nowrap;
}
table.controlBar span {
font-size:8pt;
font-weight:bold;
border:0 none;
white-space:nowrap;
}
table.controlBar select {
font-size:8pt;
vertical-align: middle;
}
table.controlBar input {
font-size:8pt;
vertical-align: middle;
}
table.controlBar img {
vertical-align: middle;
}
tbody.controlBar td {
border-top:1px solid black;
}
tbody.controlBar td.numeric {
text-align:right;
padding-right:20px;
}
tbody.controlBar td.date {
text-align:right;
white-space:nowrap;
}
tbody.controlBar td.icon {
text-align:center;
}
/**************Admin style*****************/
body {
margin: 0;
}
div.tabs div, div.tabs table {
position: relative;
}
div.tabs {
margin: 0px 0 4px 0;
}
div.tabs table {
margin-left: 6px;
}
div.tabs table.tab-set {
top: 1px;
border-collapse: collapse;
float: left;
margin-left: 6px;
margin: 0 0 0 4px;
border: 0;
padding: 0;
border-spacing: 0;
font-size: x-small;
}
div.tabs table td {
margin: 0;
border: 0;
padding: 0;
}
div.tabs table td.end {
width: 10px;
}
div.tabs table td.label {
padding: 5px 0 3px 10px;
}
div.tabs table td.current-tab-end {
width: 10px;
}
div.tabs table td.current-tab-label {
padding: 5px 0 3px 10px;
}
/* When selected */
div.tabs table.selected {
z-index: 20;
background: rgb(162,30,30) url(../images/tabbed-pane/tab-selected.png) no-repeat;
}
div.tabs table.tab-set td.current-tab-label {
color: white;
background: rgb(162,30,30) url(../images/tabbed-pane/tab-selected.png) no-repeat;
}
div.tabs table.tab-set td.current-tab-end {
background: url(../images/tabbed-pane/tab-selected-end.png) no-repeat;
}
/* When not selected */
div.tabs table.unselected {
background: rgb(225,225,225) url(../images/tabbed-pane/tab-unselected.png) no-repeat;
}
div.tabs table.tab-set td.label {
color: rgb(63,63,63);
background: rgb(225,225,225) url(../images/tabbed-pane/tab-unselected.png) no-repeat;
}
div.tabs table.tab-set td.end {
background: url(../images/tabbed-pane/tab-unselected-end.png) no-repeat;
}
div.tabs table.tab-set td.tab-spacer {
width: 4px;
}
div.tabs a {
text-decoration: none;
}
div.tabs table.rule {
width: 100%;
clear: left;
background: rgb(162,30,30) url(../images/tabbed-pane/tab-bar.png) repeat-x;
height: 11px;
margin: 0px;
padding: 0px;
}

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -20,18 +20,14 @@
<xsl:output method="html" indent="yes"/> <xsl:output method="html" indent="yes"/>
<xsl:param name="contextPath"/>
<xsl:param name="internal-theme"/> <xsl:param name="internal-theme"/>
<xsl:variable name="assets-dir">/packages/portalserver/www/assets</xsl:variable>
<xsl:variable name="css-dir">/packages/portalserver/www/css</xsl:variable>
<xsl:template match="bebop:page[@class='faq']"> <xsl:template match="bebop:page[@class='faq']">
<html> <html>
<head> <head>
<title><xsl:value-of select="bebop:title"/></title> <title><xsl:value-of select="bebop:title"/></title>
<link href="{$css-dir}/portalserver.css" rel="stylesheet" type="text/css"/> <link href="{$internal-theme}/css/faq.css" rel="stylesheet" type="text/css"/>
<style type="text/css"> <style type="text/css">
BODY { background: white; color: black} BODY { background: white; color: black}
.main {background-color: #ffffff;} .main {background-color: #ffffff;}
@ -163,7 +159,7 @@
<!-- start inactive tab --> <!-- start inactive tab -->
<td> <td>
<table cellpadding="0" cellspacing="0" border="0"> <table cellpadding="0" cellspacing="0" border="0">
<tr height="3"><td><img src="/assets/general/spacer.gif" height="3"/></td></tr> <tr height="3"><td><img src="{$internal-theme}/images/spacer.gif" height="3"/></td></tr>
<tr height="23"> <tr height="23">
<td class="tabBeginningOff"><xsl:text>&#160;&#160;</xsl:text></td> <td class="tabBeginningOff"><xsl:text>&#160;&#160;</xsl:text></td>
<td class="inactiveTab" nowrap="nowrap"><xsl:apply-templates select="bebop:link"/></td> <td class="inactiveTab" nowrap="nowrap"><xsl:apply-templates select="bebop:link"/></td>
@ -245,7 +241,7 @@
</table> </table>
</td> </td>
</tr> </tr>
<tr><td colspan="3" class="inactiveTabColor" height="2"><img src="/assets/general/spacer.gif" height="2"/></td></tr> <tr><td colspan="3" class="inactiveTabColor" height="2"><img src="{$internal-theme}/images/spacer.gif" height="2"/></td></tr>
</xsl:if> </xsl:if>
<tr> <tr>
<td class="splitPanelLeft"> <td class="splitPanelLeft">
@ -253,7 +249,7 @@
<tr><td><xsl:apply-templates select="bebop:cell[2]"/></td></tr> <tr><td><xsl:apply-templates select="bebop:cell[2]"/></td></tr>
</table> </table>
</td> </td>
<td class="inactiveTabColor" width="2"><img src="/assets/general/spacer.gif" width="2"/></td> <td class="inactiveTabColor" width="2"><img src="{$internal-theme}/images/spacer.gif" width="2"/></td>
<td class="splitPanelRight"> <td class="splitPanelRight">
<table width="100%" cellspacing="4" cellpadding="0" border="0"> <table width="100%" cellspacing="4" cellpadding="0" border="0">
<tr><td><xsl:apply-templates select="bebop:cell[3]"/></td></tr> <tr><td><xsl:apply-templates select="bebop:cell[3]"/></td></tr>

View File

@ -71,6 +71,7 @@ public class Forum extends Application {
/** Private logger instance for debugging purpose */ /** Private logger instance for debugging purpose */
private static final Logger s_log = Logger.getLogger(Forum.class); private static final Logger s_log = Logger.getLogger(Forum.class);
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.forum.Forum"; "com.arsdigita.forum.Forum";
public static final String PACKAGE_TYPE = "forum"; public static final String PACKAGE_TYPE = "forum";
@ -995,6 +996,7 @@ public class Forum extends Application {
set(ANONYMOUS_POSTS, new Boolean(allow)); set(ANONYMOUS_POSTS, new Boolean(allow));
} }
@Override
public void setTitle(String title) { public void setTitle(String title) {
String oldTitle = getTitle(); String oldTitle = getTitle();
super.setTitle(title); super.setTitle(title);

View File

@ -112,6 +112,7 @@ public class Loader extends PackageLoader {
//setupInboxAppType(); //TODO: why it is commented out? //setupInboxAppType(); //TODO: why it is commented out?
setupRecentPostingsPortletType(); setupRecentPostingsPortletType();
setupMyForumsPortletType(); setupMyForumsPortletType();
// moved upwards // moved upwards
// setupDigestUser(); // setupDigestUser();
@ -187,6 +188,9 @@ public class Loader extends PackageLoader {
return type; return type;
} }
/**
*
*/
public static PortletType setupMyForumsPortletType() { public static PortletType setupMyForumsPortletType() {
PortletType type = PortletType.createPortletType( PortletType type = PortletType.createPortletType(

View File

@ -443,7 +443,7 @@ table.fancy th {
} }
table.fancy td { table.fancy td {
padding: 4; padding: 4px;
border: 0 none; border: 0 none;
font-size: 9pt; font-size: 9pt;
} }

View File

@ -143,6 +143,7 @@
<ccm:application name="ccm-docmgr"/> <ccm:application name="ccm-docmgr"/>
--> -->
<ccm:application name="ccm-docrepo"/> <ccm:application name="ccm-docrepo"/>
<ccm:application name="ccm-faq"/>
<ccm:application name="ccm-forum"/> <ccm:application name="ccm-forum"/>
<ccm:application name="ccm-forum-categorised"/> <ccm:application name="ccm-forum-categorised"/>
<!-- <!--