diff --git a/config/alfresco/messages/site-service.properties b/config/alfresco/messages/site-service.properties index d9d66eeabf..89d1a4f697 100644 --- a/config/alfresco/messages/site-service.properties +++ b/config/alfresco/messages/site-service.properties @@ -9,4 +9,5 @@ site_service.do_not_remove_manager=A site requires at least one site manager. Y site_service.can_not_remove_membership=The current user does not have sufficient permissions to delete membership details of the site {0}. site_service.do_not_change_manager=A site requires at least one site manager. You cannot change the role of {0}, because they are currently the only site manager. site_service.can_not_change_membership=The current user does not have permissions to modify the membership details of the site {0}. -site_service.site_container_not_folder=Site container {0} does not refer to a folder. \ No newline at end of file +site_service.site_container_not_folder=Site container {0} does not refer to a folder. +site_service.invalid_site_type=Site could not be create, because {0} is not a valid site type. \ No newline at end of file diff --git a/source/java/org/alfresco/repo/site/SiteServiceImpl.java b/source/java/org/alfresco/repo/site/SiteServiceImpl.java index 84a7ae8764..363a8bd7d1 100644 --- a/source/java/org/alfresco/repo/site/SiteServiceImpl.java +++ b/source/java/org/alfresco/repo/site/SiteServiceImpl.java @@ -117,6 +117,7 @@ public class SiteServiceImpl implements SiteServiceInternal, SiteModel private static final String MSG_DO_NOT_CHANGE_MGR = "site_service.do_not_change_manager"; private static final String MSG_CAN_NOT_CHANGE_MSHIP="site_service.can_not_change_membership"; private static final String MSG_SITE_CONTAINER_NOT_FOLDER = "site_service.site_container_not_folder"; + private static final String MSG_INVALID_SITE_TYPE = "site_service.invalid_site_type"; /* Services */ private NodeService nodeService; @@ -356,6 +357,23 @@ public class SiteServiceImpl implements SiteServiceInternal, SiteModel final String description, final SiteVisibility visibility) { + return createSite(sitePreset, passedShortName, title, description, visibility, SiteModel.TYPE_SITE); + } + + public SiteInfo createSite(final String sitePreset, + String passedShortName, + final String title, + final String description, + final SiteVisibility visibility, + final QName siteType) + { + // Check that the provided site type is a subtype of TYPE_SITE + if (SiteModel.TYPE_SITE.equals(siteType) == false && + dictionaryService.isSubClass(siteType, TYPE_SITE) == false) + { + throw new SiteServiceException(MSG_INVALID_SITE_TYPE, new Object[]{siteType}); + } + // Remove spaces from shortName final String shortName = passedShortName.replaceAll(" ", ""); @@ -388,9 +406,9 @@ public class SiteServiceImpl implements SiteServiceInternal, SiteModel final NodeRef siteNodeRef = this.nodeService.createNode( siteParent, ContentModel.ASSOC_CONTAINS, - QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, - shortName), SiteModel.TYPE_SITE, properties) - .getChildRef(); + QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, shortName), + siteType, + properties).getChildRef(); // Make the new site a tag scope this.taggingService.addTagScope(siteNodeRef); diff --git a/source/java/org/alfresco/repo/site/script/ScriptSiteService.java b/source/java/org/alfresco/repo/site/script/ScriptSiteService.java index 4f30547b0c..154fb44d37 100644 --- a/source/java/org/alfresco/repo/site/script/ScriptSiteService.java +++ b/source/java/org/alfresco/repo/site/script/ScriptSiteService.java @@ -30,6 +30,7 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; +import org.alfresco.service.namespace.QName; import org.springframework.extensions.surf.util.ParameterCheck; @@ -108,6 +109,28 @@ public class ScriptSiteService extends BaseScopableProcessorExtension return new Site(siteInfo, this.serviceRegistry, this.siteService, getScope()); } + /** + * Create a new site. + *

+ * The site short name will be used to uniquely identify the site so it must be unique. + * + * @param sitePreset site preset + * @param shortName site short name + * @param title site title + * @param description site description + * @param visibility visibility of the site (public|moderated|private) + * @param siteType qname of site type to create + * @return Site the created site + */ + public Site createSite(String sitePreset, String shortName, String title, String description, String visibility, String siteType) + { + ParameterCheck.mandatoryString("visibility", visibility); + SiteVisibility siteVisibility = SiteVisibility.valueOf(visibility); + QName siteTypeQName = QName.createQName(siteType); + SiteInfo siteInfo = this.siteService.createSite(sitePreset, shortName, title, description, siteVisibility, siteTypeQName); + return new Site(siteInfo, this.serviceRegistry, this.siteService, getScope()); + } + /** * This method checks if the currently authenticated user has permission to create sites. * diff --git a/source/java/org/alfresco/service/cmr/site/SiteService.java b/source/java/org/alfresco/service/cmr/site/SiteService.java index 0d98dec00e..0ef94ff9d1 100644 --- a/source/java/org/alfresco/service/cmr/site/SiteService.java +++ b/source/java/org/alfresco/service/cmr/site/SiteService.java @@ -68,6 +68,20 @@ public interface SiteService @Auditable(parameters = {"sitePreset", "shortName"}) SiteInfo createSite(String sitePreset, String shortName, String title, String description, SiteVisibility visibility); + /** + * Create a new site. + * + * @param sitePreset site preset name + * @param shortName site short name, must be unique + * @param title site title + * @param description site description + * @param visibility site visibility (public|moderated|private) + * @param siteType type of site to create, must be a sub-type of st:site + * @return SiteInfo information about the created site + */ + @Auditable(parameters = {"sitePreset", "shortName"}) + SiteInfo createSite(String sitePreset, String shortName, String title, String description, SiteVisibility visibility, QName siteType); + /** * This method checks if the currently authenticated user has permission to create sites. *