def _validateInput(self, form): """ Validate possible form input """ errors = {} if not form.get('title'): errors['title'] = _(u'Title field is required, please provide it.') url = form.get('url') if not url: errors['url'] = _(u'URL field is required, please provide it.') else: context = aq_inner(self.context) portal_state = getMultiAdapter((context, self.request), name=u'plone_portal_state') member = portal_state.member() if (url.startswith('tal:') or url.startswith('python:')) and \ not member.has_permission("collective.portaltabs: Use advanced expressions", portal_state.portal()): errors['url'] = _('adv_expression_permission_denied_msg', default=u'You have no permission to handle expressions like "tal:" or "python:".') if url.find('$')>-1 and not \ member.has_permission("collective.portaltabs: Use advanced expressions", portal_state.portal()): errors['url'] = _('tales_expression_permission_denied_msg', default=u'You have no permission to handle TALES expressions in static links.') return errors
def form_save(self): form = self.request.form visible = form.get('visible') size = len(form.get('id', [])) params = zip(form.get('id', []), form.get('title', []), form.get('url', []), form.get('condition', []) or (' ' * (size-1)).split(' '), ) stop = False for x in params: errors = self._validateInput({'id': x[0], 'title': x[1], 'url': x[2], 'condition': x[3]}) if errors: self.errs[x[0]] = errors stop = True if stop: return None for cat_action_id, title, url, condition in params: category_id, action_id = cat_action_id.split('|') action = self.portal_actions[category_id][action_id] if condition.strip(): sm = getSecurityManager() if not sm.checkPermission(config.PERMISSION_MANAGE_TAB_CONDITION, self.context): raise(Unauthorized("You user can't manage tab visibility expression")) action.manage_changeProperties(title = title, url_expr = _tallify(url), visible = cat_action_id in visible, available_expr=condition) return _(u'Changes saved')
def handleSave(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return self.applyChanges(data) IStatusMessage(self.request).addStatusMessage(_(u"Changes saved"), "info") self.request.response.redirect("@@manage-portaltabs")
def form_upload(self): """Upload an action.xml compatible file""" fin = self.request.form['file'] tree = ElementTree.parse(fin) managed_categories = set(x[0] for x in self.iter_categories()) for el in tree.findall('object'): if el.get('meta_type') != 'CMF Action Category': continue category_id = el.get('name') if category_id not in managed_categories: continue existing_category = self.portal_actions[category_id] for action in el.findall('object'): if action.get('meta_type') != 'CMF Action': continue action_id = action.get('name') props = {} permissions = [] for prop_el in action: name = prop_el.get('name') if name == 'permissions': permissions = [perm.get('value') for perm in prop_el.findall('element')] else: props[name] = prop_el.text or '' if action_id in existing_category: action = self.portal_actions[category_id][action_id] action.manage_changeProperties(title=props['title'], description=props['description'], url_expr=props['url_expr'], icon_expr=props['icon_expr'], available_expr=props['available_expr'], permissions=permissions, visible=(props['visible']=='True'), ) else: action = Action(action_id, title=props['title'], description=props['description'], url_expr=props['url_expr'], icon_expr=props['icon_expr'], available_expr=props['available_expr'], permissions=permissions, visible=(props['visible']=='True')) self.portal_actions[category_id]._setObject(action_id, action) return _(u'File uploaded')
def form_move(self): """Move a tab up or down (means left or right commonly)""" action_id = self.request.get('move') where = self.request.get('where') category_id = self.request.get('action') category = self.portal_actions[category_id] if where == 'top': category.moveObjectsToTop(ids=[action_id]) elif where == 'up': category.moveObjectsUp(ids=[action_id]) elif where == 'down': category.moveObjectsDown(ids=[action_id]) elif where == 'bottom': category.moveObjectsToBottom(ids=[action_id]) else: raise ValueError('Bad arguments for moveTab') return _(u'Tab moved')
def form_add(self): form = self.request.form errors = self._validateInput(form) if errors: self.errs['__add__'] = errors return None category_id = form.get('action') title = form.get('title') action_id = form.get('id') or self.plone_utils.normalizeString(title) if form.get('condition', '').strip(): sm = getSecurityManager() if not sm.checkPermission(config.PERMISSION_MANAGE_TAB_CONDITION, self.context): raise(Unauthorized("You user can't manage tab visibility expression")) action = Action(action_id, title=title, url_expr=_tallify(form.get('url')), available_expr=form.get('condition'), permissions=(permissions.View,)) self.portal_actions[category_id]._setObject(action_id, action) return _(u'Tab added')
def handleCancel(self, action): IStatusMessage(self.request).addStatusMessage(_(u"Edit cancelled"), "info") self.request.response.redirect("%s/%s" % (self.context.absolute_url(), "@@manage-portaltabs"))
def form_delete(self): ids = [self.request.get('Delete')] category_id = self.request.get('action') self.portal_actions[category_id].manage_delObjects(ids=ids) return _(u'Tab deleted')
def confirm_message(self): if not self.confirmMessage: _ = self.translate self.confirmMessage = _(u'confirm_message', default=u'Confirm deletion?') return self.confirmMessage