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-94f89814c4dfmaster
|
After Width: | Height: | Size: 254 B |
|
After Width: | Height: | Size: 258 B |
|
After Width: | Height: | Size: 575 B |
|
After Width: | Height: | Size: 238 B |
|
After Width: | Height: | Size: 416 B |
|
|
@ -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>
|
||||
|
|
@ -18,7 +18,6 @@
|
|||
*/
|
||||
package com.arsdigita.docrepo;
|
||||
|
||||
|
||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||
import com.arsdigita.domain.DomainObjectFactory;
|
||||
import com.arsdigita.mimetypes.MimeType;
|
||||
|
|
@ -26,7 +25,6 @@ import com.arsdigita.persistence.DataObject;
|
|||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.persistence.metadata.Property;
|
||||
import com.arsdigita.util.Assert;
|
||||
import org.apache.oro.text.perl.Perl5Util;
|
||||
|
||||
import javax.activation.DataHandler;
|
||||
import javax.activation.FileDataSource;
|
||||
|
|
@ -39,6 +37,9 @@ import java.math.BigDecimal;
|
|||
import java.util.Iterator;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.oro.text.perl.Perl5Util;
|
||||
|
||||
/**
|
||||
* Represents a File in the document manager application.
|
||||
*
|
||||
|
|
@ -46,11 +47,10 @@ import java.util.Vector;
|
|||
* @author Ron Henderson (ron@arsdigita.com)
|
||||
* @version $Id: File.java pboy $
|
||||
*/
|
||||
public class File extends ResourceImpl implements Constants {
|
||||
public class File extends ResourceImpl {
|
||||
|
||||
/** Logger instance for debugging support. */
|
||||
protected static org.apache.log4j.Logger s_log =
|
||||
org.apache.log4j.Logger.getLogger(File.class);
|
||||
protected static Logger s_log = Logger.getLogger(File.class);
|
||||
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
"com.arsdigita.docrepo.File";
|
||||
|
|
@ -152,7 +152,7 @@ public class File extends ResourceImpl implements Constants {
|
|||
*/
|
||||
@Override
|
||||
protected void beforeSave() {
|
||||
set(IS_FOLDER, Boolean.FALSE);
|
||||
set(Repository.IS_FOLDER, Boolean.FALSE);
|
||||
super.beforeSave();
|
||||
}
|
||||
|
||||
|
|
@ -169,7 +169,7 @@ public class File extends ResourceImpl implements Constants {
|
|||
* content type cannot be determined.
|
||||
*/
|
||||
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) {
|
||||
if (isNew()) {
|
||||
set(TYPE, type);
|
||||
set(Repository.TYPE, type);
|
||||
} else {
|
||||
if (!type.equals(getContentType())) {
|
||||
throw new TypeChangeException(getContentType(), type);
|
||||
|
|
@ -258,9 +258,9 @@ public class File extends ResourceImpl implements Constants {
|
|||
final byte[] content = text.getBytes();
|
||||
DocBlobject dblob = new DocBlobject();
|
||||
dblob.setContent(content);
|
||||
set(CONTENT, dblob);
|
||||
set(SIZE, BigDecimal.valueOf(content.length));
|
||||
setContentType(TEXT_PLAIN);
|
||||
set(Repository.CONTENT, dblob);
|
||||
set(Repository.SIZE, BigDecimal.valueOf(content.length));
|
||||
setContentType(Repository.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -318,8 +318,8 @@ public class File extends ResourceImpl implements Constants {
|
|||
byte[] content = os.toByteArray();
|
||||
DocBlobject dblob = new DocBlobject();
|
||||
dblob.setContent(content);
|
||||
set(CONTENT, dblob);
|
||||
set(SIZE, BigDecimal.valueOf(content.length));
|
||||
set(Repository.CONTENT, dblob);
|
||||
set(Repository.SIZE, BigDecimal.valueOf(content.length));
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new ResourceException("error reading content: " + e.getMessage());
|
||||
|
|
@ -333,7 +333,7 @@ public class File extends ResourceImpl implements Constants {
|
|||
* cannot be computed.
|
||||
*/
|
||||
public BigDecimal getSize() {
|
||||
BigDecimal size = (BigDecimal) get(SIZE);
|
||||
BigDecimal size = (BigDecimal) get(Repository.SIZE);
|
||||
if (size != null) {
|
||||
return size;
|
||||
} else {
|
||||
|
|
@ -358,8 +358,8 @@ public class File extends ResourceImpl implements Constants {
|
|||
byte[] content = getRawContent();
|
||||
DocBlobject dblob = new DocBlobject();
|
||||
dblob.setContent(content);
|
||||
dest.set(CONTENT,dblob);
|
||||
dest.set(SIZE, BigDecimal.valueOf(content.length));
|
||||
dest.set(Repository.CONTENT,dblob);
|
||||
dest.set(Repository.SIZE, BigDecimal.valueOf(content.length));
|
||||
dest.save();
|
||||
return dest;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ import java.util.StringTokenizer;
|
|||
* @author Ron Henderson (ron@arsdigita.com)
|
||||
* @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 =
|
||||
"com.arsdigita.docrepo.Folder";
|
||||
|
|
@ -135,7 +135,7 @@ public class Folder extends ResourceImpl implements Constants {
|
|||
if (s_log.isDebugEnabled()) {
|
||||
s_log.debug("folder before save");
|
||||
}
|
||||
set(IS_FOLDER, Boolean.TRUE);
|
||||
set(Repository.IS_FOLDER, Boolean.TRUE);
|
||||
super.beforeSave();
|
||||
}
|
||||
|
||||
|
|
@ -200,7 +200,7 @@ public class Folder extends ResourceImpl implements Constants {
|
|||
public boolean hasResource(String name) {
|
||||
DataAssociation da = (DataAssociation) get("immediateChildren");
|
||||
DomainCollection resources = new DomainCollection(da);
|
||||
resources.addEqualsFilter(NAME, name);
|
||||
resources.addEqualsFilter(Repository.NAME, name);
|
||||
try {
|
||||
return resources.next();
|
||||
} finally {
|
||||
|
|
@ -247,7 +247,7 @@ public class Folder extends ResourceImpl implements Constants {
|
|||
|
||||
String subPath[] = new String[pathElementCount];
|
||||
for (int i = 0; i < pathElementCount; i++) {
|
||||
StringBuffer buf = new StringBuffer();
|
||||
StringBuilder buf = new StringBuilder();
|
||||
for (int j = 0; j <= i; j++) {
|
||||
buf.append(SEPARATOR);
|
||||
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
|
||||
* calling getName().
|
||||
*/
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return getName();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ public class Initializer extends CompoundInitializer {
|
|||
new ACSObjectInstantiator() {
|
||||
@Override
|
||||
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()) {
|
||||
return new Folder(obj);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ import org.apache.log4j.Logger;
|
|||
* @author Ron Henderson (ron@arsdigita.com)
|
||||
*/
|
||||
|
||||
public class Repository extends Application implements Constants {
|
||||
public class Repository extends Application {
|
||||
|
||||
/** Logger instance for debugging purpose. */
|
||||
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 =
|
||||
"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
|
||||
*/
|
||||
@Override
|
||||
protected String getBaseDataObjectType() {
|
||||
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.
|
||||
*
|
||||
|
|
@ -137,6 +161,7 @@ public class Repository extends Application implements Constants {
|
|||
/**
|
||||
* Grant write permission to the Portal participants.
|
||||
*/
|
||||
@Override
|
||||
protected void afterSave() {
|
||||
super.afterSave();
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -69,7 +69,7 @@ import javax.servlet.http.HttpServletRequest;
|
|||
* @version $Id: ResourceImpl.java pboy $
|
||||
*/
|
||||
public abstract class ResourceImpl extends VersionedACSObject
|
||||
implements Resource, Constants {
|
||||
implements Resource {
|
||||
|
||||
/** Logger instance for debugging support. */
|
||||
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
|
||||
* the current implementation is conservative about path updates.
|
||||
*/
|
||||
final boolean pathChanged =
|
||||
isPropertyModified(PARENT) || isPropertyModified(NAME);
|
||||
final boolean pathChanged = isPropertyModified(Repository.PARENT)
|
||||
|| isPropertyModified(Repository.NAME);
|
||||
|
||||
if (pathChanged) {
|
||||
String oldPath = null;
|
||||
|
|
@ -332,19 +332,19 @@ public abstract class ResourceImpl extends VersionedACSObject
|
|||
|
||||
|
||||
public String getName() {
|
||||
return (String) get(NAME);
|
||||
return (String) get(Repository.NAME);
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
set(NAME, name);
|
||||
set(Repository.NAME, name);
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return (String) get(DESCRIPTION);
|
||||
return (String) get(Repository.DESCRIPTION);
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
set(DESCRIPTION, description);
|
||||
set(Repository.DESCRIPTION, description);
|
||||
}
|
||||
|
||||
public Resource getParent() {
|
||||
|
|
@ -380,12 +380,12 @@ public abstract class ResourceImpl extends VersionedACSObject
|
|||
}
|
||||
|
||||
public String getPath() {
|
||||
String path = (String) get(PATH);
|
||||
String path = (String) get(Repository.PATH);
|
||||
return path;
|
||||
}
|
||||
|
||||
private void setPath(String path) {
|
||||
set(PATH, path);
|
||||
set(Repository.PATH, path);
|
||||
}
|
||||
|
||||
public abstract boolean isFolder();
|
||||
|
|
@ -406,7 +406,7 @@ public abstract class ResourceImpl extends VersionedACSObject
|
|||
|
||||
String ids = null;
|
||||
if (collection.next()) {
|
||||
ids = (String)collection.get(PATH);
|
||||
ids = (String)collection.get(Repository.PATH);
|
||||
collection.close();
|
||||
} else {
|
||||
// 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
|
||||
(BASE_DATA_OBJECT_TYPE);
|
||||
Filter filter = collection.addFilter(PATH + " <= :ancestors");
|
||||
Filter filter = collection.addFilter(Repository.PATH + " <= :ancestors");
|
||||
filter.set("ancestors", ids);
|
||||
filter = collection.addFilter
|
||||
(PATH + " = substr(:path, 1, length(" + PATH +"))");
|
||||
(Repository.PATH + " = substr(:path, 1, length(" + Repository.PATH +"))");
|
||||
filter.set("path", ids);
|
||||
|
||||
collection.addOrder(PATH);
|
||||
collection.addOrder(Repository.PATH);
|
||||
|
||||
while (collection.next()) {
|
||||
ancestors.append(SEPARATOR + collection.get(NAME));
|
||||
ancestors.append(SEPARATOR + collection.get(Repository.NAME));
|
||||
}
|
||||
|
||||
return ancestors.toString();
|
||||
|
|
@ -604,12 +604,13 @@ public abstract class ResourceImpl extends VersionedACSObject
|
|||
*/
|
||||
protected Vector getPropertyNames() {
|
||||
Vector names = new Vector();
|
||||
names.addElement(NAME);
|
||||
names.addElement(DESCRIPTION);
|
||||
names.addElement(IS_FOLDER);
|
||||
names.addElement(Repository.NAME);
|
||||
names.addElement(Repository.DESCRIPTION);
|
||||
names.addElement(Repository.IS_FOLDER);
|
||||
return names;
|
||||
}
|
||||
|
||||
@Override
|
||||
public java.util.Date getLastModifiedDate() {
|
||||
java.util.Date date = (java.util.Date)get("lastModifiedDate");
|
||||
return date;
|
||||
|
|
@ -619,6 +620,7 @@ public abstract class ResourceImpl extends VersionedACSObject
|
|||
set("lastModifiedDate",date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public java.util.Date getCreationDate() {
|
||||
java.util.Date date = (java.util.Date)get("creationDate");
|
||||
return date;
|
||||
|
|
@ -628,6 +630,7 @@ public abstract class ResourceImpl extends VersionedACSObject
|
|||
set("creationDate",date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public User getCreationUser() {
|
||||
DataObject dobj = (DataObject)get("creationUser");
|
||||
if(dobj == null) {
|
||||
|
|
@ -641,6 +644,7 @@ public abstract class ResourceImpl extends VersionedACSObject
|
|||
set("creationUser", user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public User getLastModifiedUser() {
|
||||
DataObject dobj = (DataObject)get("lastModifiedUser");
|
||||
if(dobj == null) {
|
||||
|
|
@ -654,6 +658,7 @@ public abstract class ResourceImpl extends VersionedACSObject
|
|||
set("lastModifiedUser", user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCreationIP() {
|
||||
String ip = (String)get("creationIP");
|
||||
return ip;
|
||||
|
|
@ -669,6 +674,7 @@ public abstract class ResourceImpl extends VersionedACSObject
|
|||
set("creationIP",ip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLastModifiedIP() {
|
||||
String ip = (String)get("lastModifiedIP");
|
||||
return ip;
|
||||
|
|
|
|||
|
|
@ -269,16 +269,16 @@ class DestinationFolderForm extends Form
|
|||
int item = 0;
|
||||
while (collection.next()) {
|
||||
Filter filter = query.addFilter
|
||||
(" not " + ResourceImpl.PATH + " like " +
|
||||
(" not " + Repository.PATH + " like " +
|
||||
":item" + item);
|
||||
filter.set("item" + item,
|
||||
collection.get(ResourceImpl.PATH));
|
||||
collection.get(Repository.PATH));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
query.addOrder(ResourceImpl.PATH);
|
||||
query.addOrder(ResourceImpl.NAME);
|
||||
query.addOrder(Repository.PATH);
|
||||
query.addOrder(Repository.NAME);
|
||||
|
||||
while (query.next()) {
|
||||
BigDecimal parentID = (BigDecimal) query.get("parentID");
|
||||
|
|
|
|||
|
|
@ -26,11 +26,12 @@ import com.arsdigita.persistence.DataQuery;
|
|||
import com.arsdigita.persistence.OID;
|
||||
import com.arsdigita.persistence.SessionManager;
|
||||
import com.arsdigita.util.TypedText;
|
||||
|
||||
import com.arsdigita.web.Application;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
* Faq class.
|
||||
*
|
||||
|
|
@ -39,24 +40,45 @@ import java.math.BigDecimal;
|
|||
|
||||
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 =
|
||||
"com.arsdigita.faq.Faq";
|
||||
|
||||
private static final org.apache.log4j.Logger log =
|
||||
org.apache.log4j.Logger.getLogger(Faq.class);
|
||||
"com.arsdigita.faq.Faq";
|
||||
|
||||
/**
|
||||
*
|
||||
* @param oid
|
||||
* @throws DataObjectNotFoundException
|
||||
*/
|
||||
public Faq(OID oid) throws DataObjectNotFoundException {
|
||||
super(oid);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param key
|
||||
* @throws DataObjectNotFoundException
|
||||
*/
|
||||
public Faq(BigDecimal key) throws DataObjectNotFoundException {
|
||||
this(new OID(BASE_DATA_OBJECT_TYPE, key));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param dataObject
|
||||
*/
|
||||
public Faq(DataObject dataObject) {
|
||||
super(dataObject);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
protected String getBaseDataObjectType() {
|
||||
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
|
||||
*/
|
||||
public static Faq create(String urlName, String title,
|
||||
public static Faq create(String urlName,
|
||||
String title,
|
||||
Application parent) {
|
||||
return (Faq) Application.createApplication
|
||||
(BASE_DATA_OBJECT_TYPE, urlName, title, parent);
|
||||
return (Faq) Application.createApplication(BASE_DATA_OBJECT_TYPE,
|
||||
urlName,
|
||||
title,
|
||||
parent);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -160,7 +185,7 @@ public class Faq extends Application {
|
|||
|
||||
@Override
|
||||
public String getServletPath() {
|
||||
return "faq";
|
||||
return "/faq";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,8 +38,10 @@ public class FaqServlet extends BebopApplicationServlet {
|
|||
private static final Logger s_log = Logger.getLogger(FaqServlet.class);
|
||||
|
||||
|
||||
@Override
|
||||
public void init() throws ServletException {
|
||||
super.init();
|
||||
s_log.debug("creating FAQ page");
|
||||
|
||||
Page index = buildIndexPage();
|
||||
Page admin = buildAdminIndexPage();
|
||||
|
|
@ -48,8 +50,8 @@ public class FaqServlet extends BebopApplicationServlet {
|
|||
put("/index.jsp", index);
|
||||
put("/one.jsp", index);
|
||||
|
||||
put("admin/", admin);
|
||||
put("admin/index.jsp", admin);
|
||||
// put("admin", admin);
|
||||
// put("admin/index.jsp", admin);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@
|
|||
<!-- Servlets for the faq applications -->
|
||||
|
||||
<servlet>
|
||||
<servlet-name>FAQ</servlet-name>
|
||||
<servlet-name>faq-main</servlet-name>
|
||||
<servlet-class>com.arsdigita.faq.FaqServlet</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>FAQ</servlet-name>
|
||||
<servlet-name>faq-main</servlet-name>
|
||||
<url-pattern>/faq/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
|
|
@ -2,5 +2,5 @@
|
|||
<xsl:stylesheet
|
||||
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>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
|
@ -20,18 +20,14 @@
|
|||
|
||||
<xsl:output method="html" indent="yes"/>
|
||||
|
||||
<xsl:param name="contextPath"/>
|
||||
<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']">
|
||||
<html>
|
||||
<head>
|
||||
<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">
|
||||
BODY { background: white; color: black}
|
||||
.main {background-color: #ffffff;}
|
||||
|
|
@ -163,7 +159,7 @@
|
|||
<!-- start inactive tab -->
|
||||
<td>
|
||||
<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">
|
||||
<td class="tabBeginningOff"><xsl:text>  </xsl:text></td>
|
||||
<td class="inactiveTab" nowrap="nowrap"><xsl:apply-templates select="bebop:link"/></td>
|
||||
|
|
@ -245,7 +241,7 @@
|
|||
</table>
|
||||
</td>
|
||||
</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>
|
||||
<tr>
|
||||
<td class="splitPanelLeft">
|
||||
|
|
@ -253,7 +249,7 @@
|
|||
<tr><td><xsl:apply-templates select="bebop:cell[2]"/></td></tr>
|
||||
</table>
|
||||
</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">
|
||||
<table width="100%" cellspacing="4" cellpadding="0" border="0">
|
||||
<tr><td><xsl:apply-templates select="bebop:cell[3]"/></td></tr>
|
||||
|
|
@ -71,6 +71,7 @@ public class Forum extends Application {
|
|||
|
||||
/** Private logger instance for debugging purpose */
|
||||
private static final Logger s_log = Logger.getLogger(Forum.class);
|
||||
|
||||
public static final String BASE_DATA_OBJECT_TYPE =
|
||||
"com.arsdigita.forum.Forum";
|
||||
public static final String PACKAGE_TYPE = "forum";
|
||||
|
|
@ -995,6 +996,7 @@ public class Forum extends Application {
|
|||
set(ANONYMOUS_POSTS, new Boolean(allow));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTitle(String title) {
|
||||
String oldTitle = getTitle();
|
||||
super.setTitle(title);
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ public class Loader extends PackageLoader {
|
|||
//setupInboxAppType(); //TODO: why it is commented out?
|
||||
setupRecentPostingsPortletType();
|
||||
setupMyForumsPortletType();
|
||||
|
||||
// moved upwards
|
||||
// setupDigestUser();
|
||||
|
||||
|
|
@ -187,6 +188,9 @@ public class Loader extends PackageLoader {
|
|||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static PortletType setupMyForumsPortletType() {
|
||||
|
||||
PortletType type = PortletType.createPortletType(
|
||||
|
|
|
|||
|
|
@ -443,7 +443,7 @@ table.fancy th {
|
|||
}
|
||||
|
||||
table.fancy td {
|
||||
padding: 4;
|
||||
padding: 4px;
|
||||
border: 0 none;
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -143,6 +143,7 @@
|
|||
<ccm:application name="ccm-docmgr"/>
|
||||
-->
|
||||
<ccm:application name="ccm-docrepo"/>
|
||||
<ccm:application name="ccm-faq"/>
|
||||
<ccm:application name="ccm-forum"/>
|
||||
<ccm:application name="ccm-forum-categorised"/>
|
||||
<!--
|
||||
|
|
|
|||