blob: f0403e1afdb2674c1e3623c683e7b2ad71e0c4f1 [file] [log] [blame]
import logging
import warnings
from pylons import g, c
from allura.lib import validators as V
from allura.lib import helpers as h
from allura.lib import plugin
from allura.lib.widgets import form_fields as ffw
from allura.lib.widgets.forms import ForgeForm
from allura import model as M
from formencode import validators as fev
import formencode
from forgeorganization.organization.model import WorkFields
import ew as ew_core
import ew.jinja2_ew as ew
from pytz import common_timezones, country_timezones, country_names
log = logging.getLogger(__name__)
class RegistrationForm(ForgeForm):
class fields(ew_core.NameList):
fullname = ew.TextField(
label='Organization Full Name',
validator=fev.UnicodeString(not_empty=True))
shortname = ew.TextField(
label='Desired Short Name',
validator=formencode.All(
fev.Regex(h.re_path_portion),
fev.UnicodeString(not_empty=True)))
orgtype = ew.SingleSelectField(
label='Organization Type',
options = [
ew.Option(
py_value='For-profit business',
label='For-profit business'),
ew.Option(
py_value='Foundation or other non-profit organization',
label='Foundation or other non-profit organization'),
ew.Option(
py_value='Research and/or education institution',
label='Research and/or education institution')],
validator=fev.UnicodeString(not_empty=True))
role = ew.TextField(
label='Your Role',
validator=fev.UnicodeString(not_empty=True))
class SearchForm(ForgeForm):
defaults=dict(ForgeForm.defaults, submit_text='Search')
class fields(ew_core.NameList):
orgname = ew.TextField(
label='Organization name',
validator=fev.UnicodeString(not_empty=True))
class RequestAdmissionForm(ForgeForm):
defaults=dict(ForgeForm.defaults)
class fields(ew_core.NameList):
role = ew.TextField(
label='Your role',
validator=fev.UnicodeString(not_empty=True))
class RequestCollaborationForm(ForgeForm):
defaults=dict(ForgeForm.defaults)
class fields(ew_core.NameList):
project_url_name = ew.TextField(
label='Project URL Name',
validator=fev.UnicodeString(not_empty=True))
collaboration_type=ew.SingleSelectField(
label='Collaboration Type',
options = [
ew.Option(py_value='cooperation', label='Cooperation'),
ew.Option(py_value='participation', label='Participation')])
class UpdateProfile(ForgeForm):
defaults=dict(ForgeForm.defaults)
class fields(ew_core.NameList):
fullname=ew.TextField(
label='Organization Full Name',
validator=fev.UnicodeString(not_empty=True))
organization_type=ew.SingleSelectField(
label='Organization Type',
options = [
ew.Option(
py_value='For-profit business',
label='For-profit business'),
ew.Option(
py_value='Foundation or other non-profit organization',
label='Foundation or other non-profit organization'),
ew.Option(
py_value='Research and/or education institution',
label='Research and/or education institution')],
validator=fev.UnicodeString(not_empty=True))
description=ew.TextField(
label='Description')
dimension=ew.SingleSelectField(
label='Dimension',
options = [
ew.Option(
py_value='Small',
label='Small organization (up to 50 members)'),
ew.Option(
py_value='Medium',
label='Medium-size organization (51-250 members)'),
ew.Option(
py_value='Large',
label='Big organization (at least 251 members)'),
ew.Option(
py_value='Unknown',
label='Unknown')],
validator=fev.UnicodeString(not_empty=True))
headquarters=ew.TextField(
label='Headquarters')
website=ew.TextField(
label='Website')
def display(self, **kw):
organization = kw.get('organization')
self.fields['fullname'].attrs = dict(value=organization.fullname)
self.fields['description'].attrs = dict(value=organization.description)
for opt in self.fields['organization_type'].options:
if opt.py_value == organization.organization_type:
opt.selected = True
else:
opt.selected = False
for opt in self.fields['dimension'].options:
if opt.py_value == organization.dimension:
opt.selected = True
else:
opt.selected = False
self.fields['website'].attrs = dict(value=organization.website)
self.fields['headquarters'].attrs = \
dict(value=organization.headquarters)
return super(UpdateProfile, self).display(**kw)
class InviteUser(ForgeForm):
defaults=dict(ForgeForm.defaults)
class fields(ew_core.NameList):
username=ew.TextField(
label='Username',
validator=fev.UnicodeString(not_empty=True))
role=ew.TextField(
label='Role',
validator=fev.UnicodeString(not_empty=True))
class AddWorkField(ForgeForm):
defaults=dict(ForgeForm.defaults)
def display(self, **kw):
self.fields = [
ew.SingleSelectField(
name='workfield',
label='Work Field',
options = [ew.Option(py_value=wf._id, label=wf.name)
for wf in WorkFields.query.find()],
validator=fev.UnicodeString(not_empty=True))]
return super(AddWorkField, self).display(**kw)
def to_python(self, value, state):
d = super(AddWorkField, self).to_python(value, state)
return d
class RemoveWorkField(ForgeForm):
defaults=dict(ForgeForm.defaults, submit_text=None, show_errors=False)
def display(self, **kw):
wf = kw.get('workfield')
self.fields = [
ew.RowField(
show_errors=False,
hidden_fields=[
ew.HiddenField(
name="workfieldid",
attrs={'value':str(wf._id)},
show_errors=False)
],
fields=[
ew.HTMLField(
text=wf.name,
show_errors=False),
ew.HTMLField(
text=wf.description,
show_errors=False),
ew.SubmitButton(
show_label=False,
attrs={'value':'Remove'},
show_errors=False)])]
return super(RemoveWorkField, self).display(**kw)
def to_python(self, value, state):
d = {}
d['workfield'] = WorkFields.getById(value['workfieldid'])
return d
class ChangeMembershipFromUser(ForgeForm):
defaults=dict(ForgeForm.defaults, submit_text=None, show_errors=False)
def display(self, **kw):
m = kw.get('membership')
org = m.organization
orgnamefield = '<a href="%s">%s</a>' % (org.url()+"organizationprofile", org.fullname)
if c.user.username in m.organization.project().admins():
orgnamefield+=' (<a href="%sadmin/organizationprofile">edit</a>)'%org.url()
if m.status == 'active':
statusoptions = [
ew.Option(py_value='active',label='Active',selected=True),
ew.Option(py_value='closed',label='Closed',selected=False)]
elif m.status == 'closed':
statusoptions = [
ew.Option(py_value='closed',label='Closed',selected=True)]
elif m.status == 'invitation':
statusoptions = [
ew.Option(
py_value='invitation',
label='Pending invitation',
selected=True),
ew.Option(py_value='active',label='Accept',selected=False),
ew.Option(py_value='remove',label='Decline',selected=False)]
elif m.status == 'request':
statusoptions = [
ew.Option(
py_value='request',label='Pending request',selected=True),
ew.Option(
py_value='remove',label='Remove request',selected=False)]
self.fields = [
ew.RowField(
show_errors=False,
hidden_fields=[
ew.HiddenField(
name="membershipid",
attrs={'value':str(m._id)},
show_errors=False),
ew.HiddenField(
name="requestfrom",
attrs={'value':'user'},
show_errors=False)
],
fields=[
ew.HTMLField(
text=orgnamefield,
show_errors=False),
ew.HTMLField(
text=org.organization_type,
show_errors=False),
ew.TextField(
name='role',
attrs=dict(value=m.role),
show_errors=False),
ew.SingleSelectField(
name='status',
show_errors=False,
options = statusoptions),
ew.SubmitButton(
show_label=False,
attrs={'value':'Save'},
show_errors=False)])]
return super(ChangeMembershipFromUser, self).display(**kw)
class ChangeMembershipFromOrganization(ForgeForm):
defaults=dict(ForgeForm.defaults, submit_text=None, show_errors=False)
def display(self, **kw):
m = kw.get('membership')
user = m.member
if m.status == 'active':
statusoptions = [
ew.Option(py_value='active',label='Active',selected=True),
ew.Option(py_value='closed',label='Closed',selected=False)]
elif m.status == 'closed':
statusoptions = [
ew.Option(py_value='closed',label='Closed',selected=True)]
elif m.status == 'invitation':
statusoptions = [
ew.Option(
py_value='invitation',
label='Pending invitation',
selected=True),
ew.Option(
py_value='remove',
label='Remove invitation',
selected=False)]
elif m.status == 'request':
statusoptions = [
ew.Option(
py_value='request',label='Pending request',selected=True),
ew.Option(py_value='active',label='Accept',selected=False),
ew.Option(py_value='remove',label='Decline',selected=False)]
self.fields = [
ew.RowField(
show_errors=False,
hidden_fields=[
ew.HiddenField(
name="membershipid",
attrs={'value':str(m._id)},
show_errors=False),
ew.HiddenField(
name="requestfrom",
attrs={'value':'organization'},
show_errors=False)
],
fields=[
ew.HTMLField(
text='<a href="%s">%s</a>' % (
user.url(), user.display_name),
show_errors=False),
ew.TextField(
name='role',
attrs=dict(value=m.role),
show_errors=False),
ew.SingleSelectField(
name='status',
show_errors=False,
options = statusoptions),
ew.SubmitButton(
show_label=False,
attrs={'value':'Save'},
show_errors=False)])]
return super(ChangeMembershipFromOrganization, self).display(**kw)
class ChangeCollaborationStatusForm(ForgeForm):
defaults=dict(ForgeForm.defaults, submit_text=None, show_errors=False)
def display(self, **kw):
coll = kw.get('collaboration')
proj = coll.project
projfield = '<a href="%s">%s</a>' % (proj.url(), proj.name)
select_cooperation = (coll.collaborationtype=='cooperation')
if coll.status=='closed':
options=[ew.Option(py_value='closed',label='Closed',selected=True)]
elif coll.status=='active':
options=[
ew.Option(py_value='closed',label='Closed',selected=False),
ew.Option(py_value='active',label='Active',selected=True)]
elif coll.status=='invitation':
options=[
ew.Option(
py_value='invitation',
label='Pending invitation',
selected=True),
ew.Option(
py_value='active',
label='Accept invitation',
selected=False),
ew.Option(
py_value='remove',
label='Remove invitation',
selected=False)]
elif coll.status=='request':
options=[
ew.Option(
py_value='request',
label='Pending request',
selected=True),
ew.Option(
py_value='remove',
label='Remove request',
selected=False)]
self.fields = [
ew.RowField(
show_errors=False,
hidden_fields=[
ew.HiddenField(
name="collaborationid",
attrs={'value':str(coll._id)},
show_errors=False)
],
fields=[
ew.HTMLField(
text=projfield,
show_errors=False),
ew.SingleSelectField(
name='collaborationtype',
options = [
ew.Option(
py_value='cooperation',
selected=select_cooperation,
label='Cooperation'),
ew.Option(
py_value='participation',
selected=not select_cooperation,
label='Participation')],
validator=fev.UnicodeString(not_empty=True)),
ew.SingleSelectField(
name='status',
options = options,
validator=fev.UnicodeString(not_empty=True)),
ew.SubmitButton(
show_label=False,
attrs={'value':'Save'},
show_errors=False)])]
return super(ChangeCollaborationStatusForm, self).display(**kw)