Beispiel #1
0
class ProjectUpdateForm(forms.ModelForm):
    """Form for updating a project instance"""

    tags = TaggitField(widget=TaggitWidget(
        'TagAutocomplete', attrs={'placeholder': 'Search tags'}),
                       help_text='Separate tags with commas.',
                       required=False)

    class Meta:
        model = Project
        fields = [
            'title',
            'summary',
            'image',
            'tags',
            'description',
            'contributors',
            'requests',
            'articles',
        ]
        widgets = {
            'description':
            forms.Textarea(attrs={'class': 'prose-editor'}),
            'contributors':
            autocomplete_light.MultipleChoiceWidget('UserAutocomplete'),
            'requests':
            autocomplete_light.MultipleChoiceWidget('FOIARequestAutocomplete'),
            'articles':
            autocomplete_light.MultipleChoiceWidget('ArticleAutocomplete'),
        }
        help_texts = {
            'title': 'Changing the title will change the URL of your project.',
        }
Beispiel #2
0
class NetworkTagForm(forms.Form):
    tags = TaggitField(widget=TaggitWidget("TagAutocomplete"))

    def __init__(self, *args, **kwargs):
        super(NetworkTagForm, self).__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.form_tag = False
Beispiel #3
0
class ResourceBaseAdminForm(autocomplete_light.ModelForm):
    # We need to specify autocomplete='TagAutocomplete' or admin views like
    # /admin/maps/map/2/ raise exceptions during form rendering.
    # But if we specify it up front, TaggitField.__init__ throws an exception
    # which prevents app startup. Therefore, we defer setting the widget until
    # after that's done.
    keywords = TaggitField(required=False)
    keywords.widget = TaggitWidget(autocomplete='HierarchicalKeywordAutocomplete')
Beispiel #4
0
 class Meta(object):
     """Meta options."""
     model = Resource
     widgets = {
         'tags':
         TaggitWidget('TagAutocomplete',
                      attrs={'placeholder': "type tags here"})
     }
     attachment = forms.FileField(widget=forms.FileInput)
     fields = ['attachment', 'name', 'groups', 'tags']
Beispiel #5
0
 class Meta:
     model = Contribution
     fields = [x[0] for x in Contribution.field_order if x[1]]
     widgets = {
         'dc_subject': TaggitWidget('TagAutocomplete'),
         'skos_preflabel_vcc': CheckboxSelectMultiple
     }
     autocomplete_names = {
         'skos_preflabel_technique': 'TADIRAHTechniqueAutocomplete',
         'skos_preflabel_activity': 'TADIRAHActivityAutocomplete',
         'skos_preflabel_object': 'TADIRAHObjectAutocomplete',
         'skos_preflabel_discipline': 'DisciplineAutocomplete',
         'dc_contributor': 'DcContributorAutocomplete',
         'dc_creator': 'DcCreatorAutocomplete'
     }
Beispiel #6
0
class ProjectCreateForm(forms.ModelForm):
    """Form for the basic fields of a project."""

    tags = TaggitField(widget=TaggitWidget(
        'TagAutocomplete',
        attrs={
            'placeholder': 'Search tags',
            'data-autocomplete-minimum-characters': 1
        }),
                       help_text='Separate tags with commas.',
                       required=False)

    class Meta:
        model = Project
        fields = ['title', 'summary', 'image', 'tags']
        help_texts = {
            'summary': 'A short description of the project and its goals.',
            'image': 'Image should be large and high-resolution.'
        }
Beispiel #7
0
class TrainingForm(ModelForm):
    """
    Form to add/update a training
    """

    _date_widget_options = {
        "icon_attrs": {"class": "fa fa-calendar"},
        "attrs": {"class": "form-control input-sm"},
        "format": "%Y-%m-%d %H:%M",
        # Options for the datetimepickers are not set here on purpose.
        # They are set in the metadata_form_js.html template because
        # bootstrap-datetimepicker uses jquery for its initialization
        # and we need to ensure it is available before trying to
        # instantiate a new datetimepicker. This could probably be improved.
        "options": False,
        }
    publication_date = forms.DateTimeField(
        localize=True,
        widget=DateTimePicker(**_date_widget_options)
    )
    keywords = TaggitField(
        required=False,
        help_text=_("A space or comma-separated list of keywords"),
        widget=TaggitWidget('TagAutocomplete'))

    def __init__(self, *args, **kwargs):
        super(TrainingForm, self).__init__(*args, **kwargs)
        for field in self.fields:
            help_text = self.fields[field].help_text
            self.fields[field].help_text = None
            if help_text != '':
                self.fields[field].widget.attrs.update(
                    {
                        'class': 'has-popover',
                        'data-content': help_text,
                        'data-placement': 'right',
                        'data-container': 'body',
                        'data-html': 'true'})

    class Meta:
        model = Training
Beispiel #8
0
class ResourceBaseForm(TranslationModelForm):
    """Base form for metadata, should be inherited by childres classes of ResourceBase"""

    owner = forms.ModelChoiceField(
        empty_label="Owner",
        label="Owner",
        required=False,
        queryset=Profile.objects.exclude(username='******'),
        widget=autocomplete_light.ChoiceWidget('ProfileAutocomplete'))

    _date_widget_options = {
        "icon_attrs": {
            "class": "fa fa-calendar"
        },
        "attrs": {
            "class": "form-control input-sm"
        },
        "format": "%Y-%m-%d %I:%M %p",
        # Options for the datetimepickers are not set here on purpose.
        # They are set in the metadata_form_js.html template because
        # bootstrap-datetimepicker uses jquery for its initialization
        # and we need to ensure it is available before trying to
        # instantiate a new datetimepicker. This could probably be improved.
        "options": False,
    }
    date = forms.DateTimeField(localize=True,
                               input_formats=['%Y-%m-%d %I:%M %p'],
                               widget=DateTimePicker(**_date_widget_options))
    temporal_extent_start = forms.DateTimeField(
        required=False,
        localize=True,
        input_formats=['%Y-%m-%d %I:%M %p'],
        widget=DateTimePicker(**_date_widget_options))
    temporal_extent_end = forms.DateTimeField(
        required=False,
        localize=True,
        input_formats=['%Y-%m-%d %I:%M %p'],
        widget=DateTimePicker(**_date_widget_options))

    poc = forms.ModelChoiceField(
        empty_label="Person outside GeoNode (fill form)",
        label="Point Of Contact",
        required=False,
        queryset=Profile.objects.exclude(username='******'),
        widget=autocomplete_light.ChoiceWidget('ProfileAutocomplete'))

    metadata_author = forms.ModelChoiceField(
        empty_label="Person outside GeoNode (fill form)",
        label="Metadata Author",
        required=False,
        queryset=Profile.objects.exclude(username='******'),
        widget=autocomplete_light.ChoiceWidget('ProfileAutocomplete'))

    keywords = TaggitField(
        required=False,
        help_text=_("A space or comma-separated list of keywords"),
        widget=TaggitWidget('TagAutocomplete'))

    regions = TreeNodeMultipleChoiceField(required=False,
                                          queryset=Region.objects.all(),
                                          level_indicator=u'___')
    regions.widget.attrs = {"size": 20}

    def __init__(self, *args, **kwargs):
        super(ResourceBaseForm, self).__init__(*args, **kwargs)
        for field in self.fields:
            help_text = self.fields[field].help_text
            self.fields[field].help_text = None
            if help_text != '':
                self.fields[field].widget.attrs.update({
                    'class': 'has-popover',
                    'data-content': help_text,
                    'data-placement': 'right',
                    'data-container': 'body',
                    'data-html': 'true'
                })

    class Meta:
        exclude = ('contacts', 'name', 'uuid', 'bbox_x0', 'bbox_x1', 'bbox_y0',
                   'bbox_y1', 'srid', 'category', 'csw_typename', 'csw_schema',
                   'csw_mdsource', 'csw_type', 'csw_wkt_geometry',
                   'metadata_uploaded', 'metadata_xml', 'csw_anytext',
                   'popular_count', 'share_count', 'thumbnail', 'charset',
                   'rating', 'detail_url')
Beispiel #9
0
class ResourceBaseAdminForm(autocomplete_light.ModelForm):
    keywords = TaggitField(widget=TaggitWidget('TagAutocomplete'),
                           required=False)
Beispiel #10
0
class GroupForm(SanitizeHTMLMixin, ModelForm):
    """Form for groups.models.Group."""
    category = forms.ModelChoiceField(label='Category',
                                      queryset=Category.objects.all())
    tags = TaggitField(widget=TaggitWidget(
        'TagAutocomplete', attrs={'placeholder': "type tags here"}),
                       required=False)
    display_location = forms.CharField(
        label="Display Location",
        help_text=("Optionally enter the location you'd like displayed on the "
                   "group description page."),
        required=False,
        widget=forms.TextInput(
            attrs={'placeholder': "i.e. West Loop, Chicago, IL"}))
    whitelist_users = forms.ModelMultipleChoiceField(
        widget=MultipleChoiceWidget('UserAutocomplete'),
        help_text=u'These users will always be allowed to send to this group.',
        required=False,
        queryset=get_user_model().objects.all())

    class Meta(object):
        """Meta options."""
        model = Group
        fields = [
            'category', 'description', 'tags', 'state', 'owners',
            'whitelist_users', 'featured', 'private', 'published', 'moderated',
            'member_list_published', 'display_location', 'latitude',
            'longitude', 'radius'
        ]
        widgets = {
            'latitude': forms.HiddenInput(),
            'longitude': forms.HiddenInput(),
            'radius': forms.HiddenInput(),
            'owners': MultipleChoiceWidget('UserAutocomplete'),
        }

    def clean_description(self):
        """Cleans the description field"""
        return self.sanitize_html(self.cleaned_data['description'])

    def clean_tags(self):
        """Clean the tags added into the form"""
        tags = self.cleaned_data['tags']
        invalid_tags = []
        valid_tags = Tag.objects.values_list('name', flat=True)
        for tag in tags:
            if tag not in valid_tags:
                invalid_tags.append(tag)
        if invalid_tags:
            self._errors['tags'] = self.error_class(
                ['These tags are invalid: %s.' % ', '.join(invalid_tags)])
        return tags

    def save(self, *args, **kwargs):
        """Save the form"""
        self.instance.tos_accepted_at = now()
        result = super(GroupForm, self).save(*args, **kwargs)

        # For each group owner, added them to the group
        if self.instance.pk:
            for owner in self.cleaned_data['owners']:
                add_user_to_group.delay(owner.pk, self.instance.pk)

        return result
Beispiel #11
0
class WFPDocumentForm(TranslationModelForm):
    """
    For to upload Static Maps.
    """
    permissions = forms.CharField(widget=HiddenInput(attrs={
        'name': 'permissions',
        'id': 'permissions'
    }),
                                  required=True)
    _date_widget_options = {
        "icon_attrs": {
            "class": "fa fa-calendar"
        },
        "attrs": {
            "class": "form-control input-sm"
        },
        "format": "%Y-%m-%d %H:%M",
        # Options for the datetimepickers are not set here on purpose.
        # They are set in the metadata_form_js.html template because
        # bootstrap-datetimepicker uses jquery for its initialization
        # and we need to ensure it is available before trying to
        # instantiate a new datetimepicker. This could probably be improved.
        "options": False,
    }
    date = forms.DateTimeField(localize=True,
                               widget=DateTimePicker(**_date_widget_options))
    keywords = TaggitField(
        required=False,
        help_text=_("A space or comma-separated list of keywords"),
        widget=TaggitWidget('TagAutocomplete'))

    def __init__(self, *args, **kwargs):
        super(WFPDocumentForm, self).__init__(*args, **kwargs)
        # we need to override help_text for title (comes from ResourceBase)
        title_help_text = _(
            'Please use the following convention: Country Name, Theme, Date - '
            'ex: Afghanistan, Snow Forecast, 17 - 23 February 2015')
        title_field = self.fields['title']
        title_field.help_text = title_help_text
        for field in self.fields:
            help_text = self.fields[field].help_text
            self.fields[field].help_text = None
            if help_text != '':
                self.fields[field].widget.attrs.update({
                    'class': 'has-popover',
                    'data-content': help_text,
                    'data-placement': 'right',
                    'data-container': 'body',
                    'data-html': 'true'
                })

    class Meta:
        model = WFPDocument
        fields = (
            'title',
            'doc_file',
            'source',
            'orientation',
            'page_format',
            'categories',
            'keywords',
            'regions',
            'last_version',
            'layers',
            'date',
        )

    def clean_doc_file(self):
        """
        Ensures the doc_file is valid.
        """
        doc_file = self.cleaned_data.get('doc_file')

        if doc_file and not os.path.splitext(doc_file.name)[1].lower()[1:] in (
                'gif', 'jpg', 'jpeg', 'pdf', 'png'):
            raise forms.ValidationError(_("This file type is not allowed"))

        return doc_file

    def clean_permissions(self):
        """
        Ensures the JSON field is JSON.
        """
        permissions = self.cleaned_data['permissions']

        try:
            return json.loads(permissions)
        except ValueError:
            raise forms.ValidationError(_("Permissions must be valid JSON."))
Beispiel #12
0

admin.site.register(TopicCategory, TopicCategoryAdmin)
admin.site.register(Region, RegionAdmin)
admin.site.register(SpatialRepresentationType, SpatialRepresentationTypeAdmin)
admin.site.register(RestrictionCodeType, RestrictionCodeTypeAdmin)
admin.site.register(ContactRole, ContactRoleAdmin)
admin.site.register(Link, LinkAdmin)
admin.site.register(Backup, BackupAdmin)
admin.site.register(License, LicenseAdmin)
admin.site.register(HierarchicalKeyword, HierarchicalKeywordAdmin)


class ResourceBaseAdminForm(ModelForm):
    # We need to specify autocomplete='TagAutocomplete' or admin views like
    # /admin/maps/map/2/ raise exceptions during form rendering.
    # But if we specify it up front, TaggitField.__init__ throws an exception
    # which prevents app startup. Therefore, we defer setting the widget until
    # after that's done.
    keywords = TaggitField(required=False)
<<<<<<< HEAD
<<<<<<< HEAD
    keywords.widget = TaggitWidget(autocomplete='HierarchicalKeywordAutocomplete')
=======
    keywords.widget = TaggitWidget(autocomplete='TagAutocomplete')
>>>>>>> 2c522ce5efd5757f4d94e63a543e24e9ac97805b
=======
    keywords.widget = TaggitWidget(
        autocomplete='HierarchicalKeywordAutocomplete')
>>>>>>> e7605f5980062789a1dfe0321b74882a9af32ed6