Erster Teil für notwendigen Änderungen für die zusätzlichen Felder für PublicPersonalProfile (s. Ticket 805).

git-svn-id: https://svn.libreccm.org/ccm/trunk@1470 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2012-01-27 07:06:37 +00:00
parent 8e625d43d8
commit 0ed4ddc860
4 changed files with 183 additions and 26 deletions

View File

@ -5,10 +5,12 @@ import com.arsdigita.cms.*;
object type PublicPersonalProfile extends ContentPage {
String[0..1] profileUrl = ct_public_personal_profiles.profile_url VARCHAR(256);
Boolean[0..1] showPublicationList = ct_public_personal_profiles.show_publication_list BIT;
Boolean[0..1] showProjectList = ct_public_personal_profiles.show_project_list BIT;
String[0..1] profileUrl = ct_public_personal_profiles.profile_url VARCHAR(256);
String[0..1] position = ct_public_personal_profile.position VARCHAR(2048);
String[0..1] researchInterests = ct_public_personal_profiles.research_interests CLOB;
String[0..1] misc = ct_public_personal_profiles.misc CLOB;
reference key (ct_public_personal_profiles.profile_id);
}

View File

@ -34,17 +34,17 @@ import com.arsdigita.util.Assert;
import java.util.List;
/**
* A content type representing a profile (a personal homepage) of a person.
* On the start page of the the profile the contact data and a photo (if any)
* A content type representing a profile (a personal homepage) of a person. On
* the start page of the the profile the contact data and a photo (if any)
* associated with the owner of the profile are shown. Other content items can
* be associated with the profile. They are shown in special navigation. Also,
* there special items for the profile which not backed by a content item.
* Instead, they are backed by a Java class which implements the
* {@link ContentGenerator} interface. A profile can either be shown as
* a standalone page (similar the separate category system) or embedded into
* the normal site.
*
* @author Jens Pelzetter
* there special items for the profile which not backed by a content item.
* Instead, they are backed by a Java class which implements the
* {@link ContentGenerator} interface. A profile can either be shown as a
* standalone page (similar the separate category system) or embedded into the
* normal site.
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublicPersonalProfile
@ -55,8 +55,11 @@ public class PublicPersonalProfile
public static final String OWNER = "owner";
public static final String PROFILE_URL = "profileUrl";
public static final String LINK_LIST_NAME = "publicPersonalProfileNavItems";
public static final String POSITION = "position";
public static final String RESEARCH_INTERESTS = "researchInterests";
public static final String MISC = "misc";
public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.contenttypes.PublicPersonalProfile";
"com.arsdigita.cms.contenttypes.PublicPersonalProfile";
public PublicPersonalProfile() {
this(BASE_DATA_OBJECT_TYPE);
@ -80,8 +83,8 @@ public class PublicPersonalProfile
super(type);
}
/**
*
/**
*
* @return The owner of the profile.
*/
public GenericPerson getOwner() {
@ -102,8 +105,8 @@ public class PublicPersonalProfile
/**
* Sets the owner of the profile.
*
* @param owner
*
* @param owner
*/
public void setOwner(final GenericPerson owner) {
GenericPerson oldOwner;
@ -120,10 +123,10 @@ public class PublicPersonalProfile
}
/**
*
* @return The URL fragment of the profile used to build the URL of the
*
* @return The URL fragment of the profile used to build the URL of the
* profile.
*
*/
public String getProfileUrl() {
return (String) get(PROFILE_URL);
@ -133,11 +136,35 @@ public class PublicPersonalProfile
set(PROFILE_URL, profileUrl);
}
public String getPosition() {
return (String) get(POSITION);
}
public void setPosition(final String position) {
set(POSITION, position);
}
public String getResearchInterests() {
return (String) get(RESEARCH_INTERESTS);
}
public void setResearchInterests(final String researchInterests) {
set(RESEARCH_INTERESTS, researchInterests);
}
public String getMisc() {
return (String) get(MISC);
}
public void setMisc(final String misc) {
set(MISC, misc);
}
/**
* The profile has an extra XML Generator, which is primarily to render
* the items and the navigation of the profile for the embedded view.
*
* @return
* The profile has an extra XML Generator, which is primarily to render the
* items and the navigation of the profile for the embedded view.
*
* @return
*/
@Override
public List<ExtraXMLGenerator> getExtraXMLGenerators() {
@ -149,10 +176,10 @@ public class PublicPersonalProfile
}
public String getPreviewUrl(final PageState state) {
if(config.getEmbedded()) {
if (config.getEmbedded()) {
return null;
} else {
return String.format("/profiles/preview/%s/", getProfileUrl());
return String.format("/profiles/preview/%s/", getProfileUrl());
}
}
}

View File

@ -0,0 +1,74 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.FormSection;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.form.TextArea;
import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.PublicPersonalProfile;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublicPersonalProfilePositionEditForm
extends BasicItemForm
implements FormProcessListener,
FormInitListener {
public PublicPersonalProfilePositionEditForm(
final ItemSelectionModel itemModel) {
super("PublicPersonalProfileEditPosition", itemModel);
}
@Override
protected void addWidgets() {
add(new Label(PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.position")));
final ParameterModel positionParam = new StringParameter(
PublicPersonalProfile.POSITION);
final TextArea position = new TextArea(positionParam);
position.setCols(75);
position.setRows(8);
add(position);
}
@Override
public void init(final FormSectionEvent fse) throws FormProcessException {
final PageState state = fse.getPageState();
final FormData data = fse.getFormData();
final PublicPersonalProfile profile = (PublicPersonalProfile) getItemSelectionModel().
getSelectedItem(state);
data.put(PublicPersonalProfile.POSITION, profile.getPosition());
setVisible(state, true);
}
@Override
public void process(final FormSectionEvent fse)
throws FormProcessException {
final PageState state = fse.getPageState();
final FormData data = fse.getFormData();
final PublicPersonalProfile profile = (PublicPersonalProfile) getItemSelectionModel().
getSelectedItem(state);
if ((profile != null)
&& getSaveCancelSection().getSaveButton().isSelected(state)) {
profile.setPosition((String) data.get(PublicPersonalProfile.POSITION));
profile.save();
}
init(fse);
}
}

View File

@ -0,0 +1,54 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Component;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.PublicPersonalProfile;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublicPersonalProfilePositionStep extends SimpleEditStep {
private String EDIT_POSITION_SHEET_NAME = "editPosition";
public PublicPersonalProfilePositionStep(final ItemSelectionModel itemModel,
final AuthoringKitWizard parent) {
this(itemModel, parent, null);
}
public PublicPersonalProfilePositionStep(final ItemSelectionModel itemModel,
final AuthoringKitWizard parent,
final String prefix) {
super(itemModel, parent, prefix);
final BasicItemForm editPositionForm = new PublicPersonalProfilePositionEditForm(
itemModel);
add(EDIT_POSITION_SHEET_NAME,
(String) PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.position.edit").localize(),
new WorkflowLockedComponentAccess(editPositionForm, itemModel),
editPositionForm.getSaveCancelSection().getCancelButton());
setDisplayComponent(getPublicPersonalProfilePositionSheet(itemModel));
}
public static Component getPublicPersonalProfilePositionSheet(
final ItemSelectionModel itemModel) {
final DomainObjectPropertySheet sheet = new DomainObjectPropertySheet(
itemModel);
sheet.add(PublicPersonalProfileGlobalizationUtil.globalize(
"publicpersonalprofile.ui.position"),
PublicPersonalProfile.POSITION);
return sheet;
}
}