def test_featureletsNotRemoved(self): # there was a bug where edits on the container that were not # from the edit template would cause all of the featurelets to # be uninstalled; this demonstrates that the bug has been # fixed flet_id = 'listen' content_id = 'lists' supporter = IFeatureletSupporter(self.proj) flet = getAdapter(supporter, IFeaturelet, flet_id) supporter.installFeaturelet(flet) self.failUnless(content_id in self.proj.objectIds()) # unset the "don't recurse" flag req = self.proj.REQUEST req.set('flet_recurse_flag', None) zope.event.notify(objectevent.ObjectModifiedEvent(self.proj)) self.failUnless(flet_id in supporter.getInstalledFeatureletIds())
def get_featurelets(project): """ Returns a list of dicts representing the featurelets that are installed into the provided project. """ supporter = IFeatureletSupporter(project) flet_ids = supporter.getInstalledFeatureletIds() getfletdesc = supporter.getFeatureletDescriptor result = [] for id in flet_ids: flet_info = getfletdesc(id) if flet_info is None: # flet registered but non-functional continue menu_item = flet_info['menu_items'][0] result.append( {'name': id, 'url' : menu_item['action'], 'title': menu_item['title'], } ) return result
def addProjectView(self): projectInfoView = self.projectInfoView project = projectInfoView.project proj_home_url = project.absolute_url() self.addMenuItem('Project Home', proj_home_url) if self.mtool.checkPermission(CopyOrMove, project): self.addMenuItem('Contents', '%s/folder_contents' % proj_home_url) self.addMenuItem('Contact', '%s/contact_project_admins' % proj_home_url) supporter = IFeatureletSupporter(projectInfoView.project) for i in supporter.getInstalledFeatureletIds(): desc = supporter.getFeatureletDescriptor(i) self.addMenuItem(desc['menu_items'][0]['title'], '%s/%s' % (proj_home_url, desc['menu_items'][0]['action'])) if self.mtool.checkPermission(ModifyPortalContent, project): self.addMenuItem('Preferences', '%s/edit' % proj_home_url)
def rm_tasktracker_btree_storage(self): """extension method to remove tt storage where self is the portal""" projs_with_taskstorage_removed = [] projs_with_no_taskstorage = [] for pbrain in self.portal_catalog(portal_type='OpenProject'): proj = pbrain.getObject() fs = IFeatureletSupporter(proj) installed_storage_ids = fs.getInstalledFeatureletIds() if 'tasks' in installed_storage_ids: fs.storage.pop('tasks') projs_with_taskstorage_removed.append(proj.id) else: projs_with_no_taskstorage.append(proj.id) out = StringIO() out.write('Projects with no tasktracker btree storage:\n') out.write('\n'.join(projs_with_no_taskstorage)) out.write('\n\n') out.write('Projects with tasktracker btree storage removed:\n') out.write('\n'.join(projs_with_taskstorage_removed)) transaction.get().note('Removed tasktracker btree storage on %d items' % len(projs_with_taskstorage_removed)) return out.getvalue()
def handle_flet_uninstall(project, event=None): supporter = IFeatureletSupporter(project) for flet_id in supporter.getInstalledFeatureletIds(): supporter.removeFeaturelet(flet_id, raise_error=False)