diff --git a/api/src/main/java/org/sakaiproject/site/api/SiteService.java b/api/src/main/java/org/sakaiproject/site/api/SiteService.java index 1ce65fd..742064c 100644 --- a/api/src/main/java/org/sakaiproject/site/api/SiteService.java +++ b/api/src/main/java/org/sakaiproject/site/api/SiteService.java @@ -416,6 +416,8 @@ public interface SiteService extends EntityProducer * The site id. * @param type * The site type. + * @param adminRealm + * The admin realm to manage this site. * @return The new site object. * @exception IdInvalidException * if the site id is invalid. @@ -427,6 +429,26 @@ public interface SiteService extends EntityProducer Site addSite(String id, String type, String adminRealm) throws IdInvalidException, IdUsedException, PermissionException; /** + * Add a new site. Will be structured just like . + * + * @param id + * The site id. + * @param other + * The site to make this site a structural copy of. + * @param adminRealm + * The admin realm to manage this site. + * @return The new site object. + * @exception IdInvalidException + * if the site id is invalid. + * @exception IdUsedException + * if the site id is already used. + * @exception PermissionException + * if the current user does not have permission to add a site. + */ + Site addSite(String id, Site other, String adminRealm) throws IdInvalidException, IdUsedException, PermissionException; + + + /** * Add a new site. The site will exist with just an id once done, so remove() it if you don't want to keep it. * * @param id diff --git a/api/src/main/java/org/sakaiproject/site/cover/SiteService.java b/api/src/main/java/org/sakaiproject/site/cover/SiteService.java index 98d4c05..6599037 100644 --- a/api/src/main/java/org/sakaiproject/site/cover/SiteService.java +++ b/api/src/main/java/org/sakaiproject/site/cover/SiteService.java @@ -22,6 +22,7 @@ package org.sakaiproject.site.cover; import org.sakaiproject.component.cover.ComponentManager; +import org.sakaiproject.site.api.Site; /** *

@@ -245,6 +246,16 @@ public class SiteService return service.addSite(param0, param1); } + public static org.sakaiproject.site.api.Site addSite(java.lang.String param0, org.sakaiproject.site.api.Site param1, java.lang.String param2) + throws org.sakaiproject.exception.IdInvalidException, org.sakaiproject.exception.IdUsedException, + org.sakaiproject.exception.PermissionException + { + org.sakaiproject.site.api.SiteService service = getInstance(); + if (service == null) return null; + + return service.addSite(param0, param1, param2); + } + public static boolean allowRemoveSite(java.lang.String param0) { org.sakaiproject.site.api.SiteService service = getInstance(); diff --git a/kernel-impl/src/main/java/org/sakaiproject/site/impl/BaseSiteService.java b/kernel-impl/src/main/java/org/sakaiproject/site/impl/BaseSiteService.java index 3f9569b..33c4f3b 100644 --- a/kernel-impl/src/main/java/org/sakaiproject/site/impl/BaseSiteService.java +++ b/kernel-impl/src/main/java/org/sakaiproject/site/impl/BaseSiteService.java @@ -1132,6 +1132,13 @@ public abstract class BaseSiteService implements SiteService, StorageUser */ public Site addSite(String id, Site other) throws IdInvalidException, IdUsedException, PermissionException { + return addSite(id, other, null); + } + /** + * @inheritDoc + */ + public Site addSite(String id, Site other, String adminRealm) throws IdInvalidException, IdUsedException, PermissionException + { // check for a valid site name Validator.checkResourceId(id); @@ -1142,9 +1149,13 @@ public abstract class BaseSiteService implements SiteService, StorageUser { unlock(SECURE_ADD_USER_SITE, siteReference(id)); } - else + else if (adminRealm == null) { unlock(SECURE_ADD_SITE, siteReference(id)); + } + else + { + unlock(SECURE_ADD_SITE_MANAGED, siteReference(id)); } // SAK=12631 @@ -1186,6 +1197,11 @@ public abstract class BaseSiteService implements SiteService, StorageUser ((BaseSite) site).setEvent(SECURE_ADD_SITE); doSave((BaseSite) site, true); + if (adminRealm != null) + { + // Shouldn't have problems setting (would be nice to have a transaction...) + devolvedSakaiSecurity().setAdminRealm(site.getReference(), adminRealm); + } return site; }