diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileCreate.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileCreate.java index 45869ebd5..10be78747 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileCreate.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileCreate.java @@ -41,20 +41,20 @@ import java.util.Date; * @version $Id$ */ public class PublicPersonalProfileCreate extends PageCreate { - + private static final String SELECTED_PERSON = "selectedPerson"; private static final PublicPersonalProfileConfig config = new PublicPersonalProfileConfig(); - + static { config.load(); } - + public PublicPersonalProfileCreate(final ItemSelectionModel itemModel, final CreationSelector parent) { super(itemModel, parent); } - + @Override public void addWidgets() { //super.addWidgets(); @@ -67,19 +67,19 @@ public class PublicPersonalProfileCreate extends PageCreate { add(new Label(type.getLabel())); add(new Label(GlobalizationUtil.globalize("cms.ui.language.field"))); add(new LanguageWidget(LANGUAGE)); - + add(new Label(PublicPersonalProfileGlobalizationUtil.globalize( "publicpersonalprofile.ui.create.select_person"))); ParameterModel ownerModel = new StringParameter(PublicPersonalProfile.OWNER); SingleSelect ownerSelect = new SingleSelect(ownerModel); - ownerSelect.addValidationListener(new NotNullValidationListener()); - + ownerSelect.addValidationListener(new NotNullValidationListener()); + String personType = config.getPersonType(); if ((personType == null) || (personType.isEmpty())) { personType = "com.arsdigita.cms.contenttypes.GenericPerson"; } - + ContentTypeCollection types = ContentType.getAllContentTypes(); types.addFilter(String.format("className = '%s'", personType)); if (types.size() == 0) { @@ -98,7 +98,7 @@ public class PublicPersonalProfileCreate extends PageCreate { getFullName())); } add(ownerSelect); - + if (!ContentSection.getConfig().getHideLaunchDate()) { add(new Label(GlobalizationUtil.globalize( "cms.ui.authoring.page_launch_date"))); @@ -115,64 +115,91 @@ public class PublicPersonalProfileCreate extends PageCreate { add(launchDate); } } - + @Override public void validate(FormSectionEvent fse) throws FormProcessException { Folder folder = m_parent.getFolder(fse.getPageState()); Assert.exists(folder); String id = (String) fse.getFormData().get( PublicPersonalProfile.OWNER); - + if ((id == null) || id.trim().isEmpty()) { fse.getFormData().addError(PublicPersonalProfileGlobalizationUtil. globalize("publicpersonalprofile.ui.person.required")); return; } - + GenericPerson owner = new GenericPerson(new BigDecimal(id)); - + validateNameUniqueness(folder, fse, String.format("%s-profile", GenericPerson.urlSave( owner.getFullName()))); } - + @Override public void process(FormSectionEvent fse) throws FormProcessException { final FormData data = fse.getFormData(); final PageState state = fse.getPageState(); final ContentSection section = m_parent.getContentSection(state); final Folder folder = m_parent.getFolder(state); - + Assert.exists(section, ContentSection.class); - + String id = (String) fse.getFormData().get( PublicPersonalProfile.OWNER); - + GenericPerson owner = new GenericPerson(new BigDecimal(id)); String name = String.format("%s-profile", GenericPerson.urlSave(owner.getFullName())); String title = String.format("%s (Profil)", owner.getFullName()); - + final ContentPage item = createContentPage(state); item.setLanguage((String) data.get(LANGUAGE)); item.setName(name); - item.setTitle(title); + item.setTitle(title); if (!ContentSection.getConfig().getHideLaunchDate()) { item.setLaunchDate((Date) data.get(LAUNCH_DATE)); } - + final ContentBundle bundle = new ContentBundle(item); bundle.setParent(folder); bundle.setContentSection(m_parent.getContentSection(state)); bundle.save(); - + PublicPersonalProfile profile = new PublicPersonalProfile(item.getOID()); profile.setOwner(owner); - profile.setProfileUrl(owner.getSurname().toLowerCase()); + //profile.setProfileUrl(owner.getSurname().toLowerCase()); + profile.setProfileUrl(createProfileUrl(owner)); profile.save(); - + m_parent.editItem(state, item); } + + private String createProfileUrl(final GenericPerson owner) { + String profileUrl = owner.getSurname().toLowerCase(); + int i = 1; + + DataCollection profiles = SessionManager.getSession().retrieve( + PublicPersonalProfile.BASE_DATA_OBJECT_TYPE); + profiles.addFilter(String.format("profileUrl = '%s'", + profileUrl)); + profiles.addFilter(String.format("version = '%s'", ContentItem.DRAFT)); + + while (profiles.size() > 0) { + i++; + + profileUrl = String.format("%s%d", + owner.getSurname().toLowerCase(), + i); + profiles.reset(); + profiles.addFilter(String.format("profileUrl = '%s'", + profileUrl)); + profiles.addFilter( + String.format("version = '%s'", ContentItem.DRAFT)); + } + + return profileUrl; + } } diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfilePropertyForm.java b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfilePropertyForm.java index 492dce616..7656a3991 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfilePropertyForm.java +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfilePropertyForm.java @@ -81,7 +81,8 @@ public class PublicPersonalProfilePropertyForm if ((profile != null) && getSaveCancelSection().getSaveButton().isSelected(state)) { profile.setProfileUrl(((String) data.get( - PublicPersonalProfile.PROFILE_URL)).toLowerCase()); + PublicPersonalProfile.PROFILE_URL)). + toLowerCase()); profile.save(); } @@ -91,24 +92,40 @@ public class PublicPersonalProfilePropertyForm public void validate(FormSectionEvent fse) throws FormProcessException { final PageState state = fse.getPageState(); final FormData data = fse.getFormData(); - - - String profilesUrl = (String) data.get(PublicPersonalProfile.PROFILE_URL); + + + String profilesUrl = + (String) data.get(PublicPersonalProfile.PROFILE_URL); if ((profilesUrl == null) || profilesUrl.isEmpty()) { - data.addError(PublicPersonalProfileGlobalizationUtil.globalize("publicpersonalprofile.ui.profile_url.required")); + data.addError(PublicPersonalProfileGlobalizationUtil.globalize( + "publicpersonalprofile.ui.profile_url.required")); } - - DataCollection profiles = SessionManager.getSession().retrieve(PublicPersonalProfile.BASE_DATA_OBJECT_TYPE); - profiles.addFilter(String.format("profileUrl = '%s'", ((String)data.get(PublicPersonalProfile.PROFILE_URL)).toLowerCase())); + + if ("admin".equalsIgnoreCase(profilesUrl)) { + data.addError(PublicPersonalProfileGlobalizationUtil.globalize( + "publicpersonalprofile.ui.profile_url.reserved")); + } + + DataCollection profiles = SessionManager.getSession().retrieve( + PublicPersonalProfile.BASE_DATA_OBJECT_TYPE); + profiles.addFilter(String.format("profileUrl = '%s'", + ((String) data.get( + PublicPersonalProfile.PROFILE_URL)). + toLowerCase())); profiles.addFilter(String.format("version = '%s'", ContentItem.DRAFT)); if (profiles.size() > 1) { - data.addError(PublicPersonalProfileGlobalizationUtil.globalize("publicpersonalprofile.ui.profile_url.already_in_use")); - } else if(profiles.size() == 1) { + data.addError(PublicPersonalProfileGlobalizationUtil.globalize( + "publicpersonalprofile.ui.profile_url.already_in_use")); + } else if (profiles.size() == 1) { profiles.next(); - PublicPersonalProfile profile = (PublicPersonalProfile) DomainObjectFactory.newInstance(profiles.getDataObject()); - - if (!(profile.getID().equals(itemModel.getSelectedItem(state).getID()))) { - data.addError(PublicPersonalProfileGlobalizationUtil.globalize("publicpersonalprofile.ui.profile_url.already_in_use")); + PublicPersonalProfile profile = + (PublicPersonalProfile) DomainObjectFactory. + newInstance(profiles.getDataObject()); + + if (!(profile.getID().equals( + itemModel.getSelectedItem(state).getID()))) { + data.addError(PublicPersonalProfileGlobalizationUtil.globalize( + "publicpersonalprofile.ui.profile_url.already_in_use")); } } } diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources.properties b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources.properties index 3dcca0a57..54c9499e3 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources.properties +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources.properties @@ -31,3 +31,4 @@ publicpersonalprofile.ui.nav.remove.confirm=Do you really want to remove this na publicpersonalprofile.ui.navitems.delete.confirm=Do you really want to delete this navigation entry? publicpersonalprofile.ui.navitems.up=Up publicpersonalprofile.ui.navitems.down=Down +publicpersonalprofile.ui.profile_url.reserved=The provided URL fragment is a reserved name, and can't be used. diff --git a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources_de.properties b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources_de.properties index c77b7084d..f4fdd3823 100644 --- a/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources_de.properties +++ b/ccm-cms-publicpersonalprofile/src/com/arsdigita/cms/contenttypes/ui/PublicPersonalProfileResources_de.properties @@ -31,3 +31,4 @@ publicpersonalprofile.ui.nav.remove.confirm=Soll dieser Navigationspunkt wirklic publicpersonalprofile.ui.navitems.delete.confirm=Soll dieser Navigationspunkt wirklich entfernt werden? publicpersonalprofile.ui.navitems.up=Hoch publicpersonalprofile.ui.navitems.down=Runter +publicpersonalprofile.ui.profile_url.reserved=Das angegebene URL-Fragment ist ein reservierter Name und kann nicht verwendet werden.