def test_setting_default_subobjects(self): self.portal_properties.manageSubobjects(['ZopeType0', 'ZopeType1'], ['NyType0', 'NyType1']) fmt = FolderMetaTypes(self.portal.info) self.assertEqual(set(fmt.get_values()), set(['ZopeType0', 'ZopeType1', 'NyType0', 'NyType1'])) self.assertEqual(set(fmt.get_values()), set(self.portal.adt_meta_types))
def test_subobjects_customization(self): # customize one subfolder self.portal.info.subfolder1.manageSubobjects(subobjects=[], ny_subobjects=['Naaya Document']) # change global setting portal_properties = self.portal.getPropertiesTool() portal_properties.manageSubobjects([], ['Naaya Calendar']) fmt0 = FolderMetaTypes(self.portal.info.subfolder0) fmt1 = FolderMetaTypes(self.portal.info.subfolder1) # check self.assertEqual(set(fmt0.get_values()), set(['Naaya Calendar'])) self.assertFalse(fmt0.has_custom_value) self.assertEqual(set(fmt1.get_values()), set(['Naaya Document'])) self.assertTrue(fmt1.has_custom_value)
def test_folders_created_with_default_subobjects(self): for i in range(2): folder = getattr(self.portal.info, 'subfolder' + str(i)) fmt = FolderMetaTypes(folder) self.assertFalse(fmt.has_custom_value) self.assertEqual(set(fmt.get_values()), set(self.portal.adt_meta_types))
def _update(self, portal): to_add = "Naaya Forum" filter_out_folders = ['news', 'events', 'stories'] filter_out_folders_cap = [f.capitalize() for f in filter_out_folders] filter_out_folders.extend(filter_out_folders_cap) self.log.debug('Filtering out folders: %s', filter_out_folders) prop_tool = portal.getPropertiesTool() ny_subobjects = [item for item in prop_tool.getProductsMetaTypes() if item in prop_tool.adt_meta_types] subobjects = [item for item in prop_tool.get_meta_types(1) if item in prop_tool.adt_meta_types] self.log.debug('Found ny_subobjects: %s and subobjects: %s' % (ny_subobjects, subobjects)) if to_add not in ny_subobjects: self.log.debug('Adding %s to ny_subobjects' % to_add) ny_subobjects.append(to_add) prop_tool.manageSubobjects(subobjects, ny_subobjects) ny_folders = [folder for folder in portal.getCatalogedObjectsCheckView(meta_type="Naaya Folder")] filtered_folders = [] for folder in ny_folders: f_splits = folder.absolute_url(1).split('/') for fs in f_splits: if fs in filter_out_folders: break else: filtered_folders.append(folder) ny_folders = filtered_folders i, j = 0, 0 for folder in ny_folders: meta_types = FolderMetaTypes(folder) f_mt = meta_types.get_values() if to_add not in f_mt: meta_types.add(to_add) i+=1 self.log.debug('Updated folder %s' % folder.absolute_url(1)) else: j+=1 self.log.debug('Skipped folder %s' % folder.absolute_url(1)) self.log.debug('Updated %s folders | Skipped %s folders | Total %s folders' % (i, j, i+j)) return True
def _update(self, portal): to_add = "Naaya Forum" filter_out_folders = ["news", "events", "stories"] filter_out_folders_cap = [f.capitalize() for f in filter_out_folders] filter_out_folders.extend(filter_out_folders_cap) self.log.debug("Filtering out folders: %s", filter_out_folders) prop_tool = portal.getPropertiesTool() ny_subobjects = [item for item in prop_tool.getProductsMetaTypes() if item in prop_tool.adt_meta_types] subobjects = [item for item in prop_tool.get_meta_types(1) if item in prop_tool.adt_meta_types] self.log.debug("Found ny_subobjects: %s and subobjects: %s" % (ny_subobjects, subobjects)) if to_add not in ny_subobjects: self.log.debug("Adding %s to ny_subobjects" % to_add) ny_subobjects.append(to_add) prop_tool.manageSubobjects(subobjects, ny_subobjects) ny_folders = [folder for folder in portal.getCatalogedObjectsCheckView(meta_type="Naaya Folder")] filtered_folders = [] for folder in ny_folders: f_splits = folder.absolute_url(1).split("/") for fs in f_splits: if fs in filter_out_folders: break else: filtered_folders.append(folder) ny_folders = filtered_folders i, j = 0, 0 for folder in ny_folders: meta_types = FolderMetaTypes(folder) f_mt = meta_types.get_values() if to_add not in f_mt: meta_types.add(to_add) i += 1 self.log.debug("Updated folder %s" % folder.absolute_url(1)) else: j += 1 self.log.debug("Skipped folder %s" % folder.absolute_url(1)) self.log.debug("Updated %s folders | Skipped %s folders | Total %s folders" % (i, j, i + j)) return True
def update_subobjects(self, portal): """ Update allowed subobject in Naaya Folders if Naaya Extended File is present in this list Required arguments: portal -- Naaya Site instance """ # Subobjects meta_types = portal.adt_meta_types[:] changed = False if 'Naaya Extended File' in meta_types: meta_types.remove('Naaya Extended File') changed = True if 'Naaya Blob File' not in meta_types: meta_types.append('Naaya Blob File') changed = True if changed: self.log.debug('Updating portal %s subobjects = %s', portal.absolute_url(1), meta_types) portal.portal_properties.manageSubobjects(subobjects=meta_types) brains = portal.portal_catalog(meta_type='Naaya Folder') for brain in brains: doc = brain.getObject() if not doc: continue self.log.debug("Replacing object %s", doc.absolute_url()) folder_meta_types = FolderMetaTypes(doc) meta_types = folder_meta_types.get_values() changed = False if 'Naaya Extended File' in meta_types: meta_types.remove('Naaya Extended File') changed = True if 'Naaya Blob File' not in meta_types: meta_types.append('Naaya Blob File') changed = True if changed: self.log.debug('Updating folder %s subobjects = %s', doc.absolute_url(1), meta_types) folder_meta_types.set_values(meta_types)
def update_subobjects(self, portal): # Subobjects meta_types = portal.adt_meta_types[:] if 'Naaya File' in meta_types: meta_types.remove('Naaya File') meta_types.append('Naaya Blob File') self.log.debug('Updating portal %s subobjects = %s', portal.absolute_url(1), meta_types) portal.portal_properties.manageSubobjects(subobjects=meta_types) brains = portal.portal_catalog(meta_type='Naaya Folder') for brain in brains: doc = brain.getObject() if not doc: continue folder_meta_types = FolderMetaTypes(doc) meta_types = folder_meta_types.get_values() if 'Naaya File' in meta_types: meta_types.remove('Naaya File') meta_types.append('Naaya Blob File') self.log.debug('Updating folder %s subobjects = %s', doc.absolute_url(1), meta_types) doc.manageSubobjects(subobjects=meta_types)
def addNyInfoFolder(self, id='', REQUEST=None, contributor=None, **kwargs): """ Create an infofolder type of object. """ #process parameters if REQUEST is not None: schema_raw_data = dict(REQUEST.form) else: schema_raw_data = kwargs _lang = schema_raw_data.pop('_lang', schema_raw_data.pop('lang', None)) _folder_meta_types = schema_raw_data.pop('folder_meta_types', '') id = make_id(self, id=id, title=schema_raw_data.get('title', ''), prefix='infofolder') if contributor is None: contributor = self.REQUEST.AUTHENTICATED_USER.getUserName() ob = _create_NyInfoFolder_object(self, id, contributor) ob.info_type = 'enterprises' ob.set_categories() _releasedate = DateTime() form_errors = ob.process_submitted_form(schema_raw_data, _lang, _override_releasedate=_releasedate) if form_errors: if REQUEST is None: raise ValueError(form_errors.popitem()[1]) # pick a random error else: import transaction transaction.abort( ) # because we already called _crete_NyZzz_object ob._prepare_error_response(REQUEST, form_errors, schema_raw_data) return REQUEST.RESPONSE.redirect('%s/infofolder_add_html' % self.absolute_url()) return site = self.getSite() #extra settings ob_meta_types = FolderMetaTypes(ob) parent_meta_types = FolderMetaTypes(self) if _folder_meta_types == '': #inherit allowd meta types from the parent if self.meta_type == site.meta_type: ob_meta_types.set_values(site.adt_meta_types) else: if not parent_meta_types.has_custom_value: # if parent uses defaults, so should `ob` ob_meta_types.set_values(None) else: ob_meta_types.set_values(parent_meta_types.get_values()) else: ob_meta_types.set_values(self.utConvertToList(_folder_meta_types)) if self.glCheckPermissionPublishObjects(): approved, approved_by = 1, self.REQUEST.AUTHENTICATED_USER.getUserName( ) else: approved, approved_by = 0, None ob.approveThis(approved, approved_by) ob.submitThis() #Process extra fields (categories, extra_properties) if ob.discussion: ob.open_for_comments() self.recatalogNyObject(ob) notify(NyContentObjectAddEvent(ob, contributor, schema_raw_data)) #log post date auth_tool = self.getAuthenticationTool() auth_tool.changeLastPost(contributor) #redirect if case if REQUEST is not None: #l_referer = REQUEST['HTTP_REFERER'].split('/')[-1] #if l_referer == 'infofolder_manage_add' or l_referer.find('infofolder_manage_add') != -1: #return self.manage_main(self, REQUEST, update_menu=1) #elif l_referer == 'infofolder_add_html': #self.setSession('referer', self.absolute_url()) #return ob.object_submitted_message(REQUEST) #REQUEST.RESPONSE.redirect('%s/messages_html' % self.absolute_url()) REQUEST.RESPONSE.redirect('%s/%s/edit_html' % (self.absolute_url(), id)) return ob.getId()
def addNyInfoFolder(self, id='', REQUEST=None, contributor=None, **kwargs): """ Create an infofolder type of object. """ #process parameters if REQUEST is not None: schema_raw_data = dict(REQUEST.form) else: schema_raw_data = kwargs _lang = schema_raw_data.pop('_lang', schema_raw_data.pop('lang', None)) _folder_meta_types = schema_raw_data.pop('folder_meta_types', '') id = make_id(self, id=id, title=schema_raw_data.get('title', ''), prefix='infofolder') if contributor is None: contributor = self.REQUEST.AUTHENTICATED_USER.getUserName() ob = _create_NyInfoFolder_object(self, id, contributor) ob.info_type = 'enterprises' ob.set_categories() _releasedate = DateTime() form_errors = ob.process_submitted_form(schema_raw_data, _lang, _override_releasedate=_releasedate) if form_errors: if REQUEST is None: raise ValueError(form_errors.popitem()[1]) # pick a random error else: import transaction; transaction.abort() # because we already called _crete_NyZzz_object ob._prepare_error_response(REQUEST, form_errors, schema_raw_data) return REQUEST.RESPONSE.redirect('%s/infofolder_add_html' % self.absolute_url()) return site = self.getSite() #extra settings ob_meta_types = FolderMetaTypes(ob) parent_meta_types = FolderMetaTypes(self) if _folder_meta_types == '': #inherit allowd meta types from the parent if self.meta_type == site.meta_type: ob_meta_types.set_values(site.adt_meta_types) else: if not parent_meta_types.has_custom_value: # if parent uses defaults, so should `ob` ob_meta_types.set_values(None) else: ob_meta_types.set_values(parent_meta_types.get_values()) else: ob_meta_types.set_values(self.utConvertToList(_folder_meta_types)) if self.glCheckPermissionPublishObjects(): approved, approved_by = 1, self.REQUEST.AUTHENTICATED_USER.getUserName() else: approved, approved_by = 0, None ob.approveThis(approved, approved_by) ob.submitThis() #Process extra fields (categories, extra_properties) if ob.discussion: ob.open_for_comments() self.recatalogNyObject(ob) notify(NyContentObjectAddEvent(ob, contributor, schema_raw_data)) #log post date auth_tool = self.getAuthenticationTool() auth_tool.changeLastPost(contributor) #redirect if case if REQUEST is not None: #l_referer = REQUEST['HTTP_REFERER'].split('/')[-1] #if l_referer == 'infofolder_manage_add' or l_referer.find('infofolder_manage_add') != -1: #return self.manage_main(self, REQUEST, update_menu=1) #elif l_referer == 'infofolder_add_html': #self.setSession('referer', self.absolute_url()) #return ob.object_submitted_message(REQUEST) #REQUEST.RESPONSE.redirect('%s/messages_html' % self.absolute_url()) REQUEST.RESPONSE.redirect('%s/%s/edit_html' % (self.absolute_url(), id)) return ob.getId()