Switch to unified view

a/Allura/allura/controllers/project.py b/Allura/allura/controllers/project.py
...
...
9
from tg.decorators import with_trailing_slash, without_trailing_slash
9
from tg.decorators import with_trailing_slash, without_trailing_slash
10
from pylons import c, g
10
from pylons import c, g
11
from webob import exc
11
from webob import exc
12
import pymongo
12
import pymongo
13
from formencode import validators
13
from formencode import validators
14
from formencode.api import Invalid
14
15
15
from ming.utils import LazyProperty
16
from ming.utils import LazyProperty
16
17
17
from allura import model as M
18
from allura import model as M
18
from allura.app import SitemapEntry
19
from allura.app import SitemapEntry
...
...
125
    @without_trailing_slash
126
    @without_trailing_slash
126
    def add_project(self, **form_data):
127
    def add_project(self, **form_data):
127
        c.project = self.neighborhood.neighborhood_project
128
        c.project = self.neighborhood.neighborhood_project
128
        require_access(self.neighborhood, 'register')
129
        require_access(self.neighborhood, 'register')
129
        c.add_project = W.add_project
130
        c.add_project = W.add_project
130
        form_data['tools'] = ['Wiki', 'Git', 'Tickets', 'Downloads', 'Discussion']
131
        form_data.setdefault('tools', [u'Wiki',u'Git',u'Tickets',u'Downloads',u'Discussion'])
131
        form_data['neighborhood'] = self.neighborhood.name
132
        form_data['neighborhood'] = self.neighborhood.name
132
        return dict(neighborhood=self.neighborhood, form_data=form_data)
133
        return dict(neighborhood=self.neighborhood, form_data=form_data)
133
134
134
    @expose('json:')
135
    @expose('json:')
135
    def suggest_name(self, project_name=None):
136
    def suggest_name(self, project_name=''):
137
        result = dict()
136
        new_name = re.sub("[^A-Za-z0-9]", "", project_name).lower()
138
        result['suggested_name'] = re.sub("[^A-Za-z0-9]", "", project_name).lower()[:15]
137
        name_taken_message = plugin.ProjectRegistrationProvider.get().name_taken(new_name, self.neighborhood)
139
        return result
138
        if len(new_name) < 3 or len(new_name) > 15:
139
            name_taken_message = "Name must be 3-15 characters long."
140
        return dict(suggested_name=new_name, message=name_taken_message)
141
140
142
    @expose('json:')
141
    @expose('json:')
143
    def check_name(self, project_name=None):
142
    def check_names(self, project_name='', unix_name=''):
144
        name_taken_message = plugin.ProjectRegistrationProvider.get().name_taken(project_name, self.neighborhood)
143
        result = dict()
145
        if not name_taken_message and not h.re_path_portion.match(project_name):
144
        try:
145
            W.add_project.fields['project_name'].validate(project_name, '')
146
        except Invalid as e:
147
            result['name_message'] = str(e)
148
        if not h.re_path_portion.match(unix_name) or not (3 <= len(unix_name) <= 15):
146
            name_taken_message = 'Please use only letters, numbers, and dashes 3-15 characters long.'
149
            result['unixname_message'] = 'Please use only letters, numbers, and dashes 3-15 characters long.'
147
        return dict(message=name_taken_message)
150
        else:
151
            result['unixname_message'] = plugin.ProjectRegistrationProvider.get().name_taken(unix_name, self.neighborhood)
152
        return result
148
153
149
    @h.vardec
154
    @h.vardec
150
    @expose()
155
    @expose()
151
    @validate(W.add_project, error_handler=add_project)
156
    @validate(W.add_project, error_handler=add_project)
152
    @utils.AntiSpam.validate('Spambot protection engaged')
157
    @utils.AntiSpam.validate('Spambot protection engaged')