Project Sheet

Models

_images/project_sheet_models.png

Models for Project Sheet

class apps.project_sheet.models.Answer(*args, **kwargs)[source]

Answer(id, question_id, project_id)

class apps.project_sheet.models.AnswerTranslation(*args, **kwargs)

AnswerTranslation(id, content, language_code, master_id)

class apps.project_sheet.models.I4pProject(*args, **kwargs)[source]

Root object for a project. Holds only shared data

class apps.project_sheet.models.I4pProjectTranslation(*args, **kwargs)[source]

A translation of a project

class apps.project_sheet.models.Objective(*args, **kwargs)[source]

Objective(id)

class apps.project_sheet.models.ObjectiveTranslation(*args, **kwargs)

ObjectiveTranslation(id, name, language_code, master_id)

class apps.project_sheet.models.ProjectMember(*args, **kwargs)[source]

A team member of a project

class apps.project_sheet.models.ProjectPicture(*args, **kwargs)[source]

A picture illustrating a project (jpg, png accepted)

class apps.project_sheet.models.ProjectReference(*args, **kwargs)[source]

A reference, such as a book or URL, for a Project Sheet

class apps.project_sheet.models.ProjectVideo(*args, **kwargs)[source]

An embeddable Video for a project

class apps.project_sheet.models.Question(*args, **kwargs)[source]

A project question

class apps.project_sheet.models.QuestionTranslation(*args, **kwargs)

QuestionTranslation(id, content, language_code, master_id)

class apps.project_sheet.models.SiteTopic(*args, **kwargs)[source]

Topics allowed on a given site

class apps.project_sheet.models.TagCMS(*args, **kwargs)

TagCMS(id, placeholder_id, parent_id, position, language, plugin_type, creation_date, level, lft, rght, tree_id, cmsplugin_ptr_id, tag_id)

class apps.project_sheet.models.Topic(*args, **kwargs)[source]

A topic is a project type, aka. Template.

class apps.project_sheet.models.TopicTranslation(*args, **kwargs)

TopicTranslation(id, label, language_code, master_id)

apps.project_sheet.models.delete_parent_if_last_translation(sender, instance, **kwargs)[source]

When the last translation of a project is deleted, delete the project.

apps.project_sheet.models.get_projectpicture_path(aProjectPicture, filename)[source]

Generate a random UUID for a picture, use the uuid as the track name

apps.project_sheet.models.model

alias of I4pProject

Forms

Django Forms for a Project Sheet

class apps.project_sheet.forms.I4pProjectInfoForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False, instance=None)[source]

Edit the extra infos of a Project

class apps.project_sheet.forms.I4pProjectLocationForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False, instance=None)[source]

Edit the location info of a Project

class apps.project_sheet.forms.I4pProjectObjectivesForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False, instance=None)[source]

Edit objectives for a given Project

class apps.project_sheet.forms.I4pProjectStatusForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False, instance=None)[source]

Edit the status of a Project

class apps.project_sheet.forms.I4pProjectThemesForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False, instance=None)[source]

Edit themes for a given Project

class apps.project_sheet.forms.ProjectMemberChoiceField(queryset, empty_label=u'---------', cache_choices=False, required=True, widget=None, label=None, initial=None, help_text=None, to_field_name=None, *args, **kwargs)[source]

Show firstname and lastname instead of username if possible

class apps.project_sheet.forms.ProjectMemberForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False, instance=None)[source]

A member for a project

Views

Django Views for a Project Sheet

class apps.project_sheet.views.ProjectStartView(**kwargs)[source]

When one starts a project, after having selected a topic

class apps.project_sheet.views.ProjectTopicSelectView(**kwargs)[source]

Before starting a project, one needs to pick a topic

apps.project_sheet.views.project_sheet_add_media(request)[source]

Display a page where it is possible to submit either a video or picture Only call when the project is not yet created, else it’s project_sheet_show with add_media=True that is called.

apps.project_sheet.views.project_sheet_add_picture(request, slug=None)[source]

Add a picture to a project

apps.project_sheet.views.project_sheet_add_video(request, slug=None)[source]

Embed a video to a project

apps.project_sheet.views.project_sheet_create_translation(request, *args, **kwargs)[source]

Given a language and a slug, create a translation for a new language

apps.project_sheet.views.project_sheet_del_picture(request, slug, pic_id)[source]

Delete a picture from a project sheet

apps.project_sheet.views.project_sheet_del_video(request, slug, vid_id)[source]

Delete a video from a project sheet

apps.project_sheet.views.project_sheet_edit_field(request, field, slug=None, topic_slug=None)[source]

Edit a translatable field of a project (such as baseline)

FIXME This view is used for both project creation and editing. Should be splitted.

apps.project_sheet.views.project_sheet_edit_question(request, slug, question_id)[source]

Edit a question for a given project sheet translation

FIXME: Not sure if this is secure. Question may be assigned to projects that doesn’t link to them.

apps.project_sheet.views.project_sheet_edit_references(request, *args, **kwargs)[source]

Edit references of a project

Edit themes (using tags) of a given project sheet. Non-Ajax version.

apps.project_sheet.views.project_sheet_history(request, project_slug)[source]

Show the history of a project member

apps.project_sheet.views.project_sheet_list(request)[source]

Display a listing of all projects

apps.project_sheet.views.project_sheet_member_delete(request, project_slug, username)[source]

Delete a project member

apps.project_sheet.views.project_sheet_show(request, slug, add_media=False)[source]

Display a project sheet

Filters

Filter framework

class apps.project_sheet.filters.BestOfFilterForm(*args, **kwargs)[source]

Implements a filter on I4pProject best of

class apps.project_sheet.filters.FilterForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False)[source]

Filter base class

class apps.project_sheet.filters.FilterSet(filters)[source]

Filters container

class apps.project_sheet.filters.MyCheckboxSelectMultiple(attrs=None, choices=())[source]

Implements custom multi select checkbox widget FIXME: find source, maybe djangosnippets.org

class apps.project_sheet.filters.NameBaselineFilterForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False)[source]

Simulates a full-text search in either the baseline or the title.

class apps.project_sheet.filters.ProjectLocationFilterForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False)[source]

Implements a filter on I4pProject location

class apps.project_sheet.filters.ProjectObjectiveFilterForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False)[source]

Implements a filter on I4pProject objective

class apps.project_sheet.filters.ProjectProgressFilterForm(*args, **kwargs)[source]

Implements a filter on I4pProjectTranslation progression

class apps.project_sheet.filters.ProjectStatusFilterForm(*args, **kwargs)[source]

Implements a filter on I4pProject status

class apps.project_sheet.filters.ThemesFilterForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.util.ErrorList'>, label_suffix=':', empty_permitted=False)[source]

Implements a filter on I4pProjectTranslation themes (tags)

class apps.project_sheet.filters.TopicFilterForm(*args, **kwargs)[source]

Implements a filter on I4pProject topics

class apps.project_sheet.filters.WithMembersFilterForm(*args, **kwargs)[source]

Implements a filter on I4pProject including or not members

apps.project_sheet.filters.current_countries()[source]

Build the list of countries used in project location

Utils

Toolkit for a project sheet management

apps.project_sheet.utils.build_filters_and_context(request_data)[source]

Build the set of filter in order to include them in homepage and project list page

request : the GET variables passes to the view (i.e i4pbase.views.homepage or project_sheet.views.project_sheet_list)

Return : - the set of filters form - an extra context

apps.project_sheet.utils.create_parent_project(topic_slug)[source]

Create a parent project

apps.project_sheet.utils.create_project_translation(language_code, parent_project, default_title=None)[source]

Create a translation of a project.

apps.project_sheet.utils.fields_diff(previous_version, current_version, versionned_fields)[source]

Diff between two model fields

apps.project_sheet.utils.get_or_create_project_translation_by_slug(project_translation_slug, language_code, parent_project, default_title=None)[source]

Create a project translation for the given language_code with the given slug.

This version does need a parent. Beware: using it twice for the same language with a different slug can lead to duplicate projects. When possible, use the “_from_parent” version instead.

apps.project_sheet.utils.get_or_create_project_translation_from_parent(parent_project, language_code, default_title=None)[source]

Create a project translation for the given language_code, related to a parent project (language agnostic)

apps.project_sheet.utils.get_project_project_translation_recent_changes(queryset)[source]

Return the diff as a dict of the given version queryset

apps.project_sheet.utils.get_project_translation_by_any_translation_slug(project_translation_slug, prefered_language_code, site)

Get a translation of a given project, looking at slugs in any language

apps.project_sheet.utils.get_project_translation_by_slug(project_translation_slug, language_code)[source]

Get a translation of a given project

apps.project_sheet.utils.get_project_translation_from_parent(parent, language_code, fallback_language=None, fallback_any=False)[source]

Get a translation of a given project. If we have a fallback language, try to use it. If we also have fallback_any, then pick the first translation. Otherwise, raise a DoesNotExist exception

apps.project_sheet.utils.get_project_translations_from_parents(parents_qs, language_code, fallback_language='en', fallback_any=True)[source]

Same as above, but given a queryset of parents

URLs

#-- encoding: utf-8 --
from django.conf.urls.defaults import patterns, url
from django.views.decorators.cache import cache_page
from django.views.generic.simple import direct_to_template

from . import views
from . import ajax

import feeds

PROJECT_AUTHORIZED_FIELDS = "|".join([
    'title',
    'baseline',
    'about_section',
    'partners_section',
    'callto_section',
])

urlpatterns = patterns('',
    url(r'^add/$', views.ProjectTopicSelectView.as_view(), name='project_sheet-start'),
    url(r'^add/(?P<topic_slug>[-\w]+)/$', views.ProjectStartView.as_view(), name='project_sheet-start'),
    url(r'^list/$', views.project_sheet_list, name='project_sheet-list'),
    url(r'^recent-changes/$', views.ProjectRecentChangesView.as_view(), name='project_sheet-recent-changes'),

    url(r'^edit/(?P<topic_slug>[-\w]+)/(?P<field>(%s))/$' % PROJECT_AUTHORIZED_FIELDS, views.project_sheet_edit_field, name='project_sheet-edit-field'),
    url(r'^(?P<slug>[-\w]+)/edit/location/$', views.project_sheet_edit_location, name='project_sheet-instance-edit-location'),
    url(r'^(?P<slug>[-\w]+)/edit/status/$', ajax.project_sheet_edit_status, name='project_sheet-instance-edit-status'),
    url(r'^(?P<slug>[-\w]+)/edit/question/(?P<question_id>[\d]+)/$', views.project_sheet_edit_question, name='project_sheet-instance-edit-question'),
    url(r'^(?P<slug>[-\w]+)/edit/(?P<field>(%s))/$' % PROJECT_AUTHORIZED_FIELDS, views.project_sheet_edit_field, name='project_sheet-instance-edit-field'),


    url(r'^(?P<project_slug>[-\w]+)/edit/references/$', views.project_sheet_edit_references, name='project_sheet-instance-edit-references'),

    url(r'^(?P<project_slug>[-\w]+)/translate/$', views.project_sheet_create_translation, name='project_sheet-translate'),

    url(r'^(?P<project_slug>[-\w]+)/edit/related/$', views.project_sheet_edit_related, name='project_sheet-instance-edit-related'),
    #AJAX
    url(r'^(?P<project_slug>[-\w]+)/update/related/$', ajax.project_update_related, name='project_sheet-project_update_related'),
    
    url(r'^(?P<project_slug>[-\w]+)/history/$', views.project_sheet_history, name='project_sheet-history'),

    url(r'^(?P<slug>[-\w]+)/$', views.project_sheet_show, name='project_sheet-show'),
    url(r'^(?P<slug>[-\w]+)/add/media/$', views.project_sheet_show, {'add_media' : True}, name='project_sheet-instance-add-media'),

    url(r'^add/media/$', views.project_sheet_add_media, name='project_sheet-add-media'),

    url(r'^add/picture/$', views.project_sheet_add_picture, name='project_sheet-add-picture'),
    url(r'^(?P<slug>[-\w]+)/add/picture/$', views.project_sheet_add_picture, name='project_sheet-instance-add-picture'),
    url(r'^add/video/$', views.project_sheet_add_video, name='project_sheet-add-video'),
    url(r'^(?P<slug>[-\w]+)/add/video/$', views.project_sheet_add_video, name='project_sheet-instance-add-video'),

    url(r'^(?P<slug>[-\w]+)/del/picture/(?P<pic_id>\d+)/$', views.project_sheet_del_picture, name='project_sheet-instance-del-picture'),
    url(r'^(?P<slug>[-\w]+)/del/video/(?P<vid_id>\d+)/$', views.project_sheet_del_video, name='project_sheet-instance-del-video'),

    url(r'^(?P<project_slug>[-\w]+)/member/delete/(?P<username>[-\w]+)/$', views.project_sheet_member_delete, name='project_sheet-instance-del-member'),
    url(r'^(?P<project_slug>[-\w]+)/member/add/$', views.project_sheet_member_add, name='project_sheet-instance-add-member'),

    # Ajax views
    url(r'^start/ajax/field/save/$', ajax.project_textfield_save, name='project_sheet-ajax-field-save'),
    url(r'^start/ajax/field/load/$', ajax.project_textfield_load, name='project_sheet-ajax-field-load'),
    url(r'^(?P<project_slug>[-\w]+)/ajax/field/load/$', ajax.project_textfield_load, name='project_sheet-ajax-field-load'),
    url(r'^(?P<project_slug>[-\w]+)/ajax/field/save/$', ajax.project_textfield_save, name='project_sheet-ajax-field-save'),

    # RSS Feeds
    url(r'^list/new-projects\.rss$', feeds.NewProjectsFeed(), name='project_sheet-new-projects-rss'),
    url(r'^recent-changes\.rss$', feeds.LatestChangesFeed(), name='project_sheet-recent-changes-rss'),

)

Table Of Contents

Previous topic

Partner

Next topic

Workgroup

This Page