def ProcessFormData(self, mr, post_data): """Validate and store the contents of the issues tracker admin page. Args: mr: commonly used info parsed from the request. post_data: HTML form data from the request. Returns: String URL to redirect the user to, or None if response was already sent. """ config = self.services.config.GetProjectConfig(mr.cnxn, mr.project_id) parsed = template_helpers.ParseTemplateRequest(post_data, config) field_helpers.ShiftEnumFieldsIntoLabels(parsed.labels, [], parsed.field_val_strs, [], config) template = self.services.template.GetTemplateByName( mr.cnxn, parsed.name, mr.project_id) allow_edit = permissions.CanEditTemplate(mr.auth.effective_ids, mr.perms, mr.project, template) if not allow_edit: raise permissions.PermissionException( 'User is not allowed edit this issue template.') if 'deletetemplate' in post_data: self.services.template.DeleteIssueTemplateDef( mr.cnxn, mr.project_id, template.template_id) return framework_helpers.FormatAbsoluteURL(mr, urls.ADMIN_TEMPLATES, deleted=1, ts=int(time.time())) (admin_ids, owner_id, component_ids, field_values, phases, approvals) = template_helpers.GetTemplateInfoFromParsed( mr, self.services, parsed, config) if mr.errors.AnyErrors(): field_views = tracker_views.MakeAllFieldValueViews( config, [], [], field_values, {}) prechecked_approvals = template_helpers.GetCheckedApprovalsFromParsed( parsed.approvals_to_phase_idx) self.PleaseCorrect( mr, initial_members_only=ezt.boolean(parsed.members_only), template_name=parsed.name, initial_summary=parsed.summary, initial_must_edit_summary=ezt.boolean( parsed.summary_must_be_edited), initial_content=parsed.content, initial_status=parsed.status, initial_owner=parsed.owner_str, initial_owner_defaults_to_member=ezt.boolean( parsed.owner_defaults_to_member), initial_components=', '.join(parsed.component_paths), initial_component_required=ezt.boolean( parsed.component_required), initial_admins=parsed.admin_str, labels=parsed.labels, fields=[ view for view in field_views if view.field_def.type_name is not 'APPROVAL_TYPE' ], initial_add_approvals=ezt.boolean(parsed.add_approvals), initial_phases=[ tracker_pb2.Phase(name=name) for name in parsed.phase_names ], approvals=[ view for view in field_views if view.field_def.type_name is 'APPROVAL_TYPE' ], prechecked_approvals=prechecked_approvals, required_approval_ids=parsed.required_approval_ids) return labels = [label for label in parsed.labels if label] self.services.template.UpdateIssueTemplateDef( mr.cnxn, mr.project_id, template.template_id, name=parsed.name, content=parsed.content, summary=parsed.summary, summary_must_be_edited=parsed.summary_must_be_edited, status=parsed.status, members_only=parsed.members_only, owner_defaults_to_member=parsed.owner_defaults_to_member, component_required=parsed.component_required, owner_id=owner_id, labels=labels, component_ids=component_ids, admin_ids=admin_ids, field_values=field_values, phases=phases, approval_values=approvals) return framework_helpers.FormatAbsoluteURL(mr, urls.TEMPLATE_DETAIL, template=template.name, saved=1, ts=int(time.time()))
def GatherPageData(self, mr): """Build up a dictionary of data values to use when rendering the page. Args: mr: commonly used info parsed from the request. Returns: Dict of values used by EZT for rendering the page. """ config = self.services.config.GetProjectConfig(mr.cnxn, mr.project_id) template = self.services.template.GetTemplateByName( mr.cnxn, mr.template_name, mr.project_id) template_view = tracker_views.IssueTemplateView( mr, template, self.services.user, config) with mr.profiler.Phase('making user views'): users_involved = tracker_bizobj.UsersInvolvedInTemplate(template) users_by_id = framework_views.MakeAllUserViews( mr.cnxn, self.services.user, users_involved) framework_views.RevealAllEmailsToMembers(mr.auth, mr.project, users_by_id) field_name_set = { fd.field_name.lower() for fd in config.field_defs if fd.field_type is tracker_pb2.FieldTypes.ENUM_TYPE and not fd.is_deleted } non_masked_labels = tracker_bizobj.NonMaskedLabels( template.labels, field_name_set) field_views = tracker_views.MakeAllFieldValueViews( config, template.labels, [], template.field_values, users_by_id, phases=template.phases) (prechecked_approvals, required_approval_ids, initial_phases) = template_helpers.GatherApprovalsPageData( template.approval_values, template.phases, config) allow_edit = permissions.CanEditTemplate(mr.auth.effective_ids, mr.perms, mr.project, template) return { 'admin_tab_mode': self._PROCESS_SUBTAB, 'allow_edit': ezt.boolean(allow_edit), 'new_template_form': ezt.boolean(False), 'initial_members_only': template_view.members_only, 'template_name': template_view.name, 'initial_summary': template_view.summary, 'initial_must_edit_summary': template_view.summary_must_be_edited, 'initial_content': template_view.content, 'initial_status': template_view.status, 'initial_owner': template_view.ownername, 'initial_owner_defaults_to_member': template_view.owner_defaults_to_member, 'initial_components': template_view.components, 'initial_component_required': template_view.component_required, 'fields': [ view for view in field_views if view.field_def.type_name is not 'APPROVAL_TYPE' ], 'initial_add_approvals': ezt.boolean(prechecked_approvals), 'initial_phases': initial_phases, 'approvals': [ view for view in field_views if view.field_def.type_name is 'APPROVAL_TYPE' ], 'prechecked_approvals': prechecked_approvals, 'required_approval_ids': required_approval_ids, 'labels': non_masked_labels, 'initial_admins': template_view.admin_names, }
def __init__(self, mr, template, user_service, config): super(IssueTemplateView, self).__init__(template) self.ownername = '' try: self.owner_view = framework_views.MakeUserView( mr.cnxn, user_service, template.owner_id) except exceptions.NoSuchUserException: self.owner_view = None if self.owner_view: self.ownername = self.owner_view.email self.admin_views = list( framework_views.MakeAllUserViews(mr.cnxn, user_service, template.admin_ids).values()) self.admin_names = ', '.join( sorted([admin_view.email for admin_view in self.admin_views])) self.summary_must_be_edited = ezt.boolean( template.summary_must_be_edited) self.members_only = ezt.boolean(template.members_only) self.owner_defaults_to_member = ezt.boolean( template.owner_defaults_to_member) self.component_required = ezt.boolean(template.component_required) component_paths = [] for component_id in template.component_ids: component_paths.append( tracker_bizobj.FindComponentDefByID(component_id, config).path) self.components = ', '.join(component_paths) self.can_view = ezt.boolean( permissions.CanViewTemplate(mr.auth.effective_ids, mr.perms, mr.project, template)) self.can_edit = ezt.boolean( permissions.CanEditTemplate(mr.auth.effective_ids, mr.perms, mr.project, template)) field_name_set = { fd.field_name.lower() for fd in config.field_defs if fd.field_type is tracker_pb2.FieldTypes.ENUM_TYPE and not fd.is_deleted } # TODO(jrobbins): restrictions non_masked_labels = [ lab for lab in template.labels if not tracker_bizobj.LabelIsMaskedByField(lab, field_name_set) ] for i, label in enumerate(non_masked_labels): setattr(self, 'label%d' % i, label) for i in range(len(non_masked_labels), framework_constants.MAX_LABELS): setattr(self, 'label%d' % i, '') field_user_views = MakeFieldUserViews(mr.cnxn, template, user_service) self.field_values = [] for fv in template.field_values: self.field_values.append( template_helpers.EZTItem(field_id=fv.field_id, val=tracker_bizobj.GetFieldValue( fv, field_user_views), idx=len(self.field_values))) self.complete_field_values = MakeAllFieldValueViews( config, template.labels, [], template.field_values, field_user_views) # Templates only display and edit the first value of multi-valued fields, so # expose a single value, if any. # TODO(jrobbins): Fully support multi-valued fields in templates. for idx, field_value_view in enumerate(self.complete_field_values): field_value_view.idx = idx if field_value_view.values: field_value_view.val = field_value_view.values[0].val else: field_value_view.val = None