def testCleanUrl(self): """Tests that url can be cleaned. """ field_name = 'url' clean_field = cleaning.clean_url(field_name) # Test that the value of the url field will be returned # if it is a valid url field_value = 'http://exampleabc.com/' self.form.cleaned_data = {field_name: field_value} self.form.fields = {field_name: forms.URLField()} self.assertEqual(clean_field(self.form), field_value) # Test that the value of the url field will be normalized and returned # if it is a valid but not a normalized url field_value = 'exampleabc.com' self.form.cleaned_data = {field_name: field_value} self.form.fields = {field_name: forms.URLField()} self.assertEqual(clean_field(self.form), 'http://'+field_value+'/') # Test that None will be returned if the value of the url field # is an empty string field_value = '' self.form.cleaned_data = {field_name: field_value} self.assertEqual(clean_field(self.form), None) # Test that forms.ValidationError error will be raised # if the value of the url field is not a valid url field_value = 'exampleabc' self.form.cleaned_data = {field_name: field_value} self.assertRaises(forms.ValidationError, clean_field, self.form)
class ProfileForm(forms.ModelForm): """Django form for profile page. """ class Meta: model = GSoCProfile css_prefix = 'gsoc_profile' exclude = ['link_id', 'user', 'scope', 'mentor_for', 'org_admin_for', 'student_info', 'agreed_to_tos_on', 'scope_path', 'status', 'name_on_documents', 'agreed_to_tos'] widgets = forms.choiceWidgets(GSoCProfile, ['res_country', 'ship_country', 'tshirt_style', 'tshirt_size', 'gender']) clean_given_name = cleaning.clean_valid_shipping_chars('given_name') clean_surname = cleaning.clean_valid_shipping_chars('surname') clean_phone = cleaning.clean_phone_number('phone') clean_res_street = cleaning.clean_valid_shipping_chars('res_street') clean_res_street_extra = cleaning.clean_valid_shipping_chars( 'res_street_extra') clean_res_city = cleaning.clean_valid_shipping_chars('res_city') clean_res_state = cleaning.clean_valid_shipping_chars('res_state') clean_res_postalcode = cleaning.clean_valid_shipping_chars( 'res_postalcode') clean_ship_name = cleaning.clean_valid_shipping_chars('ship_name') clean_ship_street = cleaning.clean_valid_shipping_chars('ship_street') clean_ship_street_extra = cleaning.clean_valid_shipping_chars( 'ship_street_extra') clean_ship_city = cleaning.clean_valid_shipping_chars('ship_city') clean_ship_state = cleaning.clean_valid_shipping_chars('ship_state') clean_ship_postalcode = cleaning.clean_valid_shipping_chars( 'ship_postalcode') clean_home_page = cleaning.clean_url('home_page') clean_blog = cleaning.clean_url('blog') clean_photo_url = cleaning.clean_url('photo_url') def clean(self): country = self.cleaned_data.get('res_country') state = self.cleaned_data.get('res_state') if country == 'United States' and (not state or len(state) != 2): self._errors['res_state'] = ["Please use a 2-letter state name"] country = self.cleaned_data.get('ship_country') state = self.cleaned_data.get('ship_state') if country == 'United States' and (not state or len(state) != 2): self._errors['ship_state'] = ["Please use a 2-letter state name"] return self.cleaned_data
class OrgProfileForm(forms.ModelForm): """Django form for the organization profile. """ class Meta: model = GSoCOrganization css_prefix = 'gsoc_org_page' exclude = [ 'status', 'scope', 'scope_path', 'founder', 'founder', 'slots', 'slots_calculated', 'nr_applications', 'nr_mentors', 'scoring_disabled', 'link_id' ] widgets = forms.choiceWidgets(GSoCOrganization, ['contact_country', 'shipping_country']) clean_description = cleaning.clean_html_content('description') clean_contrib_template = cleaning.clean_html_content('contrib_template') clean_facebook = cleaning.clean_url('facebook') clean_twitter = cleaning.clean_url('twitter') clean_blog = cleaning.clean_url('blog') clean_pub_mailing_list = cleaning.clean_mailto('pub_mailing_list') clean_irc_channel = cleaning.clean_irc('irc_channel')
class StudentInfoForm(forms.ModelForm): """Django form for the student profile page. """ class Meta: model = GSoCStudentInfo css_prefix = 'student_info' exclude = ['school', 'school_type', 'number_of_proposals'] widgets = forms.choiceWidgets(GSoCStudentInfo, ['school_country', 'school_type', 'degree']) school_home_page = fields.URLField(required=True) clean_school_home_page = cleaning.clean_url('school_home_page')
def testCleanUrl(self): """Tests that url can be cleaned. """ field_name = 'test_url' clean_field = cleaning.clean_url(field_name) # Test that the value of the url field will be returned # if it is a valid url field_value = 'http://exampleabc.com/' self.form.cleaned_data = {field_name: field_value} self.form.fields = {field_name: forms.URLField()} self.assertEqual(clean_field(self.form), field_value) # Test that None will be returned if the value of the url field # is an empty string field_value = '' self.form.cleaned_data = {field_name: field_value} self.assertEqual(clean_field(self.form), u'') # Test that forms.ValidationError error will be raised # if the value of the url field is not a valid url field_value = 'exampleabc' self.form.cleaned_data = {field_name: field_value} self.assertRaises(forms.ValidationError, clean_field, self.form)
def __init__(self, params={}): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Args: params: This dictionary should be filled with the parameters """ new_params = {} patterns = params.get('extra_django_patterns') if not patterns: patterns = [] if params.get('allow_requests_and_invites'): # add patterns concerning requests and invites patterns += [ (r'^%(url_name)s/(?P<access_type>invite)/%(scope)s$', '%(module_package)s.%(module_name)s.invite', 'Create invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>accept_invite)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.accept_invite', 'Accept invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>process_request)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.process_request', 'Process request'), (r'^%(url_name)s/(?P<access_type>request)/%(scope)s$', '%(module_package)s.%(module_name)s.role_request', 'Create a Request to become %(name)s') ] elif params.get('allow_invites'): # add patterns concerning only invites patterns += [ (r'^%(url_name)s/(?P<access_type>invite)/%(scope)s$', '%(module_package)s.%(module_name)s.invite', 'Create invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>accept_invite)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.accept_invite', 'Accept invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>process_request)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.process_request', 'Process request for %(name)s') ] # add manage pattern patterns += [ (r'^%(url_name)s/(?P<access_type>manage)/%(scope)s/%(lnp)s$', '%(module_package)s.%(module_name)s.manage', 'Manage a %(name)s'), ] new_params['logic'] = soc.logic.models.role.logic new_params['extra_django_patterns'] = patterns new_params['scope_redirect'] = redirects.getInviteRedirect new_params['manage_redirect'] = redirects.getListRolesRedirect new_params['name'] = "Role" new_params['module_name'] = 'role' new_params['create_template'] = 'soc/role/edit.html' new_params['edit_template'] = 'soc/role/edit.html' new_params['create_extra_dynaproperties'] = { 'latitude': forms.fields.FloatField(widget=forms.HiddenInput, required=False), 'longitude': forms.fields.FloatField(widget=forms.HiddenInput, required=False), 'email': forms.fields.EmailField(required=True), 'clean_link_id': cleaning.clean_existing_user('link_id'), 'clean_given_name': cleaning.clean_valid_shipping_chars('given_name'), 'clean_surname': cleaning.clean_valid_shipping_chars('surname'), 'clean_phone': cleaning.clean_phone_number('phone'), 'clean_res_street': cleaning.clean_valid_shipping_chars('res_street'), 'clean_res_street_extra': cleaning.clean_valid_shipping_chars('res_street_extra'), 'clean_res_city': cleaning.clean_valid_shipping_chars('res_city'), 'clean_res_state': cleaning.clean_valid_shipping_chars('res_state'), 'clean_res_postalcode': cleaning.clean_valid_shipping_chars('res_postalcode'), 'clean_ship_name': cleaning.clean_valid_shipping_chars('ship_name'), 'clean_ship_street': cleaning.clean_valid_shipping_chars('ship_street'), 'clean_ship_street_extra': cleaning.clean_valid_shipping_chars('ship_street_extra'), 'clean_ship_city': cleaning.clean_valid_shipping_chars('ship_city'), 'clean_ship_state': cleaning.clean_valid_shipping_chars('ship_state'), 'clean_ship_postalcode': cleaning.clean_valid_shipping_chars('ship_postalcode'), 'clean_home_page': cleaning.clean_url('home_page'), 'clean_blog': cleaning.clean_url('blog'), 'clean_photo_url': cleaning.clean_url('photo_url'), 'clean': cleaning.validate_role(), 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), } new_params['extra_dynaexclude'] = [ 'user', 'status', 'agreed_to_tos_on', 'mentor_for', 'org_admin_for', 'student_info' ] new_params['show_in_roles_overview'] = True # define the fields for the admin list new_params['admin_field_keys'] = [ 'link_id', 'given_name', 'surname', 'document_name', 'email', 'res_street', 'res_street_extra', 'res_city', 'res_state', 'res_country', 'res_postalcode', 'phone', 'recipient_name', 'shipping_street', 'shipping_street_extra', 'shipping_city', 'shipping_state', 'shipping_country', 'shipping_postalcode', 'birth_date', 'tshirt_style', 'tshirt_size', 'gender', 'group_name', 'status', 'account_name', ] new_params['admin_field_names'] = [ 'Link ID', 'Name', 'Surname', 'Name on Documents', 'Email', 'Street Address 1', 'Street Address 2', 'City', 'State', 'Country', 'Postal Code', 'Phone Number', 'Recipient Name', 'Shipping Street Address 1', 'Shipping Street Address 2', 'Shipping City', 'Shipping State', 'Shipping Country', 'Shipping Postal Code', 'Birth Date', 'T-Shirt Style', 'T-Shirt Size', 'Gender', 'Group Name', 'Status', 'Account Name', ] new_params['admin_field_prefetch'] = ['scope', 'user'] new_params['admin_field_extra'] = lambda entity: { 'group_name': entity.scope.name, 'birth_date': entity.birth_date.isoformat(), 'account_name': accounts.normalizeAccount(entity.user.account). email() } new_params['admin_field_hidden'] = ['tshirt_style', 'tshirt_size'] params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params=params) # add manage template template = 'soc/%(module_name)s/manage.html' % self._params self._params['manage_template'] = template # register this View addRole(self)
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.Checker(params) rights['create'] = [('checkHasRoleForScope', host_logic.logic)] rights['edit'] = [('checkIsMyActiveRole', host_logic.logic)] rights['invite'] = [('checkHasRoleForScope', host_logic.logic)] rights['list'] = ['checkIsDeveloper'] rights['accept_invite'] = [ ('checkIsMyRequestWithStatus', [['group_accepted']])] rights['process_request'] = [('checkCanProcessRequest', [[host_logic.logic]])] rights['manage'] = [('checkIsAllowedToManageRole', [host_logic.logic, host_logic.logic])] new_params = {} new_params['rights'] = rights new_params['logic'] = soc.logic.models.host.logic new_params['group_logic'] = sponsor_logic.logic new_params['group_view'] = soc.views.models.sponsor.view new_params['scope_view'] = sponsor_view new_params['name'] = "Program Administrator" new_params['module_name'] = "host" new_params['sidebar_grouping'] = 'Programs' new_params['extra_dynaexclude'] = ['agreed_to_tos'] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'clean_link_id': cleaning.clean_existing_user('link_id'), 'clean_home_page': cleaning.clean_url('home_page'), 'clean_blog': cleaning.clean_url('blog'), 'clean_photo_url': cleaning.clean_url('photo_url')} new_params['allow_invites'] = True new_params['show_in_roles_overview'] = True new_params['public_field_keys'] = ["name", "link_id", "scope_path"] new_params['public_field_names'] = ["Name", "Administrator ID", "Program Owner"] params = dicts.merge(params, new_params) super(View, self).__init__(params=params) # register the role with the group_view self._params['group_view'].registerRole(self._logic.role_name, self) # create and store the special form for invited users updated_fields = { 'link_id': forms.CharField(widget=widgets.ReadOnlyInput(), required=False)} invited_create_form = dynaform.extendDynaForm( dynaform = self._params['create_form'], dynaproperties = updated_fields) self._params['invited_create_form'] = invited_create_form
class ProfileForm(forms.ModelForm): """Django form for profile page. """ TWO_LETTER_STATE_REQ = ['United States', 'Canada'] def __init__(self, bound_field_class, request_data=None, **kwargs): super(ProfileForm, self).__init__(bound_field_class, **kwargs) self.fields['given_name'].group = "2. Contact Info (Private)" self.fields['surname'].group = "2. Contact Info (Private)" self.request_data = request_data self.program = request_data.program if request_data else None public_name = fields.CharField(required=True) clean_public_name = cleaning.clean_html_content('public_name') clean_name_on_documents = cleaning.clean_html_content('name_on_documents') clean_im_network = cleaning.clean_html_content('im_network') clean_im_handle = cleaning.clean_html_content('im_handle') clean_program_knowledge = cleaning.clean_html_content('program_knowledge') clean_email = cleaning.clean_email('email') clean_phone = cleaning.clean_phone_number('phone') def clean_given_name(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['given_name']) def clean_surname(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['surname']) def clean_res_street(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['res_street']) def clean_res_city(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['res_city']) def clean_res_street_extra(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['res_street_extra']) def clean_res_state(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['res_state']) def clean_res_postalcode(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['res_postalcode']) def clean_ship_name(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['ship_name']) def clean_ship_street(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['ship_street']) def clean_ship_street_extra(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['ship_street_extra']) def clean_ship_city(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['ship_city']) def clean_ship_state(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['ship_state']) def clean_ship_postalcode(self): return cleaning.cleanValidAddressCharacters( self.cleaned_data['ship_postalcode']) clean_home_page = cleaning.clean_url('home_page') clean_blog = cleaning.clean_url('blog') clean_photo_url = cleaning.clean_url('photo_url') def clean(self): country = self.cleaned_data.get('res_country') state = self.cleaned_data.get('res_state') if country in self.TWO_LETTER_STATE_REQ and (not state or len(state) != 2): self._errors['res_state'] = [ "Please use a 2-letter state/province name" ] country = self.cleaned_data.get('ship_country') state = self.cleaned_data.get('ship_state') if country in self.TWO_LETTER_STATE_REQ and (not state or len(state) != 2): self._errors['ship_state'] = [ "Please use a 2-letter state/province name" ] return self.cleaned_data
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: original_params: a dict with params for this View """ from soc.views.models import program as program_view rights = access.Checker(params) rights['any_access'] = ['allow'] rights['show'] = ['allow'] rights['create'] = ['checkIsDeveloper'] rights['edit'] = [('checkHasActiveRoleForKeyFieldsAsScope', org_admin_logic.logic,), ('checkGroupIsActiveForLinkId', org_logic.logic)] rights['delete'] = ['checkIsDeveloper'] rights['home'] = ['allow'] rights['public_list'] = ['allow'] rights['apply_mentor'] = ['checkIsUser'] rights['list_requests'] = [('checkHasActiveRoleForKeyFieldsAsScope', org_admin_logic.logic)] rights['list_roles'] = [('checkHasActiveRoleForKeyFieldsAsScope', org_admin_logic.logic)] rights['applicant'] = [('checkIsApplicationAccepted', org_app_logic.logic)] rights['list_proposals'] = [('checkHasAny', [ [('checkHasActiveRoleForKeyFieldsAsScope', [org_admin_logic.logic]), ('checkHasActiveRoleForKeyFieldsAsScope', [mentor_logic.logic])] ])] new_params = {} new_params['logic'] = soc.logic.models.organization.logic new_params['rights'] = rights new_params['scope_view'] = program_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['name'] = "Organization" new_params['url_name'] = "org" new_params['document_prefix'] = "org" new_params['sidebar_grouping'] = 'Organizations' new_params['public_template'] = 'soc/organization/public.html' new_params['list_row'] = 'soc/organization/list/row.html' new_params['list_heading'] = 'soc/organization/list/heading.html' new_params['home_template'] = 'soc/organization/home.html' new_params['application_logic'] = org_app_logic new_params['group_applicant_url'] = True new_params['sans_link_id_public_list'] = True new_params['extra_dynaexclude'] = ['slots', 'slots_calculated', 'nr_applications', 'nr_mentors'] patterns = [] patterns += [ (r'^%(url_name)s/(?P<access_type>apply_mentor)/%(scope)s$', 'soc.views.models.%(module_name)s.apply_mentor', "List of all %(name_plural)s you can apply to"), (r'^%(url_name)s/(?P<access_type>list_proposals)/%(key_fields)s$', 'soc.views.models.%(module_name)s.list_proposals', "List of all Student Proposals for this %(name)s"), ] new_params['extra_django_patterns'] = patterns new_params['create_dynafields'] = [ {'name': 'link_id', 'base': forms.fields.CharField, 'label': 'Organization Link ID', }, ] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'description': forms.fields.CharField( widget=helper.widgets.FullTinyMCE( attrs={'rows': 25, 'cols': 100})), 'contrib_template': forms.fields.CharField( widget=helper.widgets.FullTinyMCE( attrs={'rows': 25, 'cols': 100})), 'clean_description': cleaning.clean_html_content('description'), 'clean_contrib_template': cleaning.clean_html_content( 'contrib_template'), 'clean_ideas': cleaning.clean_url('ideas'), 'clean': cleaning.validate_new_group('link_id', 'scope_path', soc.logic.models.organization, org_app_logic) } new_params['edit_extra_dynaproperties'] = { 'clean': cleaning.clean_refs(new_params, ['home_link_id']) } params = dicts.merge(params, new_params) super(View, self).__init__(params=params) # create and store the special form for applicants updated_fields = { 'link_id': forms.CharField(widget=widgets.ReadOnlyInput(), required=False), 'clean_link_id': cleaning.clean_link_id('link_id') } applicant_create_form = dynaform.extendDynaForm( dynaform = self._params['create_form'], dynaproperties = updated_fields) self._params['applicant_create_form'] = applicant_create_form
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.GSoCChecker(params) rights['any_access'] = ['allow'] rights['show'] = ['allow'] rights['create'] = [('checkSeeded', ['checkHasRoleForScope', host_logic])] rights['edit'] = [('checkIsHostForProgram', [program_logic])] rights['delete'] = ['checkIsDeveloper'] rights['assign_slots'] = [('checkIsHostForProgram', [program_logic])] rights['slots'] = [('checkIsHostForProgram', [program_logic])] rights['show_duplicates'] = [('checkIsHostForProgram', [program_logic]) ] rights['assigned_proposals'] = [('checkIsHostForProgram', [program_logic])] rights['accepted_orgs'] = [('checkIsAfterEvent', [ 'accepted_organization_announced_deadline', '__all__', program_logic ])] rights['list_participants'] = [('checkIsHostForProgram', [program_logic])] rights['list_projects'] = [('checkIsAfterEvent', [ 'accepted_students_announced_deadline', '__all__', program_logic ])] new_params = {} new_params['logic'] = program_logic new_params['rights'] = rights new_params['name'] = "GSoC Program" new_params['module_name'] = "program" new_params['sidebar_grouping'] = 'Programs' new_params['document_prefix'] = 'gsoc_program' new_params['module_package'] = 'soc.modules.gsoc.views.models' new_params['url_prefix'] = 'gsoc' new_params['url_name'] = 'gsoc/program' new_params['extra_dynaexclude'] = ['slots_allocation'] new_params['create_dynafields'] = [ { 'name': 'org_tags', 'base': forms.fields.Field, 'widget': forms.widgets.Textarea, 'label': 'Predefined organization tags', 'required': False, 'group': ugettext('Manage organization tags'), 'help_text': ugettext( 'Enter predefined tags to be used by ' 'organization admins to tag their organizations. Each line ' 'should contain only one tag') }, ] new_params['create_extra_dynaproperties'] = { 'clean_org_tags': gsoc_cleaning.cleanTagsList('org_tags'), 'clean_facebook': cleaning.clean_url('facebook'), 'clean_twitter': cleaning.clean_url('twitter'), 'clean_blogger': cleaning.clean_url('blogger'), 'clean_email': cleaning.clean_empty_field('email'), 'clean_irc': cleaning.clean_empty_field('irc'), } new_params['org_app_logic'] = org_app_logic # used to list the participants in this program new_params['participants_logic'] = [(org_admin_logic, 'program'), (mentor_logic, 'program'), (student_logic, 'scope')] params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params)
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.GSoCChecker(params) rights['any_access'] = ['allow'] rights['create'] = ['checkIsDeveloper'] rights['edit'] = ['checkIsDeveloper'] rights['delete'] = ['checkIsDeveloper'] rights['show'] = ['allow'] rights['list'] = ['checkIsDeveloper'] rights['manage'] = [('checkHasRoleForScope', [org_admin_logic, ['active', 'inactive']]), ('checkStudentProjectHasStatus', [['accepted', 'failed', 'completed', 'withdrawn']])] rights['manage_overview'] = [('checkHasAny', [[ ('checkHasRoleForScope', [org_admin_logic, ['active', 'inactive']]), ('checkHasRoleForScope', [mentor_logic, ['active', 'inactive']]) ]])] # TODO: lack of better name here! rights['st_edit'] = [ 'checkCanEditStudentProjectAsStudent', ('checkStudentProjectHasStatus', [['accepted', 'completed']]) ] rights['overview'] = [('checkIsHostForProgram', [program_logic])] new_params = {} new_params['logic'] = project_logic new_params['rights'] = rights new_params['name'] = 'Student Project' new_params['url_name'] = 'gsoc/student_project' new_params['module_package'] = 'soc.modules.gsoc.views.models' new_params['sidebar_grouping'] = 'Students' new_params['scope_view'] = org_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['no_create_with_key_fields'] = True new_params['extra_dynaexclude'] = [ 'program', 'status', 'link_id', 'mentor', 'additional_mentors', 'student', 'passed_evaluations', 'failed_evaluations' ] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'public_info': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={ 'rows': 25, 'cols': 100 })), 'student_id': forms.CharField(label='Student Link ID', required=True), 'mentor_id': forms.CharField(label='Mentor Link ID', required=True), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_public_info': cleaning.clean_html_content('public_info'), 'clean_student': cleaning.clean_link_id('student'), 'clean_mentor': cleaning.clean_link_id('mentor'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean_feed_url': cleaning.clean_feed_url('feed_url'), 'clean': cleaning.validate_student_project('scope_path', 'mentor_id', 'student_id') } new_params['edit_extra_dynaproperties'] = { 'link_id': forms.CharField(widget=forms.HiddenInput), } patterns = [ (r'^%(url_name)s/(?P<access_type>manage_overview)/%(scope)s$', 'soc.modules.gsoc.views.models.%(module_name)s.manage_overview', 'Overview of %(name_plural)s to Manage for'), (r'^%(url_name)s/(?P<access_type>manage)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.manage', 'Manage %(name)s'), (r'^%(url_name)s/(?P<access_type>st_edit)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.st_edit', 'Edit my %(name)s'), (r'^%(url_name)s/(?P<access_type>overview)/(?P<scope_path>%(ulnp)s)/%(lnp)s$', 'soc.modules.gsoc.views.models.%(module_name)s.overview', 'Overview of all %(name_plural)s for'), ] new_params['extra_django_patterns'] = patterns new_params['edit_template'] = 'soc/student_project/edit.html' new_params['manage_template'] = 'soc/student_project/manage.html' new_params['public_field_prefetch'] = ['mentor', 'student', 'scope'] new_params['public_field_extra'] = lambda entity: { 'student': entity.student.name(), 'mentor': entity.mentor.name(), 'org': entity.scope.name, } new_params['public_field_keys'] = [ 'student', 'title', 'mentor', 'org', 'status' ] new_params['public_field_names'] = [ 'Student', 'Title', 'Mentor', 'Organization', 'Status' ] new_params['org_home_field_prefetch'] = ['mentor', 'student'] new_params['org_home_field_extra'] = lambda entity: { 'student': entity.student.name(), 'mentor': ', '.join(mentor.name() for mentor in [entity.mentor] + db.get( entity.additional_mentors)) } new_params['org_home_field_keys'] = [ 'student', 'title', 'mentor', 'status' ] new_params['org_home_field_names'] = [ 'Student', 'Title', 'Mentor', 'Status' ] # define the list redirect action to show the notification new_params['public_row_extra'] = new_params[ 'org_home_row_extra'] = lambda entity: { 'link': redirects.getPublicRedirect(entity, new_params) } new_params['org_home_row_action'] = { 'type': 'redirect_custom', 'parameters': dict(new_window=False), } new_params['admin_field_prefetch'] = ['mentor', 'student', 'scope'] new_params['admin_field_extra'] = lambda entity: { 'student': entity.student.name(), 'mentor': entity.mentor.name(), 'student_id': entity.student.link_id } new_params['admin_field_keys'] = [ 'student', 'title', 'mentor', 'status', 'student_id' ] new_params['admin_field_names'] = [ 'Student', 'Title', 'Mentor', 'Status', 'Student Link ID' ] new_params['admin_field_hidden'] = ['student_id'] new_params['admin_conf_extra'] = { 'multiselect': True, } new_params['admin_button_global'] = [{ 'bounds': [1, 'all'], 'id': 'withdraw', 'caption': 'Withdraw Project', 'type': 'post', 'parameters': { 'url': '', 'keys': ['key'], 'refresh': 'current', } }, { 'bounds': [1, 'all'], 'id': 'accept', 'caption': 'Accept Project', 'type': 'post', 'parameters': { 'url': '', 'keys': ['key'], 'refresh': 'current', } }] params = dicts.merge(params, new_params) super(View, self).__init__(params=params) # create the form that students will use to edit their projects dynaproperties = { 'public_info': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={ 'rows': 25, 'cols': 100 })), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_public_info': cleaning.clean_html_content('public_info'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean_feed_url': cleaning.clean_feed_url('feed_url'), } student_edit_form = dynaform.newDynaForm( dynabase=self._params['dynabase'], dynamodel=self._params['logic'].getModel(), dynaexclude=self._params['create_dynaexclude'], dynaproperties=dynaproperties, ) self._params['student_edit_form'] = student_edit_form
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.Checker(params) rights['create'] = ['checkIsDeveloper'] rights['edit'] = [('checkCanStudentPropose', ['scope_path', False]), ('checkRoleAndStatusForStudentProposal', [['proposer'], ['active'], ['new', 'pending', 'invalid']])] rights['delete'] = ['checkIsDeveloper'] rights['show'] = [ ('checkRoleAndStatusForStudentProposal', [['proposer', 'org_admin', 'mentor', 'host'], ['active', 'inactive'], ['new', 'pending', 'accepted', 'rejected', 'invalid']])] rights['list'] = ['checkIsDeveloper'] rights['list_orgs'] = [ ('checkIsStudent', ['scope_path', ['active']]), ('checkCanStudentPropose', ['scope_path', False])] rights['list_self'] = [ ('checkIsStudent', ['scope_path', ['active', 'inactive']])] rights['apply'] = [ ('checkIsStudent', ['scope_path', ['active']]), ('checkCanStudentPropose', ['scope_path', True])] rights['review'] = [('checkRoleAndStatusForStudentProposal', [['org_admin', 'mentor', 'host'], ['active'], ['new', 'pending', 'accepted', 'rejected', 'invalid']])] new_params = {} new_params['logic'] = soc.logic.models.student_proposal.logic new_params['rights'] = rights new_params['name'] = "Student Proposal" new_params['url_name'] = "student_proposal" new_params['sidebar_grouping'] = 'Students' new_params['scope_view'] = student_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['no_create_with_key_fields'] = True new_params['list_key_order'] = ['title', 'abstract', 'content', 'additional_info', 'created_on', 'last_modified_on'] patterns = [ (r'^%(url_name)s/(?P<access_type>apply)/%(scope)s$', 'soc.views.models.%(module_name)s.apply', 'Create a new %(name)s'), (r'^%(url_name)s/(?P<access_type>list_self)/%(scope)s$', 'soc.views.models.%(module_name)s.list_self', 'List my %(name_plural)s'), (r'^%(url_name)s/(?P<access_type>list_orgs)/%(scope)s$', 'soc.views.models.%(module_name)s.list_orgs', 'List my %(name_plural)s'), (r'^%(url_name)s/(?P<access_type>review)/%(key_fields)s$', 'soc.views.models.%(module_name)s.review', 'Review %(name)s'), ] new_params['extra_django_patterns'] = patterns new_params['extra_dynaexclude'] = ['org', 'program', 'score', 'status', 'mentor', 'link_id', 'possible_mentors'] new_params['create_extra_dynaproperties'] = { 'content': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'organization': forms.CharField(label='Organization Link ID', required=True), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_content': cleaning.clean_html_content('content'), 'clean_organization': cleaning.clean_link_id('organization'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean': cleaning.validate_student_proposal('organization', 'scope_path', student_logic, org_logic), } new_params['edit_extra_dynaproperties'] = { 'organization': forms.CharField(label='Organization Link ID', widget=widgets.ReadOnlyInput), 'link_id': forms.CharField(widget=forms.HiddenInput) } new_params['edit_template'] = 'soc/student_proposal/edit.html' new_params['review_template'] = 'soc/student_proposal/review.html' new_params['review_after_deadline_template'] = 'soc/student_proposal/review_after_deadline.html' params = dicts.merge(params, new_params) super(View, self).__init__(params=params) # create the special form for students dynafields = [ {'name': 'organization', 'base': forms.CharField, 'label': 'Organization Link ID', 'widget': widgets.ReadOnlyInput(), 'required': False, }, ] dynaproperties = params_helper.getDynaFields(dynafields) student_create_form = dynaform.extendDynaForm( dynaform=self._params['create_form'], dynaproperties=dynaproperties) self._params['student_create_form'] = student_create_form # create the special form for public review dynafields = [ {'name': 'comment', 'base': forms.CharField, 'widget': widgets.FullTinyMCE(attrs={'rows': 10, 'cols': 40}), 'label': 'Comment', 'required': False, 'example_text': 'Caution, you will not be able to edit your comment!', }, ] dynaproperties = params_helper.getDynaFields(dynafields) dynaproperties['clean_comment'] = cleaning.clean_html_content('comment') public_review_form = dynaform.newDynaForm(dynamodel=None, dynabase=helper.forms.BaseForm, dynainclude=None, dynaexclude=None, dynaproperties=dynaproperties) self._params['public_review_form'] = public_review_form # create the special form for mentors dynafields = [ {'name': 'score', 'base': forms.ChoiceField, 'label': 'Score', 'initial': 0, 'required': False, 'passthrough': ['initial', 'required', 'choices'], 'example_text': 'A score will only be assigned if the review is private!', 'choices': [(-4,'-4: Wow. This. Sucks.'), (-3,'-3: Needs a lot of work'), (-2,'-2: This is bad'), (-1,'-1: I dont like this'), (0,'0: No score'), (1,'1: Might have potential'), (2,'2: Good'), (3,'3: Almost there'), (4,'4: Made. Of. Awesome.')] }, {'name': 'comment', 'base': forms.CharField, 'widget': widgets.FullTinyMCE(attrs={'rows': 10, 'cols': 40}), 'label': 'Comment', 'required': False, 'example_text': 'Caution, you will not be able to edit your review!', }, {'name': 'public', 'base': forms.BooleanField, 'label': 'Review visible to Student', 'initial': False, 'required': False, 'help_text': 'By ticking this box the score will not be assigned, ' 'and the review will be visible to the student.', }, ] dynaproperties = params_helper.getDynaFields(dynafields) dynaproperties['clean_comment'] = cleaning.clean_html_content('comment') mentor_review_form = dynaform.newDynaForm(dynamodel=None, dynabase=helper.forms.BaseForm, dynainclude=None, dynaexclude=None, dynaproperties=dynaproperties) self._params['mentor_review_form'] = mentor_review_form dynafields = [ {'name': 'rank', 'base': forms.IntegerField, 'label': 'Set to rank', 'help_text': 'Set this proposal to the given rank (ignores the given score)', 'example_text': 'A rank will only be assigned if the ' 'review is private!', 'min_value': 1, 'required': False, 'passthrough': ['min_value', 'required', 'help_text'], }, {'name': 'mentor', 'base': widgets.ReferenceField, 'passthrough': ['reference_url', 'required', 'label', 'filter'], 'reference_url': 'mentor', 'filter': ['__org__'], 'label': 'Assign Mentor (Link ID)', 'required': False, 'help_text': 'Fill in the Link ID of the Mentor ' 'you would like to assign to this Proposal. ' 'Leave this box empty if you don\'t want any mentor assigned.', }, ] dynaproperties = params_helper.getDynaFields(dynafields) dynaproperties['clean_comment'] = cleaning.clean_html_content('comment') admin_review_form = dynaform.extendDynaForm(dynaform=mentor_review_form, dynaproperties=dynaproperties) self._params['admin_review_form'] = admin_review_form
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ # TODO(ljvderijk): phase out this module + access checks rights = access.Checker(params) rights['create'] = ['checkIsDeveloper'] rights['delete'] = [('checkCanEditGroupApp', [org_app_logic.logic]), ('checkIsActivePeriod', ['org_signup', 'scope_path', program_logic.logic])] rights['edit'] = [('checkCanEditGroupApp', [org_app_logic.logic]), ('checkIsActivePeriod', ['org_signup', 'scope_path', program_logic.logic])] rights['list'] = ['checkIsDeveloper'] rights['list_self'] = ['checkIsUser'] rights['show'] = ['allow'] rights['review'] = [ 'checkIsHostForProgramInScope', ('checkCanReviewGroupApp', [org_app_logic.logic]) ] rights['review_overview'] = ['checkIsHostForProgramInScope'] rights['bulk_accept'] = ['checkIsHostForProgramInScope'] rights['bulk_reject'] = ['checkIsHostForProgramInScope'] rights['apply'] = [ 'checkIsUser', ('checkCanCreateOrgApp', ['org_signup', program_logic.logic]), ('checkIsNotStudentForProgramInScope', [program_logic.logic, student_logic.logic]) ] new_params = {} new_params['rights'] = rights new_params['logic'] = org_app_logic.logic new_params['scope_view'] = program_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['sidebar_grouping'] = 'Organizations' new_params['list_key_order'] = [ 'link_id', 'scope_path', 'name', 'home_page', 'email', 'description', 'why_applying', 'pub_mailing_list', 'irc_channel', 'member_criteria', 'prior_participation', 'prior_application', 'license_name', 'ideas', 'dev_mailing_list', 'contrib_template', 'contrib_disappears', 'member_disappears', 'encourage_contribs', 'continued_contribs' ] patterns = [ (r'^%(url_name)s/(?P<access_type>apply)/%(scope)s$', 'soc.views.models.%(module_name)s.create', 'Create an %(name_plural)s'), (r'^%(url_name)s/(?P<access_type>bulk_accept)/%(scope)s$', 'soc.views.models.%(module_name)s.bulk_accept', 'Bulk Acceptation of %(name_plural)s'), (r'^%(url_name)s/(?P<access_type>bulk_reject)/%(scope)s$', 'soc.views.models.%(module_name)s.bulk_reject', 'Bulk Rejection of %(name_plural)s'), ] new_params['extra_django_patterns'] = patterns new_params['extra_key_order'] = [ 'admin_agreement', 'agreed_to_admin_agreement' ] new_params['extra_dynaexclude'] = [ 'applicant', 'backup_admin', 'status', 'created_on', 'last_modified_on' ] new_params['create_dynafields'] = [ { 'name': 'link_id', 'base': forms.fields.CharField, 'label': 'Organization Link ID', }, ] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.fields.CharField(widget=forms.HiddenInput, required=True), 'contrib_template': forms.fields.CharField(widget=helper.widgets.FullTinyMCE( attrs={ 'rows': 25, 'cols': 100 })), 'description': forms.fields.CharField(widget=helper.widgets.FullTinyMCE( attrs={ 'rows': 25, 'cols': 100 })), 'admin_agreement': forms.fields.Field(required=False, widget=widgets.AgreementField), 'agreed_to_admin_agreement': forms.fields.BooleanField(initial=False, required=True), 'clean_description': cleaning.clean_html_content('description'), 'clean_contrib_template': cleaning.clean_html_content('contrib_template'), 'clean_ideas': cleaning.clean_url('ideas'), 'clean': cleaning.validate_new_group('link_id', 'scope_path', model_logic.organization, org_app_logic) } # get rid of the clean method new_params['edit_extra_dynaproperties'] = { 'clean': (lambda x: x.cleaned_data) } new_params['name'] = "Organization Application" new_params['name_plural'] = "Organization Applications" new_params['name_short'] = "Org App" new_params['url_name'] = "org_app" new_params['group_name'] = "Organization" new_params['group_url_name'] = 'org' new_params['review_template'] = 'soc/org_app/review.html' # TODO use a proper template that works for each program new_params['accepted_mail_template'] = \ 'soc/org_app/mail/accepted_gsoc2009.html' new_params['rejected_mail_template'] = 'soc/org_app/mail/rejected.html' params = dicts.merge(params, new_params) super(View, self).__init__(params=params)
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.GSoCChecker(params) rights['any_access'] = ['allow'] rights['show'] = ['allow'] rights['create'] = [('checkSeeded', ['checkHasRoleForScope', host_logic])] rights['edit'] = [('checkIsHostForProgram', [program_logic])] rights['delete'] = ['checkIsDeveloper'] rights['assign_slots'] = [('checkIsHostForProgram', [program_logic])] rights['slots'] = [('checkIsHostForProgram', [program_logic])] rights['show_duplicates'] = [('checkIsHostForProgram', [program_logic])] rights['assigned_proposals'] = [('checkIsHostForProgram', [program_logic])] rights['accepted_orgs'] = [('checkIsAfterEvent', ['accepted_organization_announced_deadline', '__all__', program_logic])] rights['list_participants'] = [('checkIsHostForProgram', [program_logic])] rights['list_projects'] = [('checkIsAfterEvent', ['accepted_students_announced_deadline', '__all__', program_logic])] new_params = {} new_params['logic'] = program_logic new_params['rights'] = rights new_params['name'] = "GSoC Program" new_params['module_name'] = "program" new_params['sidebar_grouping'] = 'Programs' new_params['document_prefix'] = 'gsoc_program' new_params['module_package'] = 'soc.modules.gsoc.views.models' new_params['url_prefix'] = 'gsoc' new_params['url_name'] = 'gsoc/program' new_params['extra_dynaexclude'] = ['slots_allocation'] new_params['create_dynafields'] = [ {'name': 'org_tags', 'base': forms.fields.Field, 'widget': forms.widgets.Textarea, 'label': 'Predefined organization tags', 'required': False, 'group': ugettext('Manage organization tags'), 'help_text': ugettext('Enter predefined tags to be used by ' 'organization admins to tag their organizations. Each line ' 'should contain only one tag')}, ] new_params['create_extra_dynaproperties'] = { 'clean_org_tags': gsoc_cleaning.cleanTagsList('org_tags'), 'clean_facebook': cleaning.clean_url('facebook'), 'clean_twitter': cleaning.clean_url('twitter'), 'clean_blogger': cleaning.clean_url('blogger'), 'clean_email': cleaning.clean_empty_field('email'), 'clean_irc': cleaning.clean_empty_field('irc'), } new_params['org_app_logic'] = org_app_logic # used to list the participants in this program new_params['participants_logic'] = [ (org_admin_logic, 'program'), (mentor_logic, 'program'), (student_logic, 'scope')] params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params)
def __init__(self, params={}): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Args: params: This dictionary should be filled with the parameters """ new_params = {} patterns = params.get('extra_django_patterns') if not patterns: patterns = [] if params.get('allow_requests_and_invites'): # add patterns concerning requests and invites patterns += [(r'^%(url_name)s/(?P<access_type>invite)/%(scope)s$', '%(module_package)s.%(module_name)s.invite', 'Create invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>accept_invite)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.accept_invite', 'Accept invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>process_request)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.process_request', 'Process request'), (r'^%(url_name)s/(?P<access_type>request)/%(scope)s$', '%(module_package)s.%(module_name)s.role_request', 'Create a Request to become %(name)s')] elif params.get('allow_invites'): # add patterns concerning only invites patterns += [(r'^%(url_name)s/(?P<access_type>invite)/%(scope)s$', '%(module_package)s.%(module_name)s.invite', 'Create invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>accept_invite)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.accept_invite', 'Accept invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>process_request)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.process_request', 'Process request for %(name)s')] # add manage pattern patterns += [(r'^%(url_name)s/(?P<access_type>manage)/%(scope)s/%(lnp)s$', '%(module_package)s.%(module_name)s.manage', 'Manage a %(name)s'),] new_params['logic'] = soc.logic.models.role.logic new_params['extra_django_patterns'] = patterns new_params['scope_redirect'] = redirects.getInviteRedirect new_params['manage_redirect'] = redirects.getListRolesRedirect new_params['name'] = "Role" new_params['module_name'] = 'role' new_params['create_template'] = 'soc/role/edit.html' new_params['edit_template'] = 'soc/role/edit.html' new_params['create_extra_dynaproperties'] = { 'latitude':forms.fields.FloatField(widget=forms.HiddenInput, required=False), 'longitude': forms.fields.FloatField(widget=forms.HiddenInput, required=False), 'email': forms.fields.EmailField(required=True), 'clean_link_id': cleaning.clean_existing_user('link_id'), 'clean_given_name': cleaning.clean_valid_shipping_chars('given_name'), 'clean_surname': cleaning.clean_valid_shipping_chars('surname'), 'clean_phone': cleaning.clean_phone_number('phone'), 'clean_res_street': cleaning.clean_valid_shipping_chars('res_street'), 'clean_res_street_extra': cleaning.clean_valid_shipping_chars('res_street_extra'), 'clean_res_city': cleaning.clean_valid_shipping_chars('res_city'), 'clean_res_state': cleaning.clean_valid_shipping_chars('res_state'), 'clean_res_postalcode': cleaning.clean_valid_shipping_chars('res_postalcode'), 'clean_ship_name': cleaning.clean_valid_shipping_chars('ship_name'), 'clean_ship_street': cleaning.clean_valid_shipping_chars('ship_street'), 'clean_ship_street_extra': cleaning.clean_valid_shipping_chars( 'ship_street_extra'), 'clean_ship_city': cleaning.clean_valid_shipping_chars('ship_city'), 'clean_ship_state': cleaning.clean_valid_shipping_chars('ship_state'), 'clean_ship_postalcode': cleaning.clean_valid_shipping_chars('ship_postalcode'), 'clean_home_page': cleaning.clean_url('home_page'), 'clean_blog': cleaning.clean_url('blog'), 'clean_photo_url': cleaning.clean_url('photo_url'), 'clean': cleaning.validate_role(), 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), } new_params['extra_dynaexclude'] = ['user', 'status', 'agreed_to_tos_on', 'mentor_for', 'org_admin_for', 'student_info'] new_params['show_in_roles_overview'] = True # define the fields for the admin list new_params['admin_field_keys'] = [ 'link_id', 'given_name', 'surname', 'document_name', 'email', 'res_street', 'res_street_extra', 'res_city', 'res_state', 'res_country', 'res_postalcode', 'phone', 'recipient_name', 'shipping_street', 'shipping_street_extra', 'shipping_city', 'shipping_state', 'shipping_country', 'shipping_postalcode', 'birth_date', 'tshirt_style', 'tshirt_size', 'gender', 'group_name', 'status', 'account_name', ] new_params['admin_field_names'] = [ 'Link ID', 'Name', 'Surname', 'Name on Documents', 'Email', 'Street Address 1', 'Street Address 2', 'City', 'State', 'Country', 'Postal Code', 'Phone Number', 'Recipient Name', 'Shipping Street Address 1', 'Shipping Street Address 2', 'Shipping City', 'Shipping State', 'Shipping Country', 'Shipping Postal Code', 'Birth Date', 'T-Shirt Style', 'T-Shirt Size', 'Gender', 'Group Name', 'Status', 'Account Name', ] new_params['admin_field_prefetch'] = ['scope', 'user'] new_params['admin_field_extra'] = lambda entity: { 'group_name': entity.scope.name, 'birth_date': entity.birth_date.isoformat(), 'account_name': accounts.normalizeAccount(entity.user.account).email() } new_params['admin_field_hidden'] = ['tshirt_style', 'tshirt_size'] params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params=params) # add manage template template = 'soc/%(module_name)s/manage.html' % self._params self._params['manage_template'] = template # register this View addRole(self)
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.Checker(params) rights['create'] = ['checkIsDeveloper'] rights['delete'] = [('checkCanEditGroupApp', [org_app_logic.logic]), ('checkIsActivePeriod', ['org_signup', 'scope_path'])] rights['edit'] = [('checkCanEditGroupApp', [org_app_logic.logic]), ('checkIsActivePeriod', ['org_signup', 'scope_path'])] rights['list'] = ['checkIsDeveloper'] rights['list_self'] = ['checkIsUser'] rights['show'] = ['allow'] rights['review'] = ['checkIsHostForProgramInScope', ('checkCanReviewGroupApp', [org_app_logic.logic])] rights['review_overview'] = ['checkIsHostForProgramInScope'] rights['bulk_accept'] = ['checkIsHostForProgramInScope'] rights['bulk_reject'] = ['checkIsHostForProgramInScope'] rights['apply'] = ['checkIsUser', ('checkCanCreateOrgApp', ['org_signup']), 'checkIsNotStudentForProgramInScope'] new_params = {} new_params['rights'] = rights new_params['logic'] = org_app_logic.logic new_params['scope_view'] = program_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['sidebar_grouping'] = 'Organizations' new_params['list_key_order'] = [ 'link_id', 'scope_path', 'name', 'home_page', 'email', 'description', 'why_applying','pub_mailing_list','irc_channel', 'member_criteria', 'prior_participation', 'prior_application', 'license_name', 'ideas', 'dev_mailing_list', 'contrib_template', 'contrib_disappears', 'member_disappears', 'encourage_contribs', 'continued_contribs'] patterns = [(r'^%(url_name)s/(?P<access_type>apply)/%(scope)s$', 'soc.views.models.%(module_name)s.create', 'Create an %(name_plural)s'), (r'^%(url_name)s/(?P<access_type>bulk_accept)/%(scope)s$', 'soc.views.models.%(module_name)s.bulk_accept', 'Bulk Acceptation of %(name_plural)s'), (r'^%(url_name)s/(?P<access_type>bulk_reject)/%(scope)s$', 'soc.views.models.%(module_name)s.bulk_reject', 'Bulk Rejection of %(name_plural)s'),] new_params['extra_django_patterns'] = patterns new_params['extra_key_order'] = ['admin_agreement', 'agreed_to_admin_agreement'] new_params['extra_dynaexclude'] = ['applicant', 'backup_admin', 'status', 'created_on', 'last_modified_on'] new_params['create_dynafields'] = [ {'name': 'link_id', 'base': forms.fields.CharField, 'label': 'Organization Link ID', }, ] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.fields.CharField(widget=forms.HiddenInput, required=True), 'contrib_template': forms.fields.CharField( widget=helper.widgets.FullTinyMCE( attrs={'rows': 25, 'cols': 100})), 'description': forms.fields.CharField( widget=helper.widgets.FullTinyMCE( attrs={'rows': 25, 'cols': 100})), 'admin_agreement': forms.fields.Field(required=False, widget=widgets.AgreementField), 'agreed_to_admin_agreement': forms.fields.BooleanField( initial=False, required=True), 'clean_description': cleaning.clean_html_content('description'), 'clean_contrib_template': cleaning.clean_html_content( 'contrib_template'), 'clean_ideas': cleaning.clean_url('ideas'), 'clean': cleaning.validate_new_group('link_id', 'scope_path', model_logic.organization, org_app_logic)} # get rid of the clean method new_params['edit_extra_dynaproperties'] = { 'clean': (lambda x: x.cleaned_data)} new_params['name'] = "Organization Application" new_params['name_plural'] = "Organization Applications" new_params['name_short'] = "Org App" new_params['url_name'] = "org_app" new_params['group_name'] = "Organization" new_params['group_url_name'] = 'org' new_params['review_template'] = 'soc/org_app/review.html' # TODO use a proper template that works for each program new_params['accepted_mail_template'] = \ 'soc/org_app/mail/accepted_gsoc2009.html' new_params['rejected_mail_template'] = 'soc/org_app/mail/rejected.html' params = dicts.merge(params, new_params) super(View, self).__init__(params=params)
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.GSoCChecker(params) rights['any_access'] = ['allow'] rights['show'] = ['allow'] rights['create'] = ['checkIsDeveloper'] rights['edit'] = [('checkHasRoleForKeyFieldsAsScope', org_admin_logic), ('checkGroupIsActiveForLinkId', org_logic)] rights['delete'] = ['checkIsDeveloper'] rights['home'] = ['allow'] rights['public_list'] = ['allow'] rights['applicant'] = [('checkIsOrgAppAccepted', org_app_logic)] rights['apply_mentor'] = ['checkIsUser'] rights['list_requests'] = [('checkHasRoleForKeyFieldsAsScope', org_admin_logic)] rights['list_roles'] = [('checkHasRoleForKeyFieldsAsScope', org_admin_logic)] rights['list_proposals'] = [('checkHasAny', [ [('checkHasRoleForKeyFieldsAsScope', [org_admin_logic, ['active', 'inactive']]), ('checkHasRoleForKeyFieldsAsScope', [mentor_logic, ['active', 'inactive']])] ])] new_params = {} new_params['logic'] = org_logic new_params['rights'] = rights new_params['scope_view'] = program_view new_params['name'] = "GSoC Organization" new_params['module_name'] = "organization" new_params['sidebar_grouping'] = 'Organizations' new_params['module_package'] = 'soc.modules.gsoc.views.models' new_params['url_name'] = 'gsoc/org' new_params['document_prefix'] = 'gsoc_org' new_params['mentor_role_name'] = 'gsoc_mentor' new_params['mentor_url_name'] = 'gsoc/mentor' new_params['org_admin_role_name'] = 'gsoc_org_admin' patterns = [] patterns += [ (r'^org_tags/(?P<access_type>pick)$', '%(module_package)s.%(module_name)s.pick_suggested_tags', "Pick a list of suggested tags."), ] new_params['extra_django_patterns'] = patterns new_params['extra_dynaexclude'] = ['slots', 'slots_calculated', 'nr_applications', 'nr_mentors'] new_params['create_extra_dynaproperties'] = { 'tags': widgets.ReferenceField( required=False, reference_url='org_tags', label=ugettext('Tags'), help_text=ugettext("A list of comma seperated tags"), example_text="e.g. python, django, appengine", filter=['scope_path'], group="1. Public Info"), 'clean_tags': gsoc_cleaning.cleanTagsList( 'tags', gsoc_cleaning.COMMA_SEPARATOR), 'contrib_template': forms.fields.CharField( widget=helper.widgets.FullTinyMCE( attrs={'rows': 25, 'cols': 100})), 'clean_contrib_template': cleaning.clean_html_content( 'contrib_template'), 'clean_facebook': cleaning.clean_url('facebook'), 'clean_twitter': cleaning.clean_url('twitter'), 'clean_blog': cleaning.clean_url('blog'), } new_params['org_app_logic'] = org_app_logic params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params) self._params['public_field_keys'].append('tags') self._params['public_field_names'].append("Tags") self._params['public_field_extra'] = lambda entity: { 'ideas': lists.urlize(entity.ideas, 'Click Here'), 'tags': entity.tags_string(entity.org_tag), } self._params['select_field_extra'] = self._params['public_field_extra']
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.Checker(params) rights['unspecified'] = ['checkIsDeveloper'] rights['any_access'] = ['allow'] rights['home'] = ['allow'] rights['search'] = ['allow'] rights['show'] = ['checkIsDeveloper'] new_params = {} new_params['logic'] = site_logic new_params['rights'] = rights new_params['name'] = "Site Settings" new_params['name_plural'] = new_params['name'] new_params['document_prefix'] = 'site' new_params['name_short'] = "Site" new_params['sidebar_developer'] = [] new_params['sidebar_defaults'] = [('/%s/edit', 'Edit %(name)s', 'edit')] new_params['sidebar_heading'] = new_params['name_short'] new_params['edit_template'] = 'soc/site/edit.html' new_params['home_template'] = 'soc/site/home.html' new_params['search_template'] = 'soc/site/search.html' new_params['create_extra_dynaproperties'] = { 'link_id': forms.CharField(widget=forms.HiddenInput, required=True), 'noreply_email': forms.EmailField(required=False), 'clean_logo_url': cleaning.clean_url('logo_url'), } new_params['edit_extra_dynaproperties'] = { 'link_id': forms.CharField(widget=forms.HiddenInput, required=True), 'home_link_id': widgets.ReferenceField( reference_url='document', required=False, filter_fields={'prefix': new_params['document_prefix']}, label=ugettext('Home page Document link ID'), help_text=soc.models.work.Work.link_id.help_text), 'tos_link_id': widgets.ReferenceField( reference_url='document', required=False, filter_fields={'prefix': new_params['document_prefix']}, label=ugettext('Terms of Service Document link ID'), help_text=soc.models.work.Work.link_id.help_text), 'clean_noreply_email': cleaning.clean_empty_field('noreply_email'), } # XSRF secret key is not editable by mere mortals. new_params['extra_dynaexclude'] = ['xsrf_secret_key', 'active_program'] patterns = [] page_name = "Home Page" patterns += [(r'^$', 'soc.views.models.%(module_name)s.main_public', page_name)] page_name = "Edit Site" patterns += [(r'^%(url_name)s/(?P<access_type>edit)$', 'soc.views.models.%(module_name)s.main_edit', page_name)] page_name = "Search" patterns += [(r'^%(url_name)s/(?P<access_type>search)$', 'soc.views.models.%(module_name)s.search', page_name)] if soc.logic.system.isDebug(): patterns += [('^seed_db$', 'soc.models.seed_db.seed', "Seed DB"), ('^clear_db$', 'soc.models.seed_db.clear', "Clear DB"), ('^reseed_db$', 'soc.models.seed_db.reseed', "Reseed DB"), ('^seed_many$', 'soc.models.seed_db.seed_many', "Seed Many"), ('^new_seed_many$', 'soc.models.seed_db.new_seed_many', "New Seed Many"), ] new_params['extra_django_patterns'] = patterns params = dicts.merge(params, new_params) super(View, self).__init__(params=params)
def __init__(self, params=None): """ Args: params: This dictionary should be filled with the parameters """ new_params = {} patterns = params.get('extra_django_patterns') if not patterns: patterns = [] if params.get('allow_requests_and_invites'): # add patterns concerning requests and invites patterns += [(r'^%(url_name)s/(?P<access_type>invite)/%(scope)s$', 'soc.views.models.%(module_name)s.invite', 'Create invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>accept_invite)/%(scope)s/%(lnp)s$', 'soc.views.models.%(module_name)s.accept_invite', 'Accept invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>process_request)/%(scope)s/%(lnp)s$', 'soc.views.models.%(module_name)s.process_request', 'Process request for %(name)s'), (r'^%(url_name)s/(?P<access_type>request)/%(scope)s$', 'soc.views.models.%(module_name)s.role_request', 'Create a Request to become %(name)s')] elif params.get('allow_invites'): # add patterns concerning only invites patterns += [(r'^%(url_name)s/(?P<access_type>invite)/%(scope)s$', 'soc.views.models.%(module_name)s.invite', 'Create invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>accept_invite)/%(scope)s/%(lnp)s$', 'soc.views.models.%(module_name)s.accept_invite', 'Accept invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>process_request)/%(scope)s/%(lnp)s$', 'soc.views.models.%(module_name)s.process_request', 'Process request for %(name)s')] # add manage pattern patterns += [(r'^%(url_name)s/(?P<access_type>manage)/%(scope)s/%(lnp)s$', 'soc.views.models.%(module_name)s.manage', 'Manage a %(name)s'),] new_params['extra_django_patterns'] = patterns new_params['scope_redirect'] = redirects.getInviteRedirect new_params['manage_redirect'] = redirects.getListRolesRedirect new_params['create_template'] = 'soc/role/edit.html' new_params['edit_template'] = 'soc/role/edit.html' new_params['create_extra_dynaproperties'] = { 'latitude':forms.fields.FloatField(widget=forms.HiddenInput, required=False), 'longitude': forms.fields.FloatField(widget=forms.HiddenInput, required=False), 'email': forms.fields.EmailField(required=True), 'clean_link_id': cleaning.clean_existing_user('link_id'), 'clean_phone': cleaning.clean_phone_number('phone'), 'clean_res_street': cleaning.clean_ascii_only('res_street'), 'clean_res_city': cleaning.clean_ascii_only('res_city'), 'clean_res_state': cleaning.clean_ascii_only('res_state'), 'clean_res_postalcode': cleaning.clean_ascii_only('res_postalcode'), 'clean_ship_street': cleaning.clean_ascii_only('ship_street'), 'clean_ship_city': cleaning.clean_ascii_only('ship_city'), 'clean_ship_state': cleaning.clean_ascii_only('ship_state'), 'clean_ship_postalcode': cleaning.clean_ascii_only('ship_postalcode'), 'clean_home_page': cleaning.clean_url('home_page'), 'clean_blog': cleaning.clean_url('blog'), 'clean_photo_url': cleaning.clean_url('photo_url'), 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), } new_params['extra_dynaexclude'] = ['user', 'status', 'agreed_to_tos_on'] params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params=params) # add manage template template = 'soc/%(module_name)s/manage.html' % self._params self._params['manage_template'] = template if self._params.get('show_in_roles_overview'): # add to roles overview addRole(self)
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.GSoCChecker(params) rights['any_access'] = ['allow'] rights['create'] = ['checkIsDeveloper'] rights['edit'] = ['checkIsDeveloper'] rights['delete'] = ['checkIsDeveloper'] rights['show'] = ['allow'] rights['list'] = ['checkIsDeveloper'] rights['manage'] = [('checkHasRoleForScope', [org_admin_logic, ['active', 'inactive']]), ('checkStudentProjectHasStatus', [['accepted', 'failed', 'completed', 'withdrawn']])] rights['manage_overview'] = [('checkHasRoleForScope', [ org_admin_logic, ['active', 'inactive']])] # TODO: lack of better name here! rights['st_edit'] = [ 'checkCanEditStudentProjectAsStudent', ('checkStudentProjectHasStatus', [['accepted', 'completed']]) ] rights['withdraw'] = ['checkIsHostForProgram'] rights['withdraw_project'] = ['checkIsHostForStudentProject', ('checkStudentProjectHasStatus', [['accepted', 'completed']]) ] rights['accept_project'] = ['checkIsHostForStudentProject', ('checkStudentProjectHasStatus', [['withdrawn']]) ] new_params = {} new_params['logic'] = project_logic new_params['rights'] = rights new_params['name'] = "Student Project" new_params['url_name'] = "gsoc/student_project" new_params['module_package'] = 'soc.modules.gsoc.views.models' new_params['sidebar_grouping'] = 'Students' new_params['scope_view'] = org_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['no_create_with_key_fields'] = True new_params['extra_dynaexclude'] = ['program', 'status', 'link_id', 'mentor', 'additional_mentors', 'student', 'passed_evaluations', 'failed_evaluations'] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'public_info': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), 'student_id': forms.CharField(label='Student Link ID', required=True), 'mentor_id': forms.CharField(label='Mentor Link ID', required=True), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_public_info': cleaning.clean_html_content('public_info'), 'clean_student': cleaning.clean_link_id('student'), 'clean_mentor': cleaning.clean_link_id('mentor'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean_feed_url': cleaning.clean_feed_url, 'clean': cleaning.validate_student_project('scope_path', 'mentor_id', 'student_id') } new_params['edit_extra_dynaproperties'] = { 'link_id': forms.CharField(widget=forms.HiddenInput), } patterns = [ (r'^%(url_name)s/(?P<access_type>manage_overview)/%(scope)s$', 'soc.modules.gsoc.views.models.%(module_name)s.manage_overview', 'Overview of %(name_plural)s to Manage for'), (r'^%(url_name)s/(?P<access_type>manage)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.manage', 'Manage %(name)s'), (r'^%(url_name)s/(?P<access_type>st_edit)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.st_edit', 'Edit my %(name)s'), (r'^%(url_name)s/(?P<access_type>withdraw)/(?P<scope_path>%(ulnp)s)/%(lnp)s$', 'soc.modules.gsoc.views.models.%(module_name)s.withdraw', 'Withdraw %(name_plural)s'), (r'^%(url_name)s/(?P<access_type>withdraw_project)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.withdraw_project', 'Withdraw a %(name)s'), (r'^%(url_name)s/(?P<access_type>accept_project)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.accept_project', 'Accept a %(name)s'), ] new_params['extra_django_patterns'] = patterns new_params['edit_template'] = 'soc/student_project/edit.html' new_params['manage_template'] = 'soc/student_project/manage.html' new_params['manage_overview_heading'] = \ 'soc/student_project/list/heading_manage.html' new_params['manage_overview_row'] = \ 'soc/student_project/list/row_manage.html' new_params['public_field_extra'] = lambda entity: { "student": entity.student.name(), "mentor": entity.mentor.name(), } new_params['public_field_keys'] = ["student", "title", "mentor", "status"] new_params['public_field_names'] = ["Student", "Title", "Mentor", "Status"] params = dicts.merge(params, new_params) super(View, self).__init__(params=params) # create the form that students will use to edit their projects dynaproperties = { 'public_info': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_public_info': cleaning.clean_html_content('public_info'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean_feed_url': cleaning.clean_feed_url, } student_edit_form = dynaform.newDynaForm( dynabase = self._params['dynabase'], dynamodel = self._params['logic'].getModel(), dynaexclude = self._params['create_dynaexclude'], dynaproperties = dynaproperties, ) self._params['student_edit_form'] = student_edit_form
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: original_params: a dict with params for this View """ from soc.views.models import program as program_view rights = access.Checker(params) rights['any_access'] = ['allow'] rights['show'] = ['allow'] rights['create'] = ['checkIsDeveloper'] rights['edit'] = [('checkHasRoleForKeyFieldsAsScope', org_admin_logic.logic,), ('checkGroupIsActiveForLinkId', org_logic.logic)] rights['delete'] = ['checkIsDeveloper'] rights['home'] = ['allow'] rights['public_list'] = ['allow'] rights['apply_mentor'] = ['checkIsUser'] rights['list_requests'] = [('checkHasRoleForKeyFieldsAsScope', org_admin_logic.logic)] rights['list_roles'] = [('checkHasRoleForKeyFieldsAsScope', org_admin_logic.logic)] new_params = {} new_params['logic'] = soc.logic.models.organization.logic new_params['rights'] = rights new_params['scope_view'] = program_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['name'] = "Organization" new_params['url_name'] = "org" new_params['document_prefix'] = "org" new_params['sidebar_grouping'] = 'Organizations' new_params['public_template'] = 'soc/organization/public.html' new_params['home_template'] = 'soc/organization/home.html' new_params['sans_link_id_public_list'] = True patterns = [] patterns += [ (r'^%(url_name)s/(?P<access_type>apply_mentor)/%(scope)s$', '%(module_package)s.%(module_name)s.apply_mentor', "List of all %(name_plural)s you can apply to"), (r'^%(url_name)s/(?P<access_type>list_proposals)/%(key_fields)s$', '%(module_package)s.%(module_name)s.list_proposals', "List of all Student Proposals for "), (r'^%(url_name)s/(?P<access_type>applicant)/%(scope)s$', '%(module_package)s.%(module_name)s.applicant', "%(name)s Creation via Accepted Application"), ] new_params['extra_django_patterns'] = patterns new_params['create_dynafields'] = [ {'name': 'link_id', 'base': forms.fields.CharField, 'label': 'Organization Link ID', }, ] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'description': forms.fields.CharField( widget=helper.widgets.FullTinyMCE( attrs={'rows': 25, 'cols': 100})), 'clean_description': cleaning.clean_html_content('description'), 'clean_ideas': cleaning.clean_url('ideas'), 'clean': cleaning.validate_new_group('link_id', 'scope_path', soc.logic.models.organization), } new_params['edit_extra_dynaproperties'] = { 'clean': cleaning.clean_refs(params if params else new_params, ['home_link_id']) } new_params['public_field_extra'] = lambda entity: { 'ideas': lists.urlize(entity.ideas, 'Click Here'), } params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params=params) self._params['public_field_keys'] = self._params['select_field_keys'] = [ "name", "link_id", "short_name", "ideas" ] self._params['public_field_names'] = self._params['select_field_names'] = [ "Name", "Link ID", "Short Name", "Ideas Page" ] self._params['select_field_extra'] = self._params['public_field_extra'] self._params['select_row_action'] = { "type": "redirect_custom", "parameters": dict(new_window=True), } self._params['select_row_extra'] = lambda entity: { "link": redirects.getRequestRedirectForRole( entity, params['mentor_url_name']) }
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.Checker(params) rights['create'] = ['checkIsDeveloper'] rights['edit'] = [('checkIsMyActiveRole', student_logic.logic)] rights['delete'] = ['checkIsDeveloper'] rights['apply'] = [ 'checkIsUser', ('checkIsActivePeriod', ['student_signup', 'scope_path', program_logic.logic]), ('checkIsNotParticipatingInProgramInScope', [program_logic.logic, student_logic.logic, org_admin_logic.logic, mentor_logic.logic]), ] rights['manage'] = [('checkIsMyActiveRole', student_logic.logic)] new_params = {} new_params['logic'] = soc.logic.models.student.logic new_params['group_logic'] = program_logic.logic new_params['group_view'] = program_view.view new_params['rights'] = rights new_params['scope_view'] = program_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['manage_redirect'] = redirects.getUserRolesRedirect new_params['name'] = "Student" new_params['module_name'] = "student" new_params['sidebar_grouping'] = 'Students' new_params['create_template'] = 'soc/student/edit.html' new_params['edit_template'] = 'soc/student/edit.html' new_params['public_field_keys'] = ["name", "link_id", "scope_path"] new_params['public_field_names'] = ["Student Name", "Student ID", "Program ID"] # add apply pattern patterns = [(r'^%(url_name)s/(?P<access_type>apply)/%(scope)s$', '%(module_package)s.%(module_name)s.apply', 'Become a %(name)s'),] new_params['extra_django_patterns'] = patterns new_params['extra_dynaexclude'] = ['agreed_to_tos', 'school'] current_year = time.gmtime().tm_year # the current year is not the minimum because a program could span # more than one year allowed_years = range(current_year-1, current_year+20) view_logic = params['logic'] if params else new_params['logic'] new_params['create_extra_dynaproperties'] = { 'expected_graduation': forms.TypedChoiceField( choices=[(x,x) for x in allowed_years], coerce=lambda val: int(val) ), 'clean': cleaning.validate_student(view_logic.getScopeLogic().logic), 'school_home_page': forms.fields.URLField(required=True), 'clean_school_home_page': cleaning.clean_url('school_home_page'), } new_params['create_dynafields'] = [ {'name': 'scope_path', 'base': forms.fields.CharField, 'widget': forms.HiddenInput, 'required': True, }, {'name': 'student_agreement', 'base': forms.fields.CharField, 'required': False, 'widget': widgets.AgreementField, 'group': ugettext("5. Terms of Service"), }, {'name': 'agreed_to_student_agreement', 'base': forms.fields.BooleanField, 'initial': False, 'required':True, 'label': ugettext('I agree to the Student Agreement'), 'group': ugettext("5. Terms of Service"), }, ] # only if subclassed, so params is not empty new_params['show_in_roles_overview'] = bool(params) params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params=params) params = self.getParams() # create and store the special form for users updated_fields = { 'link_id': forms.CharField(widget=forms.HiddenInput, required=True), 'clean_link_id': cleaning.clean_user_is_current('link_id'), } user_create_form = dynaform.extendDynaForm( dynaform = params['create_form'], dynaproperties = updated_fields) params['user_create_form'] = user_create_form params['admin_field_keys'].extend([ 'school_name', 'school_country', 'school_home_page', 'school_type', 'major', 'degree', 'grade', 'expected_graduation', 'program_knowledge', 'can_we_contact_you']) params['admin_field_names'].extend([ 'School Name', 'School Country', 'School Homepage', 'School Type', 'Major', 'Degree', 'Grade', 'Expected Graduation Year', 'How did you hear about us?', 'Allowed to Contact?']) params['admin_field_hidden'].extend([ 'school_name', 'school_country', 'school_home_page', 'school_type', 'major', 'degree', 'grade', 'expected_graduation', 'program_knowledge', 'can_we_contact_you'])
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.Checker(params) rights['any_access'] = ['allow'] rights['create'] = ['checkIsDeveloper'] rights['edit'] = ['checkIsDeveloper'] rights['delete'] = ['checkIsDeveloper'] rights['show'] = ['allow'] rights['list'] = ['checkIsDeveloper'] rights['manage'] = [('checkHasActiveRoleForScope', org_admin_logic), ('checkStudentProjectHasStatus', [['accepted', 'mid_term_passed']])] rights['manage_overview'] = [('checkHasActiveRoleForScope', org_admin_logic)] # TODO lack of better name here! rights['st_edit'] = ['checkIsMyStudentProject', ('checkStudentProjectHasStatus', [['accepted', 'mid_term_passed', 'passed']]) ] new_params = {} new_params['logic'] = soc.logic.models.student_project.logic new_params['rights'] = rights new_params['name'] = "Student Project" new_params['url_name'] = "student_project" new_params['sidebar_grouping'] = 'Students' new_params['scope_view'] = org_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['no_create_with_key_fields'] = True new_params['extra_dynaexclude'] = ['program', 'status', 'link_id', 'mentor', 'additional_mentors', 'student'] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'public_info': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), 'student_id': forms.CharField(label='Student Link ID', required=True), 'mentor_id': forms.CharField(label='Mentor Link ID', required=True), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_public_info': cleaning.clean_html_content('public_info'), 'clean_student': cleaning.clean_link_id('student'), 'clean_mentor': cleaning.clean_link_id('mentor'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean_feed_url': cleaning.clean_feed_url, 'clean': cleaning.validate_student_project('scope_path', 'mentor_id', 'student_id') } new_params['edit_extra_dynaproperties'] = { 'link_id': forms.CharField(widget=forms.HiddenInput), } patterns = [ (r'^%(url_name)s/(?P<access_type>manage_overview)/%(scope)s$', 'soc.views.models.%(module_name)s.manage_overview', 'Overview of %(name_plural)s to Manage for'), (r'^%(url_name)s/(?P<access_type>manage)/%(key_fields)s$', 'soc.views.models.%(module_name)s.manage', 'Manage %(name)s'), (r'^%(url_name)s/(?P<access_type>st_edit)/%(key_fields)s$', 'soc.views.models.%(module_name)s.st_edit', 'Edit my %(name)s'), ] new_params['extra_django_patterns'] = patterns new_params['edit_template'] = 'soc/student_project/edit.html' new_params['manage_template'] = 'soc/student_project/manage.html' params = dicts.merge(params, new_params) super(View, self).__init__(params=params) # create the form that students will use to edit their projects dynaproperties = { 'public_info': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_public_info': cleaning.clean_html_content('public_info'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean_feed_url': cleaning.clean_feed_url, } student_edit_form = dynaform.newDynaForm( dynabase = self._params['dynabase'], dynamodel = self._params['logic'].getModel(), dynaexclude = self._params['create_dynaexclude'], dynaproperties = dynaproperties, ) self._params['student_edit_form'] = student_edit_form
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.GSoCChecker(params) rights['any_access'] = ['allow'] rights['show'] = ['allow'] rights['create'] = ['checkIsDeveloper'] rights['edit'] = [('checkHasRoleForKeyFieldsAsScope', org_admin_logic), ('checkGroupIsActiveForLinkId', org_logic)] rights['delete'] = ['checkIsDeveloper'] rights['home'] = ['allow'] rights['public_list'] = ['allow'] rights['applicant'] = [('checkIsOrgAppAccepted', org_app_logic)] rights['apply_mentor'] = ['checkIsUser'] rights['list_requests'] = [('checkHasRoleForKeyFieldsAsScope', org_admin_logic)] rights['list_roles'] = [('checkHasRoleForKeyFieldsAsScope', org_admin_logic)] rights['list_proposals'] = [ ('checkHasAny', [[('checkHasRoleForKeyFieldsAsScope', [org_admin_logic, ['active', 'inactive']]), ('checkHasRoleForKeyFieldsAsScope', [mentor_logic, ['active', 'inactive']])]]) ] new_params = {} new_params['logic'] = org_logic new_params['rights'] = rights new_params['scope_view'] = program_view new_params['name'] = "GSoC Organization" new_params['module_name'] = "organization" new_params['sidebar_grouping'] = 'Organizations' new_params['module_package'] = 'soc.modules.gsoc.views.models' new_params['url_name'] = 'gsoc/org' new_params['document_prefix'] = 'gsoc_org' new_params['mentor_role_name'] = 'gsoc_mentor' new_params['mentor_url_name'] = 'gsoc/mentor' new_params['org_admin_role_name'] = 'gsoc_org_admin' patterns = [] patterns += [ (r'^org_tags/(?P<access_type>pick)$', '%(module_package)s.%(module_name)s.pick_suggested_tags', "Pick a list of suggested tags."), ] new_params['extra_django_patterns'] = patterns new_params['extra_dynaexclude'] = [ 'slots', 'slots_calculated', 'nr_applications', 'nr_mentors' ] new_params['create_extra_dynaproperties'] = { 'tags': widgets.ReferenceField( required=False, reference_url='org_tags', label=ugettext('Tags'), help_text=ugettext("A list of comma seperated tags"), example_text="e.g. python, django, appengine", filter=['scope_path'], group="1. Public Info"), 'clean_tags': gsoc_cleaning.cleanTagsList('tags', gsoc_cleaning.COMMA_SEPARATOR), 'contrib_template': forms.fields.CharField(widget=helper.widgets.FullTinyMCE( attrs={ 'rows': 25, 'cols': 100 })), 'clean_contrib_template': cleaning.clean_html_content('contrib_template'), 'clean_facebook': cleaning.clean_url('facebook'), 'clean_twitter': cleaning.clean_url('twitter'), 'clean_blog': cleaning.clean_url('blog'), } new_params['org_app_logic'] = org_app_logic params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params) self._params['public_field_keys'].append('tags') self._params['public_field_names'].append("Tags") self._params['public_field_extra'] = lambda entity: { 'ideas': lists.urlize(entity.ideas, 'Click Here'), 'tags': entity.tags_string(entity.org_tag), } self._params['select_field_extra'] = self._params['public_field_extra']
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Args: params: This dictionary should be filled with the parameters """ new_params = {} patterns = params.get('extra_django_patterns') if not patterns: patterns = [] if params.get('allow_requests_and_invites'): # add patterns concerning requests and invites patterns += [ (r'^%(url_name)s/(?P<access_type>invite)/%(scope)s$', '%(module_package)s.%(module_name)s.invite', 'Create invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>accept_invite)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.accept_invite', 'Accept invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>process_request)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.process_request', 'Process request'), (r'^%(url_name)s/(?P<access_type>request)/%(scope)s$', '%(module_package)s.%(module_name)s.role_request', 'Create a Request to become %(name)s') ] elif params.get('allow_invites'): # add patterns concerning only invites patterns += [ (r'^%(url_name)s/(?P<access_type>invite)/%(scope)s$', '%(module_package)s.%(module_name)s.invite', 'Create invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>accept_invite)/(?P<id>[0-9]*)$', '%(module_package)s.%(module_name)s.accept_invite', 'Accept invite for %(name)s'), (r'^%(url_name)s/(?P<access_type>process_request)/%(scope)s/%(lnp)s$', '%(module_package)s.%(module_name)s.process_request', 'Process request for %(name)s') ] # add manage pattern patterns += [ (r'^%(url_name)s/(?P<access_type>manage)/%(scope)s/%(lnp)s$', '%(module_package)s.%(module_name)s.manage', 'Manage a %(name)s'), ] new_params['extra_django_patterns'] = patterns new_params['scope_redirect'] = redirects.getInviteRedirect new_params['manage_redirect'] = redirects.getListRolesRedirect new_params['create_template'] = 'soc/role/edit.html' new_params['edit_template'] = 'soc/role/edit.html' new_params['create_extra_dynaproperties'] = { 'latitude': forms.fields.FloatField(widget=forms.HiddenInput, required=False), 'longitude': forms.fields.FloatField(widget=forms.HiddenInput, required=False), 'email': forms.fields.EmailField(required=True), 'clean_link_id': cleaning.clean_existing_user('link_id'), 'clean_given_name': cleaning.clean_ascii_only('given_name'), 'clean_surname': cleaning.clean_ascii_only('surname'), 'clean_phone': cleaning.clean_phone_number('phone'), 'clean_res_street': cleaning.clean_ascii_only('res_street'), 'clean_res_city': cleaning.clean_ascii_only('res_city'), 'clean_res_state': cleaning.clean_ascii_only('res_state'), 'clean_res_postalcode': cleaning.clean_ascii_only('res_postalcode'), 'clean_ship_street': cleaning.clean_ascii_only('ship_street'), 'clean_ship_city': cleaning.clean_ascii_only('ship_city'), 'clean_ship_state': cleaning.clean_ascii_only('ship_state'), 'clean_ship_postalcode': cleaning.clean_ascii_only('ship_postalcode'), 'clean_home_page': cleaning.clean_url('home_page'), 'clean_blog': cleaning.clean_url('blog'), 'clean_photo_url': cleaning.clean_url('photo_url'), 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), } new_params['extra_dynaexclude'] = [ 'user', 'status', 'agreed_to_tos_on' ] params = dicts.merge(params, new_params, sub_merge=True) super(View, self).__init__(params=params) # add manage template template = 'soc/%(module_name)s/manage.html' % self._params self._params['manage_template'] = template if self._params.get('show_in_roles_overview'): # add to roles overview addRole(self)
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.GSoCChecker(params) rights['any_access'] = ['allow'] rights['create'] = ['checkIsDeveloper'] rights['edit'] = ['checkIsDeveloper'] rights['delete'] = ['checkIsDeveloper'] rights['show'] = ['allow'] rights['list'] = ['checkIsDeveloper'] rights['manage'] = [('checkHasRoleForScope', [org_admin_logic, ['active', 'inactive']]), ('checkStudentProjectHasStatus', [['accepted', 'failed', 'completed', 'withdrawn']])] rights['manage_overview'] = [ ('checkHasAny', [ [('checkHasRoleForScope', [org_admin_logic, ['active', 'inactive']]), ('checkHasRoleForScope', [mentor_logic, ['active', 'inactive']]) ]])] # TODO: lack of better name here! rights['st_edit'] = [ 'checkCanEditStudentProjectAsStudent', ('checkStudentProjectHasStatus', [['accepted', 'completed']]) ] rights['overview'] = [('checkIsHostForProgram', [program_logic])] new_params = {} new_params['logic'] = project_logic new_params['rights'] = rights new_params['name'] = 'Student Project' new_params['url_name'] = 'gsoc/student_project' new_params['module_package'] = 'soc.modules.gsoc.views.models' new_params['sidebar_grouping'] = 'Students' new_params['scope_view'] = org_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['no_create_with_key_fields'] = True new_params['extra_dynaexclude'] = ['program', 'status', 'link_id', 'mentor', 'additional_mentors', 'student', 'passed_evaluations', 'failed_evaluations'] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'public_info': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), 'student_id': forms.CharField(label='Student Link ID', required=True), 'mentor_id': forms.CharField(label='Mentor Link ID', required=True), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_public_info': cleaning.clean_html_content('public_info'), 'clean_student': cleaning.clean_link_id('student'), 'clean_mentor': cleaning.clean_link_id('mentor'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean_feed_url': cleaning.clean_feed_url('feed_url'), 'clean': cleaning.validate_student_project('scope_path', 'mentor_id', 'student_id') } new_params['edit_extra_dynaproperties'] = { 'link_id': forms.CharField(widget=forms.HiddenInput), } patterns = [ (r'^%(url_name)s/(?P<access_type>manage_overview)/%(scope)s$', 'soc.modules.gsoc.views.models.%(module_name)s.manage_overview', 'Overview of %(name_plural)s to Manage for'), (r'^%(url_name)s/(?P<access_type>manage)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.manage', 'Manage %(name)s'), (r'^%(url_name)s/(?P<access_type>st_edit)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.st_edit', 'Edit my %(name)s'), (r'^%(url_name)s/(?P<access_type>overview)/(?P<scope_path>%(ulnp)s)/%(lnp)s$', 'soc.modules.gsoc.views.models.%(module_name)s.overview', 'Overview of all %(name_plural)s for'), ] new_params['extra_django_patterns'] = patterns new_params['edit_template'] = 'soc/student_project/edit.html' new_params['manage_template'] = 'soc/student_project/manage.html' new_params['public_field_prefetch'] = ['mentor', 'student', 'scope'] new_params['public_field_extra'] = lambda entity: { 'student': entity.student.name(), 'mentor': entity.mentor.name(), 'org': entity.scope.name, } new_params['public_field_keys'] = ['student', 'title', 'mentor', 'org', 'status'] new_params['public_field_names'] = ['Student', 'Title', 'Mentor', 'Organization', 'Status'] new_params['org_home_field_prefetch'] = ['mentor', 'student'] new_params['org_home_field_extra'] = lambda entity: { 'student': entity.student.name(), 'mentor': ', '.join( mentor.name() for mentor in [entity.mentor] + db.get(entity.additional_mentors)) } new_params['org_home_field_keys'] = ['student', 'title', 'mentor', 'status'] new_params['org_home_field_names'] = ['Student', 'Title', 'Mentor', 'Status'] # define the list redirect action to show the notification new_params['public_row_extra'] = new_params[ 'org_home_row_extra'] = lambda entity: { 'link': redirects.getPublicRedirect(entity, new_params) } new_params['org_home_row_action'] = { 'type': 'redirect_custom', 'parameters': dict(new_window=False), } new_params['admin_field_prefetch'] = ['mentor', 'student', 'scope'] new_params['admin_field_extra'] = lambda entity: { 'student': entity.student.name(), 'mentor': entity.mentor.name(), 'student_id': entity.student.link_id } new_params['admin_field_keys'] = ['student', 'title', 'mentor', 'status', 'student_id'] new_params['admin_field_names'] = ['Student', 'Title', 'Mentor', 'Status', 'Student Link ID'] new_params['admin_field_hidden'] = ['student_id'] new_params['admin_conf_extra'] = { 'multiselect': True, } new_params['admin_button_global'] = [ { 'bounds': [1,'all'], 'id': 'withdraw', 'caption': 'Withdraw Project', 'type': 'post', 'parameters': { 'url': '', 'keys': ['key'], 'refresh': 'current', } }, { 'bounds': [1,'all'], 'id': 'accept', 'caption': 'Accept Project', 'type': 'post', 'parameters': { 'url': '', 'keys': ['key'], 'refresh': 'current', } }] params = dicts.merge(params, new_params) super(View, self).__init__(params=params) # create the form that students will use to edit their projects dynaproperties = { 'public_info': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_public_info': cleaning.clean_html_content('public_info'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean_feed_url': cleaning.clean_feed_url('feed_url'), } student_edit_form = dynaform.newDynaForm( dynabase = self._params['dynabase'], dynamodel = self._params['logic'].getModel(), dynaexclude = self._params['create_dynaexclude'], dynaproperties = dynaproperties, ) self._params['student_edit_form'] = student_edit_form
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.GSoCChecker(params) rights['create'] = ['checkIsDeveloper'] rights['edit'] = [('checkCanStudentPropose', ['scope_path', False]), ('checkRoleAndStatusForStudentProposal', [['proposer'], ['active'], ['new', 'pending', 'invalid']])] rights['delete'] = ['checkIsDeveloper'] rights['private'] = [ ('checkRoleAndStatusForStudentProposal', [['proposer', 'org_admin', 'mentor', 'host'], ['active', 'inactive'], ['new', 'pending', 'accepted', 'rejected', 'invalid']])] rights['show'] = ['checkIsStudentProposalPubliclyVisible'] rights['comment'] = [ ('checkRoleAndStatusForStudentProposal', [['org_admin', 'mentor', 'host'], ['active', 'inactive'], ['new', 'pending', 'accepted', 'rejected', 'invalid']])] rights['list'] = ['checkIsDeveloper'] rights['list_orgs'] = [ ('checkIsStudent', ['scope_path', ['active']]), ('checkCanStudentPropose', ['scope_path', False])] rights['list_self'] = [ ('checkIsStudent', ['scope_path', ['active', 'inactive']])] rights['apply'] = [ ('checkIsStudent', ['scope_path', ['active']]), ('checkCanStudentPropose', ['scope_path', True])] rights['review'] = [ ('checkIsBeforeEvent', ['accepted_students_announced_deadline', None, program_logic.logic]), ('checkRoleAndStatusForStudentProposal', [['org_admin', 'mentor', 'host'], ['active'], ['new', 'pending', 'accepted', 'invalid']])] new_params = {} new_params['logic'] = student_proposal_logic.logic new_params['rights'] = rights new_params['name'] = "Student Proposal" new_params['url_name'] = "gsoc/student_proposal" new_params['module_package'] = 'soc.modules.gsoc.views.models' new_params['sidebar_grouping'] = 'Students' new_params['scope_view'] = student_view new_params['scope_redirect'] = redirects.getCreateRedirect new_params['no_create_with_key_fields'] = True patterns = [ (r'^%(url_name)s/(?P<access_type>apply)/%(scope)s$', 'soc.modules.gsoc.views.models.%(module_name)s.apply', 'Create a new %(name)s'), (r'^%(url_name)s/(?P<access_type>list_self)/%(scope)s$', 'soc.modules.gsoc.views.models.%(module_name)s.list_self', 'List my %(name_plural)s'), (r'^%(url_name)s/(?P<access_type>list_orgs)/%(scope)s$', 'soc.modules.gsoc.views.models.%(module_name)s.list_orgs', 'List my %(name_plural)s'), (r'^%(url_name)s/(?P<access_type>review)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.review', 'Review %(name)s'), (r'^%(url_name)s/(?P<access_type>public)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.public', 'Public view for %(name)s'), (r'^%(url_name)s/(?P<access_type>private)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.private', 'Private view of %(name)s'), (r'^%(url_name)s/(?P<access_type>comment)/%(key_fields)s$', 'soc.modules.gsoc.views.models.%(module_name)s.comment', 'Comment view of %(name)s'), ] new_params['extra_django_patterns'] = patterns new_params['extra_dynaexclude'] = ['org', 'program', 'score', 'status', 'mentor', 'link_id', 'possible_mentors'] new_params['create_extra_dynaproperties'] = { 'content': forms.fields.CharField(required=True, widget=widgets.FullTinyMCE(attrs={'rows': 25, 'cols': 100})), 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'organization': forms.CharField(label='Organization Link ID', required=True), 'clean_abstract': cleaning.clean_content_length('abstract'), 'clean_content': cleaning.clean_html_content('content'), 'clean_organization': cleaning.clean_link_id('organization'), 'clean_additional_info': cleaning.clean_url('additional_info'), 'clean': cleaning.validate_student_proposal('organization', 'scope_path', student_logic, org_logic), } new_params['edit_extra_dynaproperties'] = { 'organization': forms.CharField(label='Organization Link ID', widget=widgets.ReadOnlyInput), 'link_id': forms.CharField(widget=forms.HiddenInput) } new_params['comment_template'] = 'soc/student_proposal/comment.html' new_params['edit_template'] = 'soc/student_proposal/edit.html' new_params['private_template'] = 'soc/student_proposal/private.html' new_params['review_template'] = 'soc/student_proposal/review.html' new_params['public_template'] = 'soc/student_proposal/public.html' new_params['review_after_deadline_template'] = \ 'soc/student_proposal/review_after_deadline.html' new_params['public_field_extra'] = lambda entity: { "student": entity.scope.name(), "organization_name": entity.org.name, } new_params['public_field_keys'] = [ "title", "student", "organization_name", "last_modified_on", ] new_params['public_field_names'] = [ "Title", "Student", "Organization Name", "Last Modified On", ] params = dicts.merge(params, new_params) super(View, self).__init__(params=params) # create the special form for students dynafields = [ {'name': 'organization', 'base': forms.CharField, 'label': 'Organization Link ID', 'widget': widgets.ReadOnlyInput(), 'required': False, }, ] dynaproperties = params_helper.getDynaFields(dynafields) student_create_form = dynaform.extendDynaForm( dynaform=self._params['create_form'], dynaproperties=dynaproperties) self._params['student_create_form'] = student_create_form # create the special form for public review base_fields = [ {'name': 'comment', 'base': forms.CharField, 'widget': widgets.FullTinyMCE(attrs={'rows': 10, 'cols': 40}), 'label': 'Comment', 'required': False, 'example_text': 'Caution, you will not be able to edit your comment!', }, ] dynafields = [field.copy() for field in base_fields] dynaproperties = params_helper.getDynaFields(dynafields) dynaproperties['clean_comment'] = cleaning.clean_html_content('comment') public_review_form = dynaform.newDynaForm(dynamodel=None, dynabase=helper.forms.BaseForm, dynainclude=None, dynaexclude=None, dynaproperties=dynaproperties) self._params['public_review_form'] = public_review_form # create the special form for mentors when the scoring is locked # this fields is used by the on-page JS base_fields.append( {'name': 'public', 'base': forms.BooleanField, 'label': 'Review visible to Student', 'initial': False, 'required': False, 'help_text': 'By ticking this box the score will not be assigned, ' 'and the review will be visible to the student.', }) dynafields = [field.copy() for field in base_fields] dynaproperties = params_helper.getDynaFields(dynafields) dynaproperties['clean_comment'] = cleaning.clean_html_content('comment') locked_review_form = dynaform.newDynaForm(dynamodel=None, dynabase=helper.forms.BaseForm, dynainclude=None, dynaexclude=None, dynaproperties=dynaproperties) self._params['locked_review_form'] = locked_review_form # create the form for mentors when the scoring is unlocked base_fields.append( {'name': 'score', 'base': forms.ChoiceField, 'label': 'Score', 'initial': 0, 'required': False, 'passthrough': ['initial', 'required', 'choices'], 'choices': [(-4,'-4'), (-3,'-3'), (-2,'-2'), (-1,'-1'), (0,'No score'), (1,'1'), (2,'2'), (3,'3'), (4,'4')] }) dynafields = [field.copy() for field in base_fields] dynaproperties = params_helper.getDynaFields(dynafields) dynaproperties['clean_comment'] = cleaning.clean_html_content('comment') mentor_review_form = dynaform.newDynaForm(dynamodel=None, dynabase=helper.forms.BaseForm, dynainclude=None, dynaexclude=None, dynaproperties=dynaproperties) self._params['mentor_review_form'] = mentor_review_form self._show_review_not_appeared_msg = False
def __init__(self, params=None): """Defines the fields and methods required for the base View class to provide the user with list, public, create, edit and delete views. Params: params: a dict with params for this View """ rights = access.Checker(params) rights['create'] = [('checkHasRoleForScope', host_logic.logic)] rights['edit'] = [('checkIsMyActiveRole', host_logic.logic)] rights['invite'] = [('checkHasRoleForScope', host_logic.logic)] rights['list'] = ['checkIsDeveloper'] rights['accept_invite'] = [('checkIsMyRequestWithStatus', [['group_accepted']])] rights['process_request'] = [('checkCanProcessRequest', [[host_logic.logic]])] rights['manage'] = [('checkIsAllowedToManageRole', [host_logic.logic, host_logic.logic])] new_params = {} new_params['rights'] = rights new_params['logic'] = soc.logic.models.host.logic new_params['group_logic'] = sponsor_logic.logic new_params['group_view'] = soc.views.models.sponsor.view new_params['scope_view'] = sponsor_view new_params['name'] = "Program Administrator" new_params['module_name'] = "host" new_params['sidebar_grouping'] = 'Programs' new_params['extra_dynaexclude'] = ['agreed_to_tos'] new_params['create_extra_dynaproperties'] = { 'scope_path': forms.CharField(widget=forms.HiddenInput, required=True), 'clean_link_id': cleaning.clean_existing_user('link_id'), 'clean_home_page': cleaning.clean_url('home_page'), 'clean_blog': cleaning.clean_url('blog'), 'clean_photo_url': cleaning.clean_url('photo_url') } new_params['allow_invites'] = True new_params['show_in_roles_overview'] = True new_params['public_field_keys'] = ["name", "link_id", "scope_path"] new_params['public_field_names'] = [ "Name", "Administrator ID", "Program Owner" ] params = dicts.merge(params, new_params) super(View, self).__init__(params=params) # register the role with the group_view self._params['group_view'].registerRole(self._logic.role_name, self) # create and store the special form for invited users updated_fields = { 'link_id': forms.CharField(widget=widgets.ReadOnlyInput(), required=False) } invited_create_form = dynaform.extendDynaForm( dynaform=self._params['create_form'], dynaproperties=updated_fields) self._params['invited_create_form'] = invited_create_form