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;
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 $
|
* @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;
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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: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>  </xsl:text></td>
|
<td class="tabBeginningOff"><xsl:text>  </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>
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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"/>
|
||||||
<!--
|
<!--
|
||||||
|
|
|
||||||