From 2ead4af5dded5448294f18e922f51f38884fd94b Mon Sep 17 00:00:00 2001 From: rasm Date: Thu, 26 Feb 2015 21:46:00 +0100 Subject: [PATCH 1/3] minor fixes --- shareclient/alfresco.py | 26 +++++++++++++++++++++----- shareclient/export-categories.py | 6 ++++-- shareclient/import-site.py | 12 +++++++++--- shareclient/purge-site.py | 5 ++++- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/shareclient/alfresco.py b/shareclient/alfresco.py index 43cdbc0..125f94e 100644 --- a/shareclient/alfresco.py +++ b/shareclient/alfresco.py @@ -252,7 +252,8 @@ def __init__(self, url="http://localhost:8080/share", tenant=None, debug=0, mpli def doRequest(self, method, path, data=None, dataType=None): """Perform a general HTTP request against Share""" reqbase = self.getRequestBase() - req = SurfRequest(url="%s/%s" % (reqbase, path), data=data, method=method) + url = "%s/%s" % (reqbase, path) + req = SurfRequest(url=url, data=data, method=method) if self.debug == 1: print "%s %s/%s" % (method, reqbase, path) if dataType is not None: @@ -348,10 +349,18 @@ def doLogout(self): """Log the current user out of Share using the logout servlet""" try: resp = self.doGet('page/dologout') + resp.close() except SurfRequestError, e: if e.code == 405: # GET Method not allowed, must use POST for newer versions of Alfresco - resp = self.doPost('page/dologout') - resp.close() + try: + resp = self.doPost('page/dologout') + except SurfRequestError, e: + if e.code == 401: # POST Method return not authorized, must use POST for newer versions of Alfresco + print "Logged out" + else: + print "Unknown error on logout, HTTP response: %s error: %s" % e.code, e.description + resp.close() + self._username = None def getSitesContainerName(self): @@ -643,7 +652,14 @@ def importSiteContent(self, siteId, containerId, f, delete=True): if tempContainerData is None: # Create upload container if it doesn't exist folderData = { 'alf_destination': siteNodeRef, 'prop_cm_name': tempContainerName, 'prop_cm_title': tempContainerName, 'prop_cm_description': '' } - createData = self.doJSONPost('proxy/alfresco/api/type/%s/formprocessor' % (urllib.quote(unicode(folderType))), json.dumps(folderData)) + try: + createData = self.doJSONPost('proxy/alfresco/api/type/%s/formprocessor' % (urllib.quote(unicode(folderType))), json.dumps(folderData)) + except SurfRequestError, e: + if e.code == 404: + folderType = 'cm:folder' + createData = self.doJSONPost('proxy/alfresco/api/type/%s/formprocessor' % (urllib.quote(unicode(folderType))), json.dumps(folderData)) + else: + raise e tempContainerData = { 'nodeRef': createData['persistedObject'], 'name' : tempContainerName } # First apply a ruleset to the temp folder @@ -1241,7 +1257,7 @@ def createGroups(self, group, parent=None): def getCategories(self, path): """Fetch a list of child categories at the given location, in a recursive structure""" - categories = self.doJSONGet('proxy/alfresco/slingshot/doclib/categorynode/node/%s' % (urllib.quote(path)))['items'] + categories = self.doJSONGet('proxy/alfresco/slingshot/doclib/categorynode/node/%s' % (urllib.quote(path.encode('utf-8'))))['items'] # Recursively call the function on each child to find child categories for c in categories: c['children'] = self.getCategories('%s/%s' % (path, c['name'])) diff --git a/shareclient/export-categories.py b/shareclient/export-categories.py index 1ab6293..59b5e5a 100644 --- a/shareclient/export-categories.py +++ b/shareclient/export-categories.py @@ -101,8 +101,10 @@ def main(argv): categoryJson = json.dumps(cdata, sort_keys=True, indent=4) print categoryJson else: - if not os.path.exists(os.path.dirname(filename)): - os.makedirs(os.path.dirname(filename)) + directory = os.path.dirname(filename) + if not os.path.exists(directory): + if not '' == directory: + os.makedirs(os.path.dirname(filename)) # Write user data to a file categoryJson = json.dumps(cdata, sort_keys=True, indent=4) diff --git a/shareclient/import-site.py b/shareclient/import-site.py index 9c4d7b1..6d0f666 100644 --- a/shareclient/import-site.py +++ b/shareclient/import-site.py @@ -169,8 +169,10 @@ def main(argv): try: filenamenoext = os.path.splitext(os.path.split(filename)[1])[0] thisdir = os.path.dirname(filename) - if thisdir == "": - thisdir = os.path.dirname(sys.argv[0]) + if thisdir is not "": + thisdir = thisdir + os.sep + """if thisdir == "":""" + """ thisdir = os.path.dirname(sys.argv[0])""" sd = json.loads(open(filename).read()) siteId = str(sd['shortName']) if create_site: @@ -232,7 +234,9 @@ def main(argv): # Import ACP files if importContent: for container in siteContainers: - acpFile = thisdir + os.sep + '%s-%s.acp' % (filenamenoext, container.replace(' ', '_')) + print "Import Content for site container: %s" % container + acpFile = thisdir + '%s-%s.acp' % (filenamenoext, container.replace(' ', '_')) + print "... using file %s" % acpFile if os.path.isfile(acpFile) or uploadContent == False: print "Import %s content" % (container) fileobj = file(acpFile, 'rb') if uploadContent == True else None @@ -244,6 +248,7 @@ def main(argv): # Import site tags if importTags: for container in siteContainers: + print "Import Tags for site container: %s" % container jsonFile = thisdir + os.sep + '%s-%s-tags.json' % (filenamenoext, container.replace(' ', '_')) if os.path.isfile(jsonFile): print "Import %s tags" % (container) @@ -251,6 +256,7 @@ def main(argv): sc.importSiteTags(siteId, items) except alfresco.SurfRequestError, e: + print "Error (%s)" % (e.description) if e.description == "error.duplicateShortName": print "Site with short name '%s' already exists" % (siteId) sys.exit(1) diff --git a/shareclient/purge-site.py b/shareclient/purge-site.py index b4e456e..837c8fd 100644 --- a/shareclient/purge-site.py +++ b/shareclient/purge-site.py @@ -83,9 +83,10 @@ def main(argv): if len(argv) > 0: siteurl = argv[0]; - idm = re.match('^(\w+)$', siteurl) + idm = re.match('^[ ]*[0-9a-zA-Z\-]+[ ]*$', siteurl) urlm = re.match('^(https?\\://[\w\\-\\.\\:]+/share)/page/site/(\w+)/[\w\\-\\./]*$', siteurl) if idm is not None: + sitename = idm.group(0) elif urlm is not None: url = urlm.group(1) @@ -105,6 +106,8 @@ def main(argv): print "Delete site '%s'" % (sitename) try: sc.deleteSite(sitename) + """site shortname is blocked by site in trashcan - https://issues.alfresco.com/jira/browse/ACE-2756""" + print "... Deleted site '%s' - site shortname is locked by site in user trashcan (delete in profile)" % (sitename) except alfresco.SurfRequestError, e: if e.code == 404: print "Site '%s' does not exist" % (sitename) From 9fcc000cbe4c7b5c750bec0e976411601fb7c461 Mon Sep 17 00:00:00 2001 From: rasm Date: Thu, 26 Feb 2015 22:02:25 +0100 Subject: [PATCH 2/3] example import of categories --- .../example-scripts/import-categories.js | 105 ++ .../example-scripts/import-categories.js~ | 1224 +++++++++++++++++ 2 files changed, 1329 insertions(+) create mode 100644 shareclient/example-scripts/import-categories.js create mode 100644 shareclient/example-scripts/import-categories.js~ diff --git a/shareclient/example-scripts/import-categories.js b/shareclient/example-scripts/import-categories.js new file mode 100644 index 0000000..fb7df44 --- /dev/null +++ b/shareclient/example-scripts/import-categories.js @@ -0,0 +1,105 @@ +/* +Example of import of categories using javascript (EX in javascript console) + +It will create categories with the same name, do this before you import your site. + +Remember nodeRef of ctegories are changed on new installation/server. + +Author: Rasmus Melgaard, Novem-IT +Email: rm@novem-it.dk +*/ + +var catNtags = { + "categories": [], + "tags": [] +}; +/* add result of export-categories.py + +var catNtags = { + "categories": [ + { + "children": [ + { +.... + } + + } + ], + "tags": [ + .... + ] +}; */ + +function category(cat) { + logger.log("cat: " + cat.name); + if (cat.children) { + categories(cat.children); + } +} + +function categories(cats) { + for (var i = 0, len=cats.length; i Date: Thu, 26 Feb 2015 22:03:06 +0100 Subject: [PATCH 3/3] rm cache file --- .../example-scripts/import-categories.js~ | 1224 ----------------- 1 file changed, 1224 deletions(-) delete mode 100644 shareclient/example-scripts/import-categories.js~ diff --git a/shareclient/example-scripts/import-categories.js~ b/shareclient/example-scripts/import-categories.js~ deleted file mode 100644 index ba7772d..0000000 --- a/shareclient/example-scripts/import-categories.js~ +++ /dev/null @@ -1,1224 +0,0 @@ -var catNtags = { - "categories": [ - { - "children": [ - { - "children": [ - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "1. Salgsklar - Kampagnemanual", - "nodeRef": "workspace://SpacesStore/29341f35-284b-49cf-a8e5-c26bbab179da", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "2. Klar butik", - "nodeRef": "workspace://SpacesStore/f0bc4a88-b676-4907-9497-4c1a1ecb3167", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "3. Instore", - "nodeRef": "workspace://SpacesStore/28af4489-284d-4abd-8840-ea8d7234b07b", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "4. Koncepter", - "nodeRef": "workspace://SpacesStore/1118a9e2-ab42-4262-83a3-1ca62349664b", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "5. Kontakt til kunder og B2B", - "nodeRef": "workspace://SpacesStore/ccc3c9a1-b895-4eb3-8ced-3a24d8cb8ad9", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "6. Brochure materiale", - "nodeRef": "workspace://SpacesStore/0dac3630-43b2-4737-9533-5200cdfcd53f", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "7. Rabataftaler", - "nodeRef": "workspace://SpacesStore/b9676e6a-0ddf-4b12-b9fe-5603bbbebf79", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "8. B2B", - "nodeRef": "workspace://SpacesStore/d8a37dc2-2add-4f98-b668-9f810567b8fb", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "1. F\u00f8r salg", - "nodeRef": "workspace://SpacesStore/eec53faf-1539-4e06-b77b-cc681b55aeac", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "1. Introduktion til salg", - "nodeRef": "workspace://SpacesStore/8b3d91d1-5e1b-40dd-b24c-3949235d55aa", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "2. Helhedskunden", - "nodeRef": "workspace://SpacesStore/8bb139a2-f063-4bee-90f1-a90e43599fea", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "3. Kundemodtagelse", - "nodeRef": "workspace://SpacesStore/ac5f9ede-2f99-4890-948d-ba591b996881", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "4. Synspr\u00f8ven", - "nodeRef": "workspace://SpacesStore/7a267e43-120f-411f-aa67-a1bf4dba945d", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "5. Pr\u00e6senter l\u00f8sningerne", - "nodeRef": "workspace://SpacesStore/1fe1c94d-40b2-4f5b-94c5-ae9ca01e73bf", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "6. Plus salg", - "nodeRef": "workspace://SpacesStore/11a927f0-e84c-4e8a-b1aa-28f9bf2e6332", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "7. Luk salget", - "nodeRef": "workspace://SpacesStore/acae97f3-9a00-47e3-a1fe-f03af674b880", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "8. Kunde afsked", - "nodeRef": "workspace://SpacesStore/3ca21e19-e6e3-4549-acb6-fbad26e371a7", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "2. Salg", - "nodeRef": "workspace://SpacesStore/311536cf-4681-4fc5-9ff1-88fe254dc309", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "1. Introduktion til efter salg", - "nodeRef": "workspace://SpacesStore/335e493c-bc99-4b00-bdf0-e4d5ebf8c60b", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "2. GAP vision", - "nodeRef": "workspace://SpacesStore/98f2a299-2ad3-4bc1-be8b-44c63fc8a06c", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "3. A", - "nodeRef": "workspace://SpacesStore/18528fac-fb7d-424f-b662-9930fd06737e", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "4. Garanti og reklamation", - "nodeRef": "workspace://SpacesStore/b25ded30-db6f-44ea-9fbb-5fbc62abcaeb", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "5. Forsikringskader", - "nodeRef": "workspace://SpacesStore/060ab1c6-84a4-4a6a-8564-1e6281d5e81d", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "6. X", - "nodeRef": "workspace://SpacesStore/1dd20b37-ef6b-46f1-ba54-a8d22bcc5e21", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "7. Y", - "nodeRef": "workspace://SpacesStore/a6ffef0d-b745-4fb8-9a3a-50d762e377ed", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "8. Z", - "nodeRef": "workspace://SpacesStore/f6b985aa-7db5-4649-b0f8-430a6b31cccd", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "3. Efter salg", - "nodeRef": "workspace://SpacesStore/8f746c1a-e143-44f6-96e7-6bebbb45828b", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "1. Salg og excellent kundeoplevelse", - "nodeRef": "workspace://SpacesStore/7331d322-06f9-444b-a657-897eb917a070", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "1. Velkomst", - "nodeRef": "workspace://SpacesStore/5f4f0a90-1775-4163-a912-3f4c19f3dc15", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "2. Personalepolitik", - "nodeRef": "workspace://SpacesStore/20f84aa8-b86c-40cd-8c17-4218c9719d76", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "3. Ans\u00e6ttelse", - "nodeRef": "workspace://SpacesStore/a2bf8e9f-3545-4849-87f0-7b221a342d6c", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "4. Ans\u00e6ttelsesvilk\u00e5r", - "nodeRef": "workspace://SpacesStore/8998faa8-d39e-47df-8f23-1e5849d53830", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "5. Personalegoder", - "nodeRef": "workspace://SpacesStore/4106ba89-b850-4c01-a236-564e6a14d8aa", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "6. Orlov", - "nodeRef": "workspace://SpacesStore/8d830c88-fcb1-4349-877d-76b304c9ed4b", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "7. Arbejdsmilj\u00f8 og Udvalg", - "nodeRef": "workspace://SpacesStore/51b3ef78-0b31-417e-92da-2167ef4176c9", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "8. Oph\u00f8r ans\u00e6ttelse", - "nodeRef": "workspace://SpacesStore/d9517e3e-a788-4443-9d67-0baba68a6a53", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "1. Personaleh\u00e5ndbog", - "nodeRef": "workspace://SpacesStore/559e72d7-8cc7-4af8-a73f-84fa81c559c0", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "1. Introduktion til uddannelse", - "nodeRef": "workspace://SpacesStore/a29ba487-6ac7-44fc-b275-58b61507ef38", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "2. Synoptik v\u00e6rdier", - "nodeRef": "workspace://SpacesStore/4bf9562a-8a91-4142-aa9a-2d91ef917405", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "3. Butikschef", - "nodeRef": "workspace://SpacesStore/6467f824-62a8-4fdc-81bc-8342bc1d2fcd", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "4. Brillestylist", - "nodeRef": "workspace://SpacesStore/a039baf9-de9b-433b-9e80-8ffa9397ff62", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "5. Talent", - "nodeRef": "workspace://SpacesStore/bcba85ab-b9a8-4c58-bf39-57f76dc086e3", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "6. Optiker", - "nodeRef": "workspace://SpacesStore/5f571c56-f926-432c-ac61-5ebe6bcad13b", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "7. Roller og kompetencer", - "nodeRef": "workspace://SpacesStore/a6146b10-72d8-485e-8999-1eed56dd4e5c", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "8. Xx", - "nodeRef": "workspace://SpacesStore/660ccfa1-793c-4b3e-97d7-378f866651c6", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "2. Uddannelse", - "nodeRef": "workspace://SpacesStore/3d3797d3-3f5d-4127-b63c-536fab908c47", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "1. Introduktion til produkter", - "nodeRef": "workspace://SpacesStore/b7cd51de-c3fb-4fbe-bb91-c59ecfff6587", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "2. Stel", - "nodeRef": "workspace://SpacesStore/1707c633-f19d-4cf4-9049-41f19d936f20", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "3. Sol", - "nodeRef": "workspace://SpacesStore/2734a776-9104-4023-a0ed-801942bb719e", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "4. Glas", - "nodeRef": "workspace://SpacesStore/5f3d7102-9679-4ad7-94d2-7c5441ced6b0", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "5. Kontaktlinser", - "nodeRef": "workspace://SpacesStore/6aac1fbf-c532-429c-ab77-7270b32c95fd", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "6. Kontaktlinse v\u00e6sker", - "nodeRef": "workspace://SpacesStore/4e387bde-0f50-485d-adb7-a264b614b08c", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "7. L\u00e6se- og Sikkerhedsbriller", - "nodeRef": "workspace://SpacesStore/0b845298-cfcd-4aa6-ac80-4520e977fd02", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "8. Andre varer", - "nodeRef": "workspace://SpacesStore/0a37bedd-dbd7-4017-a649-634748caa071", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "3. Produkter", - "nodeRef": "workspace://SpacesStore/af9e3138-cde3-43ef-99aa-8e4e63f262de", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "2. Personaleledelse og uddannelse", - "nodeRef": "workspace://SpacesStore/720406dd-e72a-4085-8b77-18b046eb5b73", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "1. Drift - \u00c5bne og lukke", - "nodeRef": "workspace://SpacesStore/a7f4f3a9-935d-4f66-9a0f-8595851c5478", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "2. Indeklima - Lys, Varme etc", - "nodeRef": "workspace://SpacesStore/6cd1e67e-4fcf-4352-8937-67625822f542", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "3. Reng\u00f8ring", - "nodeRef": "workspace://SpacesStore/eebd47b6-b47a-4ce4-b2b1-5dbf888742c3", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "4. Sikkerhed og Alarm", - "nodeRef": "workspace://SpacesStore/44548301-27da-4ec1-90bd-ce4097b3dc3a", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "5. Optisk udstyr", - "nodeRef": "workspace://SpacesStore/0418b35b-b1ef-4fad-b3b5-0dcd4b0b6d0d", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "6. IT udstyr", - "nodeRef": "workspace://SpacesStore/f93615da-5de2-4caa-a169-efa8efd1225f", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "7. Leverand\u00f8rer (ibistic)", - "nodeRef": "workspace://SpacesStore/f27ec364-361d-4bf4-a3e4-7cd09d64f250", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "8. Personale og Aftale kalender", - "nodeRef": "workspace://SpacesStore/3c98d89c-ed28-47cb-8444-7a744bb73dfd", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "1. Butiksdrift", - "nodeRef": "workspace://SpacesStore/6689a648-b6bb-4990-917a-67cec7922b88", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "1. Introduktion til kassen", - "nodeRef": "workspace://SpacesStore/da1a409e-87f4-4ccf-b8cd-b18cd19cc62c", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "2. Kundedata", - "nodeRef": "workspace://SpacesStore/a0a17645-411f-4051-bbd9-8878d979316d", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "3. Ordre", - "nodeRef": "workspace://SpacesStore/7b4f5440-604a-4911-a014-4c3ef0f0e73a", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "4. Abbonnement", - "nodeRef": "workspace://SpacesStore/866a722f-72bd-4f58-a382-014416f6bf02", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "5. Betaling", - "nodeRef": "workspace://SpacesStore/e9ec6469-9d9b-46d1-9881-15097d914fb0", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "6. Fakturering", - "nodeRef": "workspace://SpacesStore/303820af-62e6-47d3-a644-7c3569457499", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "7. Kasseopg\u00f8relse", - "nodeRef": "workspace://SpacesStore/09ba6d37-5061-40f1-b4f8-8ee1e772abf9", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "8. Xx", - "nodeRef": "workspace://SpacesStore/c247f881-d114-449d-b472-dc27b1f6837c", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "2. Kassen", - "nodeRef": "workspace://SpacesStore/f96f055e-dc6a-43aa-b2b8-fb04f6edce4b", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "1. Introduktion vareh\u00e5ndtering", - "nodeRef": "workspace://SpacesStore/46c17849-8354-44f9-ba76-c721857a51d9", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "2. Sortiment", - "nodeRef": "workspace://SpacesStore/db23f849-8963-4e29-8d25-41c7e96947c7", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "3. Bestilling af varer", - "nodeRef": "workspace://SpacesStore/ee128455-2ae8-4fc5-a11f-f90e69b8007b", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "4. Produktion", - "nodeRef": "workspace://SpacesStore/f4829ecb-b2e4-4925-a99d-8f9b16626e26", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "5. Varemodtagelse", - "nodeRef": "workspace://SpacesStore/5f111090-9057-4ab2-9b65-a3bac91a21d5", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "6. Afskrivninger", - "nodeRef": "workspace://SpacesStore/31650872-9729-4a12-991c-af7162025c07", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "7. Status", - "nodeRef": "workspace://SpacesStore/552d1df6-6ad6-4032-bf94-5e21751d067d", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "8. Transport", - "nodeRef": "workspace://SpacesStore/5677421c-9594-49cd-ac24-81c1032a91a5", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "3. Vareh\u00e5ndtering", - "nodeRef": "workspace://SpacesStore/eecac453-93e3-4ffe-ad9d-31c31cb95c10", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "3. Butiksdrift og administration", - "nodeRef": "workspace://SpacesStore/6143e202-4a6d-4819-b51c-c5b6f96c2bd7", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "Klassificering", - "nodeRef": "workspace://SpacesStore/5adcf7f1-6e24-4e21-9db6-4580b3452cae", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "Finance", - "nodeRef": "workspace://SpacesStore/79351b4c-00da-4e07-a450-92c8c955862d", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "HR", - "nodeRef": "workspace://SpacesStore/8e8bd1a6-a009-4ef4-abed-c5f3fd8b49f0", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "IT", - "nodeRef": "workspace://SpacesStore/e3cc82ac-aa0c-405a-9c48-b20ceb929ef8", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "Marketing", - "nodeRef": "workspace://SpacesStore/b4b79bae-c5fe-4404-af2d-4e47f942e743", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "Retail", - "nodeRef": "workspace://SpacesStore/ca339f46-4b1d-40b0-8fe4-fca9c2e107b3", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [], - "description": "", - "hasChildren": false, - "name": "Supply", - "nodeRef": "workspace://SpacesStore/a50eef72-20ea-4a7f-9ef5-25c665fa44ef", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "OrgUnit", - "nodeRef": "workspace://SpacesStore/594b34f0-2c16-4d59-92a1-fc995a7c9484", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - }, - { - "children": [ - { - "children": [], - "description": "", - "hasChildren": false, - "name": "Retningslinje", - "nodeRef": "workspace://SpacesStore/ec4da342-f9aa-40ad-b583-b12b6fe58f6c", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "description": "", - "hasChildren": true, - "name": "Tags", - "nodeRef": "workspace://SpacesStore/0ff22d63-8ae1-4d08-b12f-273cd2d35a46", - "userAccess": { - "create": true, - "delete": true, - "edit": true - } - } - ], - "tags": [ - "\"retningslinje\"" - ] -}; - -function category(cat) { - logger.log("cat: " + cat.name); - if (cat.children) { - categories(cat.children); - } -} - -function categories(cats) { - for (var i = 0, len=cats.length; i