예제 #1
0
    def post(self, username):
        if self.username != username:
            return self.abort(403)
        mode = self.request.get('mode')

        if mode == 'edit':
            if not self.form.validate():
                return self.get(username)
#                self.redirect('/'+username)

            fields = self.get_params_dict((
                'short_about',
                'tools',
                ))

            iclasses = self.request.get_all('classes_inprog')
            cclasses = self.request.get_all('classes_completed')
            fields['iclasses'] = iclasses
            fields['cclasses'] = cclasses
            fields['username'] = username

            user = User.get_user(username)

            user.update(self.form, **fields)

        self.redirect('/{}'.format(username))
예제 #2
0
 def notify_user(self, sender, conv_id, msg):
     #TODO: use boilerplate/task queue
     conv = Conversation.get_by_id(int(conv_id))
     for uname in conv.receivers_list_norm:
         if uname != sender:
             user = User.get_user(uname)
             if user.notify_on_msg:
                 new_message_notify(user.email, conv_id, msg)
예제 #3
0
    def edit_project(self, username):
        blob_info = None
        screenshot = None
        screenshot_url = None
        fileerror = ''

        upload_files = self.get_uploads('screenshot')
        if upload_files:
            blob_info = upload_files[0]
            if 'image' in blob_info.content_type:
                screenshot = blob_info.key()
                screenshot_url = images.get_serving_url(screenshot)
            else:
                # uploaded file wasn't an images, hence remove from the blobstore
                blobstore.delete(blob_info.key())
                fileerror = 'Invalid image type'

        project_id = self.request.get('projects_dropdown')

        title = self.request.get('title').strip()
        titleerror = validate_project_title(title)

        url = self.request.get('proj_url').strip()
        urlerror = validate_project_url(url)

        short_description = self.request.get('short_description').strip()
        sderror = validate_project_short_description(short_description)

        if titleerror or urlerror or sderror or fileerror:
            if blob_info and not fileerror:
                # same as above
                Project.remove_screenshot_blob(blob_info.key())

            user = User.get_user(username)
            projects = Project.get_projects_by_ids(user.projects)
            upload_url = blobstore.create_upload_url(
                self.uri_for('project-add', username=username),
                max_bytes_per_blob=MAX_IMG_SIZE)
            template = 'profile/edit_project.html'
            context = { 'user': user,
                        'username': username,
                        'title': title,
                        'proj_url': url,
                        'short_description': short_description,
                        'projects': projects,
                        'upload_url': upload_url,
                        'titleerror': titleerror,
                        'urlerror': urlerror,
                        'sderror': sderror,
                        'fileerror': fileerror }
            self.render_template(template, context)
            return
        else:
            Project.update_project(project_id, title=title, screenshot=screenshot,
                screenshot_url=screenshot_url, url=url, short_description=short_description)

            self.redirect(self.uri_for('profile', username=username))
예제 #4
0
    def get(self, username):
        """display profile of user with username, if None, display logged in user
        """
        mode = self.request.get('mode')
        upload_url = ""

        if mode != 'edit':
            template = 'profile/profile.html'
        else:
            if self.username != username:
                return self.abort(403)
            template = 'profile/edit.html'

        if self.user:
            user = User.get_by_id(long(self.user_id))
        else:
            user = None

        if user:
            if username != user.username:
                profile = User.get_user(username)
                if not profile or \
                   (profile.public == False and \
                    profile.username != user.username and \
                    profile.username not in user.friends):

                    #TODO: redirect to profile forbidden page
                    return self.abort(404)
            else:
                profile = user

            self.form.process(obj=profile)
            all, ic, cc = self.organize_courses_for(profile)

            projects = Project.get_projects_by_ids(profile.projects)

            context = {'profile': profile,
                       'user': user,
                       'username': username,
                       'gravatar': profile.gravatar,
                       'friend_btn': username != user.username and username not in user.friends,
                       'courses_all': Course.courses_to_dict(),
                       'courses_completed': cc,
                       'courses_incomplete': ic,
                       'projects': projects,
                       'upload_url': upload_url,
            }

            self.render_template(template, **context)
        else:
            self.redirect(self.uri_for('login'))
예제 #5
0
    def add_project(self, username):
        blob_info = None
        fileerror = 'Screenshot is mandatory'
        try:
            upload_files = self.get_uploads('screenshot')
        except:
            upload_files = None
        if upload_files:
            blob_info = upload_files[0]
            if 'image' in blob_info.content_type:
                screenshot = blob_info.key()
                screenshot_url = images.get_serving_url(screenshot)
                fileerror = ''
            else:
                # uploaded file wasn't an images, hence remove from the blobstore
                blobstore.delete(blob_info.key())
                fileerror = 'Invalid image type'
        else:
            fileerror = 'Please provide a screenshot of your project (max size: 1MB)'

        title = self.request.get('title').strip()
        titleerror = validate_project_title(title)

        url = self.request.get('proj_url').strip()
        urlerror = validate_project_url(url)

        short_description = self.request.get('short_description').strip()
        sderror = validate_project_short_description(short_description)

        if titleerror or urlerror or sderror or fileerror:
            if blob_info and not fileerror:
                # blob was okay but validation of some other field failed
                # hence remove it to avoid orphaned entry
                # also remove the serving url
                Project.remove_screenshot_blob(blob_info.key())

            user = User.get_user(username)
            template = 'profile/add_project.html'
            upload_url = blobstore.create_upload_url(
                self.uri_for('project-add', username=username),
                max_bytes_per_blob=MAX_IMG_SIZE)
            context = { 'user': user,
                        'username': username,
                        'title': title,
                        'proj_url': url,
                        'short_description': short_description,
                        'upload_url': upload_url,
                        'titleerror': titleerror,
                        'urlerror': urlerror,
                        'sderror': sderror,
                        'fileerror': fileerror}

            self.render_template(template, **context)
            return
        else:
            user = User.get_user(username)
            project_id = Project.add_project(title=title, screenshot=screenshot,
                screenshot_url=screenshot_url, url=url, short_description=short_description,
                author=user.key)

            User.add_project(username, project_id)

            self.redirect(self.uri_for('profile', username=username))
예제 #6
0
파일: RPC.py 프로젝트: joshz/udacityplus
	def checkUsernameAvailability(self, username):
		users = User.get_user(username)
		self.response.out.write(users != None)