Beispiel #1
0
    def _image_bytes_are_valid(self, image_bytes):
        from google.appengine.api import images

        try:
            # Unfortunately the only way to validate image bytes on AppEngine is to
            # perform a transform. Lame.
            images.im_feeling_lucky(image_bytes)
        except images.BadImageError:
            return False
        return True
Beispiel #2
0
    def get(self):
        i_key = ndb.Key(urlsafe=self.request.get('img_id'))
        x = self.request.get('size')
        deg = self.request.get('deg')
        flip = str(self.request.get('flip'))
        lucky = str(self.request.get('lucky'))
        #flipV=self.request.get('flipV')
        #nothing=self.request.get('nothing')
        #self.response.out.write(str(x)+"<br>")
        greeting = i_key.get()
        if greeting.bomma:
            if x == '':
                x = '500'
            x = int(x)
            deg = int(deg)
            self.response.headers['Content-Type'] = 'image/png'
            greeting.bomma = images.resize(greeting.bomma, x, x)

            greeting.bomma = images.rotate(greeting.bomma, deg)

            if flip == "flipH":
                greeting.bomma = images.horizontal_flip(greeting.bomma)
            if flip == "flipV":
                greeting.bomma = images.vertical_flip(greeting.bomma)
            if lucky == "lucky":
                greeting.bomma = images.im_feeling_lucky(greeting.bomma)
            self.response.out.write(greeting.bomma)
        else:
            self.response.out.write('No image')
Beispiel #3
0
def upload():
    form = UploadForm()
    if form.validate_on_submit():
        f = form.file.data
        filename = f.filename
        mime_type = mimetypes.guess_type(
            filename)[0] or "application/octet-stream"

        doc = Document()

        doc.filename = filename
        doc.mime_type = mime_type
        doc.description = form.description.data

        if mime_type in image_type:
            f = f.read()
            doc.file = images.im_feeling_lucky(f)
        else:
            doc.file = f.read()
        try:
            doc.put()
        except RequestTooLargeError:
            return "Error : 413 - RequestTooLargeError", 413
    else:
        return render_template("index.html", form=form, docs=[])
    return redirect("/")
def resize_to_max(file, max_w, max_h):
  """ 
  rezizes an image in order to fit max dimensions keeping proportions
  NO crop
  """
  
  width, height = getImageInfo(file)
  
  ratio_w = width/max_w
  ratio_h = height/max_h
  ratio_new = ratio_w/ratio_h
  ratio = width/height
  new_w = int(width)
  new_h = int(height)
  #too large
  if (ratio_new > 1 and width > max_w):
    new_w = max_w
    new_h = int(round(max_h / ratio))
  #too heigh
  elif (ratio_new < 1 and height > max_h):
    new_w = int(round(max_w * ratio))
    new_h = max_h
  elif (ratio_new == 1 and width > max_w):
    new_w = max_w
    new_h = max_h
  
  file = images.resize(file, new_w, new_h)
  file = images.im_feeling_lucky(file, images.JPEG)
  return file
def resize_to(file, w, h):

  """ 
  rezizes an image to given dimensions
  cropping it in order to keep proportions
  """
  width, height = getImageInfo(file)
  #ratio = width/height
  #ratio_n = w/h
  #ratio_new = ratio/ratio_n
  w_new = height * (w/h)
  h_new = width / (w/h)
  #cut width
  if w_new < width:
    
    cropoff =  (abs(width  -  w_new)*.5)/width
    file =  images.crop(file,top_y=0.0, bottom_y=1.0,left_x=cropoff,right_x=1.0  - cropoff)
    file = images.resize(file, height= h)
  #cut height
  elif h_new < height:
    
    #print h_new
    cropoff =  (abs(height  -  h_new)*.5)/height
    file =  images.crop(file,top_y=cropoff, bottom_y=1.0 - cropoff,left_x=0.0,right_x=1.0 )
    file = images.resize(file, width= w)
  else:
    file = images.resize(file, width = w, height= h)
    
  file = images.im_feeling_lucky(file, images.JPEG)
  return file
Beispiel #6
0
 def post(self):
     ''' Processes BlogPost edit request. 
     
         For the most part just repeating what's done in CreateHandler.
         We're retrieving an existing entity here, but not above.
     '''
     blog_post = db.get(self.request.get('blog_key'))
     
     blog_post_title = cgi.escape(self.request.get('title'))
     blog_post_uri = slugify(blog_post_title)
     
     post_content = cgi.escape(self.request.get('content'))
     
     blog_post.uri = blog_post_uri
     blog_post.title = blog_post_title 
     blog_post.content = post_content
     
     blog_post_tags = cgi.escape(self.request.get('tags')).split()        
     blog_post.tags = blog_post_tags
     
     if self.request.get("pic"):
         pic = images.resize(self.request.get("pic"), 300)
         # no equivalent PIL method so this does nothing on dev server;
         # in prod it "adjusts the contrast and color levels 
         # of an image according to an algorithm for improving photographs."
         pic = images.im_feeling_lucky(pic)
         blog_post.pic = db.Blob(pic)
     
     blog_post.htmlify()
     blog_post.put()
         
     self.redirect('/admin')
Beispiel #7
0
    def post(self):

        #check login
        if not users.get_current_user():
            self.redirect(users.create_login_url('/'))

        user = users.get_current_user()
        query = db.GqlQuery("SELECT * FROM Image WHERE user = :1", user)
        saved_image = query.get()
        
        action = self.request.get("action")
        
        if saved_image and action:
            
            if action == "resize":            
                width = self.request.get("width")
                height = self.request.get("height")
                if width and height:
                    img = images.resize(saved_image.data, int(width), int(height), saved_image.output_encoding)
            elif action == "rotate":
                degrees = self.request.get("degrees")
                if degrees:
                    img = images.rotate(saved_image.data, int(degrees), saved_image.output_encoding)
            elif action == "im_feeling_lucky":
                img = images.im_feeling_lucky(saved_image.data, saved_image.output_encoding)
            elif action == "crop":
                left_x = self.request.get("left_x")
                top_y = self.request.get("top_y")
                right_x = self.request.get("right_x")
                bottom_y = self.request.get("bottom_y")
                if left_x and top_y and right_x and bottom_y:
                    img = images.crop(saved_image.data, float(left_x), float(top_y), float(right_x), float(bottom_y), saved_image.output_encoding)
                
            if img:
                # save new settings
                output_encoding = saved_image.output_encoding
                content_type, width, height = getImageInfo(img)
                
                # delete previous entity
                for image in query:
                    db.delete(image)
                
                image = Image()
                image.user = user
                image.data = db.Blob(img)
                image.output_encoding = output_encoding
                image.content_type = content_type
                image.width = width
                image.height = height
                image.put()
Beispiel #8
0
    def create(place, data, **kw):
        "Create and commit the Image and the subsequent data objects"
        hash = hashlib.sha1(data).hexdigest()

        full = ImageFull.get_or_insert(hash, data=images.im_feeling_lucky(data, output_encoding=images.JPEG))
        full.put()
        
        thumb = ImageThumbnail.get_or_insert(hash, data=images.resize(full.data, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, output_encoding=images.JPEG))
        thumb.put()

        img = Image(place=place.key(), hash=hash, image_full=full, image_thumbnail=thumb, **kw)
        img.put()

        return img
Beispiel #9
0
    def post(self):
        photo = self.request.get('img')
        image_type = self.request.get('image_type')
        print(image_type)
        request_width = self.request.get('width')
        request_hieght = self.request.get('height')
        encoding_type = images.JPEG
        if image_type == "PNG":
            encoding_type = images.PNG
        print(str(encoding_type))
        photo = images.resize(photo,width=int(request_width),height=int(request_hieght),quality=100,output_encoding=encoding_type)
        if self.request.get('enhance_color') == "true":
            photo = images.im_feeling_lucky(photo,output_encoding=encoding_type,quality=100)
            print("Yes enhancing")

        #photo = images.execute_transforms(photo,output_encoding=images.JPEG,quality=100)
        self.response.headers['Content-Type'] = 'image/'+str(image_type).lower()
        self.response.out.write(photo)
Beispiel #10
0
    def _post_message(self, place_name, message):
        place = model.Place.get_or_insert(place_name)
        place.put()

        attachments = listify(message.attachments)

        for attachment in attachments:
            author = message.sender
            caption = message.subject if hasattr(message, 'subject') else ''
            filename = attachment[0]
            attachment_data = attachment[1].payload.decode(attachment[1].encoding) 
            data = images.im_feeling_lucky(attachment_data, output_encoding=images.JPEG)

            log.debug("Processing attachment: %s (size: %d -> %d)" % (attachment[0], len(attachment_data), len(data)))
            img = model.Image.create(place=place, data=db.Blob(data), author=author, filename=filename, caption=caption)
            place.count += 1

        place.put()
def flickr_thumb(file,size):
  """ 
  returns squared cropped thumbnail
  """
  width,height =  getImageInfo(file)
  
  if width < height:
    file = images.resize(file,width=size)
    width,height =  getImageInfo(file)
    cropoff  = ((height  - size)*.5)/height
    file =  images.crop(file,top_y=cropoff, bottom_y=1.0  - cropoff,left_x=0.0,right_x=1.0)
  else:
    file  =  images.resize(file,height=size)
    width,height =  getImageInfo(file)
    cropoff =  ((width  -  size)*.5)/width
    file  = images.crop(file,left_x=cropoff, right_x=1.0 - cropoff,top_y=0.0,bottom_y=1.0)
    
  file = images.im_feeling_lucky(file, images.JPEG)
  return file
    def execute(self):
        method = self.request.method
        user = self.values['user']
        self.values['tab'] = '/admin'

        if user.rol != 'admin':
            self.forbidden()
            return

        if method == 'GET':
            app = self.get_application()
            self.values['m'] = self.get_param('m')
            if not app:
                app = model.Application()
            self.values['app'] = app
            self.values['theme'] = self.not_none(app.theme)
            self.values['max_results'] = self.not_none(app.max_results)
            self.values['max_results_sublist'] = self.not_none(
                app.max_results_sublist)
            self.render('templates/module/admin/admin-lookandfeel.html')
        elif self.auth():
            app = self.get_application()
            if not app:
                app = model.Application()

            logo = self.request.get("logo")
            if logo:
                app.logo = images.im_feeling_lucky(logo, images.JPEG)
                memcache.delete('/images/application/logo')

            app.theme = self.get_param("theme")
            if self.get_param('max_results'):
                app.max_results = int(self.get_param('max_results'))
            if self.get_param('max_results_sublist'):
                app.max_results_sublist = int(
                    self.get_param('max_results_sublist'))
            app.put()
            memcache.delete('app')
            AppProperties().updateJinjaEnv()
            self.redirect('/module/admin.lookandfeel?m=' +
                          self.getLocale('Updated'))
Beispiel #13
0
 def post(self):
     ''' Processes BlogPost creation request. '''
     #L = self.request.get('large_text_list').split()
     #LTL = [db.Text(i) for i in L]
     #new = models.LargeTextList()
     #new.large_text_list = LTL
     #new.put()
     
     '''
     mylist = self.request.get('post_content').split()
     mylist = [db.Text(i) for i in mylist]
     new = models.MyEntity()
     new.mylist = mylist
     new.put()
     '''
     
     blog_post_title = self.request.get('post_title')
     blog_post_uri = slugify(blog_post_title)
     
     post_content = self.request.get('post_content')
     
     blog_post = models.BlogPost()
     blog_post.uri = blog_post_uri
     blog_post.title = blog_post_title 
     blog_post.content = post_content
     
     blog_post_tags = self.request.get('post_tags').split()        
     blog_post.tags = blog_post_tags # can be a space-delimited list
     
     if self.request.get("pic"):
         pic = images.resize(self.request.get("pic"), 300)
         # no equivalent PIL method so this does nothing on dev server
         # it does; however, "adjust the contrast and color levels 
         # of an image according to an algorithm for improving photographs."
         pic = images.im_feeling_lucky(pic)
         blog_post.pic = db.Blob(pic)
     
     blog_post.htmlify()
     blog_post.put()
     
     self.redirect('/admin')
Beispiel #14
0
    def post(self):
        photo = self.request.get('img')
        image_type = self.request.get('image_type')
        print(image_type)
        request_left_x = self.request.get('left_x')
        request_top_y = self.request.get('top_y')
        request_right_x = self.request.get('right_x')
        request_bottom_y = self.request.get('bottom_y')
        encoding_type = images.JPEG
        if image_type == "PNG":
            encoding_type = images.PNG
        print(str(encoding_type))
        photo = images.crop(photo,left_x=float(request_left_x),top_y=float(request_top_y),right_x=float(request_right_x),bottom_y=float(request_bottom_y),quality=100,output_encoding=encoding_type)
        
        if self.request.get('enhance_color') == "true":
            photo = images.im_feeling_lucky(photo,output_encoding=encoding_type,quality=100)
            print("Yes enhancing")

        #photo = images.execute_transforms(photo,output_encoding=images.JPEG,quality=100)
        self.response.headers['Content-Type'] = 'image/'+str(image_type).lower()
        self.response.out.write(photo)
Beispiel #15
0
	def execute(self):
		method = self.request.method
		user = self.values['user']
		self.values['tab'] = '/admin'
		
		if user.rol != 'admin':
			self.forbidden()
			return
		
		if method == 'GET':
			app = self.get_application()
			self.values['m'] = self.get_param('m')
			if not app:
				app = model.Application()
			self.values['app'] = app
			self.values['theme'] 				= self.not_none(app.theme)
			self.values['max_results'] 			= self.not_none(app.max_results)
			self.values['max_results_sublist'] 	= self.not_none(app.max_results_sublist)
			self.render('templates/module/admin/admin-lookandfeel.html')
		elif self.auth():
			app = self.get_application()
			if not app:
				app = model.Application()

			logo = self.request.get("logo")
			if logo:
				app.logo = images.im_feeling_lucky(logo, images.JPEG)
				memcache.delete('/images/application/logo')

			app.theme					= self.get_param("theme") 
			if self.get_param('max_results'):
				app.max_results	= int(self.get_param('max_results'))
			if self.get_param('max_results_sublist'):
				app.max_results_sublist	= int(self.get_param('max_results_sublist'))
			app.put()
			memcache.delete('app')
			AppProperties().updateJinjaEnv()
			self.redirect('/module/admin.lookandfeel?m='+self.getLocale('Updated'))
    def execute(self):
        self.values['tab'] = '/group.list'
        method = self.request.method
        user = self.values['user']
        key = self.get_param('key')

        if method == 'GET':
            if key:
                # show edit form
                group = model.Group.get(key)
                if user.nickname != group.owner.nickname and user.rol != 'admin':
                    self.forbidden()
                    return
                self.values['key'] = key

                self.values['title'] = group.title
                self.values['description'] = group.description
                if group.all_users is not None:
                    self.values['all_users'] = group.all_users
                else:
                    self.values['all_users'] = True
                if group.category:
                    self.values['category'] = group.category
                self.add_categories()
                self.render('templates/group-edit.html')
            else:
                # show an empty form
                self.values['title'] = 'Grupo...'
                self.values['all_users'] = True
                self.add_categories()
                self.render('templates/group-edit.html')
        elif self.auth():
            if key:
                # update group
                group = model.Group.get(key)
                if user.nickname != group.owner.nickname and user.rol != 'admin':
                    self.forbidden()
                    return
                # group title is not editable since many-to-many relationships are denormalizated
                # group.title = self.get_param('title')
                group.description = self.get_param('description')
                image = self.request.get("img")
                if image:
                    image = images.im_feeling_lucky(image, images.JPEG)
                    group.avatar = img.resize(image, 128, 128)
                    group.thumbnail = img.resize(image, 48, 48)
                    if not group.image_version:
                        group.image_version = 1
                    else:
                        memcache.delete(
                            '/images/group/avatar/%s/%d' %
                            (group.key().id(), group.image_version))
                        memcache.delete(
                            '/images/group/thumbnail/%s/%d' %
                            (group.key().id(), group.image_version))
                        group.image_version += 1
                    memcache.delete('/images/group/avatar/%s' %
                                    group.key().id())
                    memcache.delete('/images/group/thumbnail/%s' %
                                    group.key().id())
                if self.get_param('all_users'):
                    group.all_users = True
                else:
                    group.all_users = False
                category = model.Category.get(self.request.get('category'))
                prev_category = group.category
                group.category = category
                group.put()

                if prev_category:
                    prev_category.groups -= 1
                    prev_category.put()

                category.groups += 1
                category.put()

                memcache.delete('index_groups')
                self.redirect('/group/%s' % (group.url_path, ))
            else:
                # new group
                title = self.get_param('title')
                url_path = '-'
                all_users = False
                if self.get_param('all_users'):
                    all_users = True
                group = model.Group(owner=user,
                                    owner_nickname=user.nickname,
                                    title=title,
                                    description=self.get_param('description'),
                                    url_path=url_path,
                                    members=1,
                                    all_users=all_users,
                                    items=0,
                                    threads=0,
                                    responses=0,
                                    subscribers=[user.email],
                                    activity=1)
                category = model.Category.get(self.request.get('category'))
                group.category = category
                image = self.request.get("img")
                if image:
                    image = images.im_feeling_lucky(image, images.JPEG)
                    group.avatar = img.resize(image, 128, 128)
                    group.thumbnail = img.resize(image, 48, 48)
                    group.image_version = 1

                group.put()
                self.add_user_subscription(user, 'group', group.key().id())
                group.url_path = '%d/%s' % (group.key().id(),
                                            self.to_url_path(group.title))
                group.put()

                category.groups += 1
                category.put()

                user.groups += 1
                user.put()

                app = model.Application.all().get()
                if app:
                    app.groups += 1
                    app.put()
                memcache.delete('app')

                group_user = model.GroupUser(user=user,
                                             group=group,
                                             user_nickname=user.nickname,
                                             group_title=group.title,
                                             group_url_path=group.url_path)
                group_user.put()
                memcache.delete('index_groups')

                followers = list(self.get_followers(user=user))
                followers.append(user.nickname)
                self.create_event(event_type='group.new',
                                  followers=followers,
                                  user=user,
                                  group=group)

                self.add_follower(group=group, nickname=user.nickname)

                # TODO: update a user counter to know how many groups is owner of?

                self.redirect('/group/%s' % (group.url_path, ))
Beispiel #17
0
    def execute(self):
        method = self.request.method
        user = self.values['user']
        self.values['tab'] = '/admin'

        if user.rol != 'admin':
            self.forbidden()
            return

        if method == 'GET':
            app = self.get_application()
            self.values['m'] = self.get_param('m')
            if not app:
                app = model.Application()
            self.values['app'] = app
            self.values['appName'] = self.not_none(app.name)
            self.values['appSubject'] = self.not_none(app.subject)
            self.values['locale'] = self.not_none(app.locale)
            self.values['theme'] = self.not_none(app.theme)
            self.values['url'] = self.not_none(app.url)
            self.values['mail_contact'] = self.not_none(app.mail_contact)
            self.values['mail_subject_prefix'] = self.not_none(
                app.mail_subject_prefix)
            self.values['mail_sender'] = self.not_none(app.mail_sender)
            self.values['mail_footer'] = self.not_none(app.mail_footer)
            self.values['recaptcha_public_key'] = self.not_none(
                app.recaptcha_public_key)
            self.values['recaptcha_private_key'] = self.not_none(
                app.recaptcha_private_key)
            self.values['google_adsense'] = self.not_none(app.google_adsense)
            self.values['google_adsense_channel'] = self.not_none(
                app.google_adsense_channel)
            self.values['google_analytics'] = self.not_none(
                app.google_analytics)
            self.values['max_results'] = self.not_none(app.max_results)
            self.values['max_results_sublist'] = self.not_none(
                app.max_results_sublist)
            self.render('templates/module/admin/admin-modules.html')
        elif self.auth():
            app = self.get_application()
            if not app:
                app = model.Application()
                app.users = model.UserData.all().count()
                app.communities = model.Community.all().count()
                app.threads = model.Thread.all().filter('parent_thread',
                                                        None).count()
                app.articles = model.Article.all().filter(
                    'draft =', False).filter('deletion_date', None).count()
            app.name = self.get_param('appName')
            app.subject = self.get_param("appSubject")
            app.locale = self.get_param("locale")

            logo = self.request.get("logo")
            if logo:
                app.logo = images.im_feeling_lucky(logo, images.JPEG)
                memcache.delete('/images/application/logo')

            app.theme = self.get_param("theme")
            app.url = self.get_param('url')
            app.mail_subject_prefix = self.get_param('mail_subject_prefix')
            app.mail_contact = self.get_param('mail_contact')
            app.mail_sender = self.get_param('mail_sender')
            app.mail_footer = self.get_param('mail_footer')
            app.recaptcha_public_key = self.get_param('recaptcha_public_key')
            app.recaptcha_private_key = self.get_param('recaptcha_private_key')
            app.google_adsense = self.get_param('google_adsense')
            app.google_adsense_channel = self.get_param(
                'google_adsense_channel')
            app.google_analytics = self.get_param('google_analytics')
            if self.get_param('max_results'):
                app.max_results = int(self.get_param('max_results'))
            if self.get_param('max_results_sublist'):
                app.max_results_sublist = int(
                    self.get_param('max_results_sublist'))
            app.put()
            memcache.delete('app')
            AppProperties().updateJinjaEnv()
            self.redirect('/module/admin.application?m=' +
                          self.getLocale('Updated'))
Beispiel #18
0
	def post(self):
		userac = self.request.get('username')
		htmlhead="""
			<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
			<html xmlns="http://www.w3.org/1999/xhtml">
			<head>
			<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
			<meta name="generator" content="HTML Tidy for Linux (vers 1 September 2005), see www.w3.org" />
			<meta content='Personal website of """ + self.request.get('formuserfullname') + """.' name='description'/>
			<meta content='"""+ self.request.get('formuserfullname') +""","""+ userac +""",iiser,
			iiserk, iiserkol, iiserkolkata, """+ self.request.get('formusermajor') +"""' name='keywords'/>
			<title>"""+self.request.get('formuserfullname')+"""</title>
			<link rel="stylesheet" href='/css/"""+ userac +"""' type="text/css" />
			</head>"""
			
		htmlbody1="""
			<body>
			<h1>"""+ self.request.get('formuserfullname') +"""</h1>
			<div id="designation">
			<h3>iiser kolkata</h3>

			<p>student &raquo; """+ self.request.get('formusermajor') +""" major, MS """+ self.request.get('formuseryear') +""" Year<br />
			batch &raquo; """+self.request.get('formuserbatch')+"""<br /></p>
			</div>
			<div id="sidephoto"><img src='/img/"""+ userac +"""' alt='"""+ self.request.get('formuserfullname') +"""' width="250" /></div>
			"""
			
		about="""
			<div id="about">
			<ul><pre>""" + self.request.get('formuserabout') + """</pre></ul>
			</div>
			"""
		contact_top="""
			<div id="contact">
			<h3>contact</h3>
			<p>
			"""
		contact_lines =""
		if (self.request.get('formuseremail')) != "":
			contact_lines += """email: <a href='mailto:""" +(self.request.get('formuseremail'))+ """'>"""+ (self.request.get('formuseremail')) +"""</a><br />"""
		if (self.request.get('formuserweb')) != "":
			contact_lines += """website: <a href='""" +(self.request.get('formuserweb'))+ """'>"""+ (self.request.get('formuserweb')) +"""</a><br />"""
		if (self.request.get('formuserblog')) != "":
			contact_lines += """blog: <a href='""" +self.request.get('formuserblog')+ """'>"""+ self.request.get('formuserblog') +"""</a><br />"""
		if (self.request.get('formuserorkut')) != "":
			contact_lines += """orkut: <a href='""" +(self.request.get('formuserorkut'))+ """'>Profile</a><br />"""
		contact_bottom="""
			</p>
			</div>
			"""
		contact = contact_top + contact_lines + contact_bottom	
			
		htmlbody2="""<div id="footer"></div>
			</body>
			</html>
			"""
		if self.request.get('formuserhtml') != "":
			htmlcode = self.request.get('formuserhtml')
		else:
			htmlcode = htmlhead + htmlbody1 + about + contact + htmlbody2
		if self.request.get('formusercss') !="":
			csscode = self.request.get('formusercss')
		else:
			csscode = template.render(css_path, {})

		allusers = db.GqlQuery("SELECT * FROM User ORDER BY username")
		foundflag=0
		for user in allusers:
			if userac == user.username:
				foundflag=1
				oldavatar = user.useravatar
				user.delete()
				newuser = User()
				newuser.username = userac
				newuser.userhtml = htmlcode
				newuser.usercss = csscode
				newuser.userfullname = (self.request.get('formuserfullname'))
				newuser.usermajor = (self.request.get('formusermajor'))
				newuser.userbatch = (self.request.get('formuserbatch'))
				newuser.useryear = (self.request.get('formuseryear'))
				newuser.userabout = (self.request.get('formuserabout'))
				if (self.request.get('formuseremail')) != "":
					newuser.useremail = (self.request.get('formuseremail'))
				if (self.request.get('formuserblog')) != "":
					newuser.userblog = (self.request.get('formuserblog'))
				if (self.request.get('formuserweb')) != "":
					newuser.userweb = (self.request.get('formuserweb'))
				if (self.request.get('formuserorkut')) != "":
					newuser.userorkut = (self.request.get('formuserorkut'))
				if (self.request.get('formuserphn')) != "":
					newuser.userphone = self.request.get('formuserphn')
				if (self.request.get('formuserimg')) != "":
					avatar = images.im_feeling_lucky(self.request.get("formuserimg"))
					newuser.useravatar = db.Blob(avatar)
				else:
					newuser.useravatar = db.Blob(oldavatar)
				newuser.put()
		if foundflag == 0:
			newuser = User()
			newuser.username = userac
			newuser.userhtml = htmlcode
			newuser.usercss = csscode
			newuser.userfullname = (self.request.get('formuserfullname'))
			newuser.usermajor = (self.request.get('formusermajor'))
			newuser.userbatch = (self.request.get('formuserbatch'))
			newuser.useryear = (self.request.get('formuseryear'))
			newuser.userabout = (self.request.get('formuserabout'))
			if (self.request.get('formuseremail')) != "":
				newuser.useremail = (self.request.get('formuseremail'))
			if (self.request.get('formuserblog')) != "":
				newuser.userblog = (self.request.get('formuserblog'))
			if (self.request.get('formuserweb')) != "":
				newuser.userweb = (self.request.get('formuserweb'))
			if (self.request.get('formuserorkut')) != "":
				newuser.userorkut = (self.request.get('formuserorkut'))
			if (self.request.get('formuserphn')) != "":
				newuser.userphone = self.request.get('formuserphn')
			if (self.request.get('formuserimg')) != "":
				avatar = images.im_feeling_lucky(self.request.get("formuserimg"))
				newuser.useravatar = db.Blob(avatar)
			newuser.put()

		self.redirect("""/~""" + userac)
Beispiel #19
0
	def execute(self):
		method = self.request.method
		user = self.values['user']
		self.values['tab'] = '/admin'
		
		if user.rol != 'admin':
			self.forbidden()
			return
		
		if method == 'GET':
			app = self.get_application()
			self.values['m'] = self.get_param('m')
			if not app:
				app = model.Application()
			self.values['app'] = app
			self.values['appName'] 				= self.not_none(app.name)
			self.values['appSubject'] 			= self.not_none(app.subject)
			self.values['locale'] 				= self.not_none(app.locale)
			self.values['theme'] 				= self.not_none(app.theme)
			self.values['url'] 					= self.not_none(app.url)
			self.values['mail_contact'] 		= self.not_none(app.mail_contact)
			self.values['mail_subject_prefix'] 	= self.not_none(app.mail_subject_prefix)
			self.values['mail_sender'] 			= self.not_none(app.mail_sender)
			self.values['mail_footer'] 			= self.not_none(app.mail_footer)
			self.values['recaptcha_public_key'] = self.not_none(app.recaptcha_public_key)
			self.values['recaptcha_private_key']= self.not_none(app.recaptcha_private_key)
			self.values['google_adsense'] 		= self.not_none(app.google_adsense)
			self.values['google_adsense_channel']= self.not_none(app.google_adsense_channel)
			self.values['google_analytics'] 		= self.not_none(app.google_analytics)
			self.values['max_results'] 			= self.not_none(app.max_results)
			self.values['max_results_sublist'] 	= self.not_none(app.max_results_sublist)
			self.render('templates/module/admin/admin-modules.html')
		elif self.auth():
			app = self.get_application()
			if not app:
				app = model.Application()
				app.users	= model.UserData.all().count()
				app.communities	= model.Community.all().count()
				app.threads = model.Thread.all().filter('parent_thread', None).count()
				app.articles	= model.Article.all().filter('draft =', False).filter('deletion_date', None).count()
			app.name 					= self.get_param('appName')
			app.subject					= self.get_param("appSubject")
			app.locale					= self.get_param("locale")
			
			logo = self.request.get("logo")
			if logo:
				app.logo = images.im_feeling_lucky(logo, images.JPEG)
				memcache.delete('/images/application/logo')

			app.theme					= self.get_param("theme")
			app.url						= self.get_param('url')
			app.mail_subject_prefix		= self.get_param('mail_subject_prefix')
			app.mail_contact				= self.get_param('mail_contact')
			app.mail_sender				= self.get_param('mail_sender')
			app.mail_footer				= self.get_param('mail_footer')
			app.recaptcha_public_key	= self.get_param('recaptcha_public_key')
			app.recaptcha_private_key	= self.get_param('recaptcha_private_key')
			app.google_adsense			= self.get_param('google_adsense')
			app.google_adsense_channel	= self.get_param('google_adsense_channel')
			app.google_analytics		= self.get_param('google_analytics')
			if self.get_param('max_results'):
				app.max_results	= int(self.get_param('max_results'))
			if self.get_param('max_results_sublist'):
				app.max_results_sublist	= int(self.get_param('max_results_sublist'))
			app.put()
			memcache.delete('app')
			AppProperties().updateJinjaEnv()
			self.redirect('/module/admin.application?m='+self.getLocale('Updated'))
Beispiel #20
0
	def execute(self):
		method = self.request.method
		user = self.values['user']

		if method == 'GET':
			self.values['google_adsense'] = self.not_none(user.google_adsense)
			self.values['google_adsense_channel'] = self.not_none(user.google_adsense_channel)
			self.values['real_name'] = self.not_none(user.real_name)
			self.values['links'] = [(link.split('##', 2)[1], link.split('##', 2)[0]) for link in user.list_urls]
			self.values['im_addresses'] =  [(link.split('##', 2)[1], link.split('##', 2)[0]) for link in user.im_addresses]
			self.values['country'] = self.not_none(user.country)
			self.values['city'] = self.not_none(user.city)
			self.values['about'] = self.not_none(user.about_user)
			self.values['personal_message'] = self.not_none(user.personal_message);
			if user.not_full_rss:
				self.values['not_full_rss'] = user.not_full_rss
			self.render('templates/module/user/user-edit.html')
		elif self.auth():
			user.google_adsense = self.get_param('google_adsense')
			user.google_adsense_channel = self.get_param('google_adsense_channel')
			user.real_name = self.get_param('real_name')
			user.personal_message = self.get_param('personal_message')
			user.country = self.get_param('country')
			if self.get_param('not_full_rss'):
				user.not_full_rss = True
			else:
				user.not_full_rss = False
			image = self.request.get("img")
			if image:
				image = images.im_feeling_lucky(image, images.JPEG)
				user.avatar = img.resize(image, 128, 128)
				user.thumbnail = img.resize(image, 48, 48)
				if not user.image_version:
					user.image_version = 1
				else:
					memcache.delete('/images/user/avatar/%s/%d' % (user.nickname, user.image_version))
					memcache.delete('/images/user/thumbnail/%s/%d' % (user.nickname, user.image_version))
					user.image_version += 1
				memcache.delete('/images/user/avatar/%s' % (user.nickname))
				memcache.delete('/images/user/thumbnail/%s' % (user.nickname))
			user.city = self.get_param('city')
			user.list_urls = []
			blog = self.get_param('blog')
			if blog:
				if not blog.startswith('http'):
					linkedin = 'http://' + blog
				user.list_urls.append(blog + '##blog')
				
			linkedin = self.get_param('linkedin')
			if linkedin:
				if not linkedin.startswith('http'):
					linkedin = 'http://' + linkedin
				user.list_urls.append(linkedin + '##linkedin')
				
			ohloh = self.get_param('ohloh')
			if ohloh:
				if not ohloh.startswith('http'):
					linkedin = 'http://' + ohloh
				user.list_urls.append(ohloh + '##ohloh')
				
			user.im_addresses = []
			msn = self.get_param('msn')
			if msn:
				user.im_addresses.append(msn + '##msn')
				
			jabber = self.get_param('jabber')
			if jabber:
				user.im_addresses.append(jabber + '##jabber')
				
			gtalk = self.get_param('gtalk')
			if gtalk:
				user.im_addresses.append(gtalk + '##gtalk')
				
			user.about_user = self.get_param('about_user')
			user.put()
			
			followers = list(self.get_followers(user=user))
			followers.append(user.nickname)
			self.create_event(event_type='user.edit', followers=followers, user=user)
			
			self.redirect('/module/user/%s' % user.nickname)
Beispiel #21
0
    def execute(self):
        method = self.request.method
        user = self.values['user']

        if method == 'GET':
            self.values['google_adsense'] = self.not_none(user.google_adsense)
            self.values['google_adsense_channel'] = self.not_none(
                user.google_adsense_channel)
            self.values['real_name'] = self.not_none(user.real_name)
            self.values['links'] = [(link.split('##',
                                                2)[1], link.split('##', 2)[0])
                                    for link in user.list_urls]
            self.values['im_addresses'] = [(link.split('##', 2)[1],
                                            link.split('##', 2)[0])
                                           for link in user.im_addresses]
            self.values['country'] = self.not_none(user.country)
            self.values['city'] = self.not_none(user.city)
            self.values['about'] = self.not_none(user.about_user)
            self.values['personal_message'] = self.not_none(
                user.personal_message)
            if user.not_full_rss:
                self.values['not_full_rss'] = user.not_full_rss
            self.render('templates/module/user/user-edit.html')
        elif self.auth():
            user.google_adsense = self.get_param('google_adsense')
            user.google_adsense_channel = self.get_param(
                'google_adsense_channel')
            user.real_name = self.get_param('real_name')
            user.personal_message = self.get_param('personal_message')
            user.country = self.get_param('country')
            if self.get_param('not_full_rss'):
                user.not_full_rss = True
            else:
                user.not_full_rss = False
            image = self.request.get("img")
            if image:
                image = images.im_feeling_lucky(image, images.JPEG)
                user.avatar = img.resize(image, 128, 128)
                user.thumbnail = img.resize(image, 48, 48)
                if not user.image_version:
                    user.image_version = 1
                else:
                    memcache.delete('/images/user/avatar/%s/%d' %
                                    (user.nickname, user.image_version))
                    memcache.delete('/images/user/thumbnail/%s/%d' %
                                    (user.nickname, user.image_version))
                    user.image_version += 1
                memcache.delete('/images/user/avatar/%s' % (user.nickname))
                memcache.delete('/images/user/thumbnail/%s' % (user.nickname))
            user.city = self.get_param('city')
            user.list_urls = []
            blog = self.get_param('blog')
            if blog:
                if not blog.startswith('http'):
                    linkedin = 'http://' + blog
                user.list_urls.append(blog + '##blog')

            linkedin = self.get_param('linkedin')
            if linkedin:
                if not linkedin.startswith('http'):
                    linkedin = 'http://' + linkedin
                user.list_urls.append(linkedin + '##linkedin')

            ohloh = self.get_param('ohloh')
            if ohloh:
                if not ohloh.startswith('http'):
                    linkedin = 'http://' + ohloh
                user.list_urls.append(ohloh + '##ohloh')

            user.im_addresses = []
            msn = self.get_param('msn')
            if msn:
                user.im_addresses.append(msn + '##msn')

            jabber = self.get_param('jabber')
            if jabber:
                user.im_addresses.append(jabber + '##jabber')

            gtalk = self.get_param('gtalk')
            if gtalk:
                user.im_addresses.append(gtalk + '##gtalk')

            user.about_user = self.get_param('about_user')
            user.put()

            followers = list(self.get_followers(user=user))
            followers.append(user.nickname)
            self.create_event(event_type='user.edit',
                              followers=followers,
                              user=user)

            self.redirect('/module/user/%s' % user.nickname)
	def execute(self):
		self.values['tab'] = '/group.list'
		method = self.request.method
		user = self.values['user']
		key = self.get_param('key')

		if method == 'GET':
			if key:
				# show edit form
				group = model.Group.get(key)
				if user.nickname != group.owner.nickname and user.rol != 'admin':
					self.forbidden()
					return
				self.values['key'] = key

				self.values['title'] = group.title
				self.values['description'] = group.description
				if group.all_users is not None:
					self.values['all_users'] = group.all_users
				else:
					self.values['all_users'] = True
				if group.category:
					self.values['category'] = group.category
				self.add_categories()
				self.render('templates/group-edit.html')
			else:
				# show an empty form
				self.values['title'] = 'Grupo...'
				self.values['all_users'] = True
				self.add_categories()
				self.render('templates/group-edit.html')
		elif self.auth():
			if key:
				# update group
				group = model.Group.get(key)
				if user.nickname != group.owner.nickname and user.rol != 'admin':
					self.forbidden()
					return
				# group title is not editable since many-to-many relationships are denormalizated
				# group.title = self.get_param('title')
				group.description = self.get_param('description')
				image = self.request.get("img")
				if image:
					image = images.im_feeling_lucky(image, images.JPEG)
					group.avatar = img.resize(image, 128, 128)
					group.thumbnail = img.resize(image, 48, 48)
					if not group.image_version:
						group.image_version = 1
					else:
						memcache.delete('/images/group/avatar/%s/%d' % (group.key().id(), group.image_version))
						memcache.delete('/images/group/thumbnail/%s/%d' % (group.key().id(), group.image_version))
						group.image_version += 1
					memcache.delete('/images/group/avatar/%s' % group.key().id())
					memcache.delete('/images/group/thumbnail/%s' % group.key().id())
				if self.get_param('all_users'):
					group.all_users = True
				else:
					group.all_users = False
				category = model.Category.get(self.request.get('category'))
				prev_category = group.category
				group.category = category
				group.put()
				
				if prev_category:
					prev_category.groups -= 1
					prev_category.put()
				
				category.groups += 1
				category.put()
				
				memcache.delete('index_groups')
				self.redirect('/group/%s' % (group.url_path, ))
			else:
				# new group
				title = self.get_param('title')
				url_path = '-'
				all_users = False
				if self.get_param('all_users'):
					all_users = True
				group = model.Group(owner=user,
					owner_nickname=user.nickname,
					title=title,
					description=self.get_param('description'),
					url_path=url_path,
					members=1,
					all_users = all_users,
					items=0,
					threads=0,
					responses=0,
					subscribers=[user.email],
					activity=1)
				category = model.Category.get(self.request.get('category'))
				group.category = category
				image = self.request.get("img")
				if image:
					image = images.im_feeling_lucky(image, images.JPEG)
					group.avatar = img.resize(image, 128, 128)
					group.thumbnail = img.resize(image, 48, 48)
					group.image_version = 1
				
				group.put()
				self.add_user_subscription(user, 'group', group.key().id())
				group.url_path = '%d/%s' % (group.key().id(), self.to_url_path(group.title))
				group.put()
				
				category.groups += 1
				category.put()
				
				user.groups += 1
				user.put()
				
				app = model.Application.all().get()
				if app:
					app.groups += 1
					app.put()
				memcache.delete('app')
				
				group_user = model.GroupUser(user=user,
					group=group,
					user_nickname=user.nickname,
					group_title=group.title,
					group_url_path=group.url_path)
				group_user.put()
				memcache.delete('index_groups')
				
				followers = list(self.get_followers(user=user))
				followers.append(user.nickname)
				self.create_event(event_type='group.new', followers=followers, user=user, group=group)
				
				self.add_follower(group=group, nickname=user.nickname)
				
				# TODO: update a user counter to know how many groups is owner of?
				

				self.redirect('/group/%s' % (group.url_path, ))
Beispiel #23
0
    def execute(self):
        self.values['tab'] = '/module/community.list'
        method = self.request.method
        user = self.values['user']
        key = self.get_param('key')

        if method == 'GET':
            if key:
                # show edit form
                community = model.Community.get(key)
                if user.nickname != community.owner.nickname and user.rol != 'admin':
                    self.forbidden()
                    return
                self.values['key'] = key

                self.values['title'] = community.title
                self.values['description'] = community.description
                if community.all_users is not None:
                    self.values['all_users'] = community.all_users
                else:
                    self.values['all_users'] = True
                if community.category:
                    self.values['category'] = community.category
                self.add_categories()
                self.render('templates/module/community/community-edit.html')
            else:
                # show an empty form
                self.values['title'] = "New community..."
                self.values['all_users'] = True
                self.add_categories()
                self.render('templates/module/community/community-edit.html')
        elif self.auth():
            if key:
                # update community
                community = model.Community.get(key)
                if user.nickname != community.owner.nickname and user.rol != 'admin':
                    self.forbidden()
                    return
                # community title is not editable since many-to-many relationships are denormalizated
                # community.title = self.get_param('title')
                community.description = self.get_param('description')
                image = self.request.get("img")
                if image:
                    image = images.im_feeling_lucky(image, images.JPEG)
                    community.avatar = img.resize(image, 128, 128)
                    community.thumbnail = img.resize(image, 48, 48)
                    if not community.image_version:
                        community.image_version = 1
                    else:
                        memcache.delete(
                            '/images/community/avatar/%s/%d' %
                            (community.key().id(), community.image_version))
                        memcache.delete(
                            '/images/community/thumbnail/%s/%d' %
                            (community.key().id(), community.image_version))
                        community.image_version += 1
                    memcache.delete('/images/community/avatar/%s' %
                                    community.key().id())
                    memcache.delete('/images/community/thumbnail/%s' %
                                    community.key().id())
                if self.get_param('all_users'):
                    community.all_users = True
                else:
                    community.all_users = False
                category = model.Category.get(self.request.get('category'))
                prev_category = community.category
                community.category = category
                community.put()

                if prev_category:
                    prev_category.communities -= 1
                    prev_category.put()

                category.communities += 1
                category.put()

                memcache.delete('index_communities')
                self.redirect('/module/community/%s' % (community.url_path, ))
            else:
                # new community
                title = self.get_param('title')
                url_path = '-'
                all_users = False
                if self.get_param('all_users'):
                    all_users = True
                community = model.Community(
                    owner=user,
                    owner_nickname=user.nickname,
                    title=title,
                    description=self.get_param('description'),
                    url_path=url_path,
                    members=1,
                    all_users=all_users,
                    articles=0,
                    threads=0,
                    responses=0,
                    subscribers=[user.email],
                    activity=1)
                category = model.Category.get(self.request.get('category'))
                community.category = category
                image = self.request.get("img")
                if image:
                    image = images.im_feeling_lucky(image, images.JPEG)
                    community.avatar = img.resize(image, 128, 128)
                    community.thumbnail = img.resize(image, 48, 48)
                    community.image_version = 1

                community.put()
                self.add_user_subscription(user, 'community',
                                           community.key().id())
                community.url_path = '%d/%s' % (
                    community.key().id(), self.to_url_path(community.title))
                community.put()

                category.communities += 1
                category.put()

                user.communities += 1
                user.put()

                app = model.Application.all().get()
                if app:
                    if app.communities:
                        app.communities += 1
                    else:
                        app.communities = 1
                    app.put()
                    memcache.delete('app')

                community_user = model.CommunityUser(
                    user=user,
                    community=community,
                    user_nickname=user.nickname,
                    community_title=community.title,
                    community_url_path=community.url_path)
                community_user.put()
                memcache.delete('index_communities')

                followers = list(self.get_followers(user=user))
                followers.append(user.nickname)
                self.create_event(event_type='community.new',
                                  followers=followers,
                                  user=user,
                                  community=community)

                self.add_follower(community=community, nickname=user.nickname)

                # TODO: update a user counter to know how many communities is owner of?

                self.redirect('/module/community/%s' % (community.url_path, ))
    def execute(self):
        method = self.request.method
        user = self.values["user"]

        if method == "GET":
            self.values["google_adsense"] = self.not_none(user.google_adsense)
            self.values["google_adsense_channel"] = self.not_none(user.google_adsense_channel)
            self.values["real_name"] = self.not_none(user.real_name)
            self.values["links"] = [(link.split("##", 2)[1], link.split("##", 2)[0]) for link in user.list_urls]
            self.values["im_addresses"] = [
                (link.split("##", 2)[1], link.split("##", 2)[0]) for link in user.im_addresses
            ]
            self.values["country"] = self.not_none(user.country)
            self.values["city"] = self.not_none(user.city)
            self.values["about"] = self.not_none(user.about_user)
            self.values["personal_message"] = self.not_none(user.personal_message)
            if user.not_full_rss:
                self.values["not_full_rss"] = user.not_full_rss
            self.render("templates/user-edit.html")
        elif self.auth():
            user.google_adsense = self.get_param("google_adsense")
            user.google_adsense_channel = self.get_param("google_adsense_channel")
            user.real_name = self.get_param("real_name")
            user.personal_message = self.get_param("personal_message")
            user.country = self.get_param("country")
            if self.get_param("not_full_rss"):
                user.not_full_rss = True
            else:
                user.not_full_rss = False
            image = self.request.get("img")
            if image:
                image = images.im_feeling_lucky(image, images.JPEG)
                user.avatar = img.resize(image, 128, 128)
                user.thumbnail = img.resize(image, 48, 48)
                if not user.image_version:
                    user.image_version = 1
                else:
                    memcache.delete("/images/user/avatar/%s/%d" % (user.nickname, user.image_version))
                    memcache.delete("/images/user/thumbnail/%s/%d" % (user.nickname, user.image_version))
                    user.image_version += 1
                memcache.delete("/images/user/avatar/%s" % (user.nickname))
                memcache.delete("/images/user/thumbnail/%s" % (user.nickname))
            user.city = self.get_param("city")
            user.list_urls = []
            blog = self.get_param("blog")
            if blog:
                if not blog.startswith("http"):
                    linkedin = "http://" + blog
                user.list_urls.append(blog + "##blog")

            linkedin = self.get_param("linkedin")
            if linkedin:
                if not linkedin.startswith("http"):
                    linkedin = "http://" + linkedin
                user.list_urls.append(linkedin + "##linkedin")

            ohloh = self.get_param("ohloh")
            if ohloh:
                if not ohloh.startswith("http"):
                    linkedin = "http://" + ohloh
                user.list_urls.append(ohloh + "##ohloh")

            user.im_addresses = []
            msn = self.get_param("msn")
            if msn:
                user.im_addresses.append(msn + "##msn")

            jabber = self.get_param("jabber")
            if jabber:
                user.im_addresses.append(jabber + "##jabber")

            gtalk = self.get_param("gtalk")
            if gtalk:
                user.im_addresses.append(gtalk + "##gtalk")

            user.about_user = self.get_param("about_user")
            user.put()

            followers = list(self.get_followers(user=user))
            followers.append(user.nickname)
            self.create_event(event_type="user.edit", followers=followers, user=user)

            self.redirect("/user/%s" % user.nickname)
Beispiel #25
0
	def execute(self):
		self.values['tab'] = '/module/community.list'
		method = self.request.method
		user = self.values['user']
		key = self.get_param('key')

		if method == 'GET':
			if key:
				# show edit form
				community = model.Community.get(key)
				if user.nickname != community.owner.nickname and user.rol != 'admin':
					self.forbidden()
					return
				self.values['key'] = key

				self.values['title'] = community.title
				self.values['description'] = community.description
				if community.all_users is not None:
					self.values['all_users'] = community.all_users
				else:
					self.values['all_users'] = True
				if community.category:
					self.values['category'] = community.category
				self.add_categories()
				self.render('templates/module/community/community-edit.html')
			else:
				# show an empty form
				self.values['title'] = "New community..."
				self.values['all_users'] = True
				self.add_categories()
				self.render('templates/module/community/community-edit.html')
		elif self.auth():
			if key:
				# update community
				community = model.Community.get(key)
				if user.nickname != community.owner.nickname and user.rol != 'admin':
					self.forbidden()
					return
				# community title is not editable since many-to-many relationships are denormalizated
				# community.title = self.get_param('title')
				community.description = self.get_param('description')
				image = self.request.get("img")
				if image:
					image = images.im_feeling_lucky(image, images.JPEG)
					community.avatar = img.resize(image, 128, 128)
					community.thumbnail = img.resize(image, 48, 48)
					if not community.image_version:
						community.image_version = 1
					else:
						memcache.delete('/images/community/avatar/%s/%d' % (community.key().id(), community.image_version))
						memcache.delete('/images/community/thumbnail/%s/%d' % (community.key().id(), community.image_version))
						community.image_version += 1
					memcache.delete('/images/community/avatar/%s' % community.key().id())
					memcache.delete('/images/community/thumbnail/%s' % community.key().id())
				if self.get_param('all_users'):
					community.all_users = True
				else:
					community.all_users = False
				category = model.Category.get(self.request.get('category'))
				prev_category = community.category
				community.category = category
				community.put()
				
				if prev_category:
					prev_category.communities -= 1
					prev_category.put()
				
				category.communities += 1
				category.put()
				
				memcache.delete('index_communities')
				self.redirect('/module/community/%s' % (community.url_path, ))
			else:
				# new community
				title = self.get_param('title')
				url_path = '-'
				all_users = False
				if self.get_param('all_users'):
					all_users = True
				community = model.Community(owner=user,
					owner_nickname=user.nickname,
					title=title,
					description=self.get_param('description'),
					url_path=url_path,
					members=1,
					all_users = all_users,
					articles=0,
					threads=0,
					responses=0,
					subscribers=[user.email],
					activity=1)
				category = model.Category.get(self.request.get('category'))
				community.category = category
				image = self.request.get("img")
				if image:
					image = images.im_feeling_lucky(image, images.JPEG)
					community.avatar = img.resize(image, 128, 128)
					community.thumbnail = img.resize(image, 48, 48)
					community.image_version = 1
				
				community.put()
				self.add_user_subscription(user, 'community', community.key().id())
				community.url_path = '%d/%s' % (community.key().id(), self.to_url_path(community.title))
				community.put()
				
				category.communities += 1
				category.put()
				
				user.communities += 1
				user.put()
				
				app = model.Application.all().get()
				if app:
					if app.communities:
						app.communities += 1
					else:
						app.communities =1
					app.put()
					memcache.delete('app')
				
				community_user = model.CommunityUser(user=user,
					community=community,
					user_nickname=user.nickname,
					community_title=community.title,
					community_url_path=community.url_path)
				community_user.put()
				memcache.delete('index_communities')
				
				followers = list(self.get_followers(user=user))
				followers.append(user.nickname)
				self.create_event(event_type='community.new', followers=followers, user=user, community=community)
				
				self.add_follower(community=community, nickname=user.nickname)
				
				# TODO: update a user counter to know how many communities is owner of?
				

				self.redirect('/module/community/%s' % (community.url_path, ))