Exemple #1
0
def enable(request, key):   
  if request.method != 'POST':
    return MethodNotAllowed()

  if request.user.is_anonymous() or not request.user.is_admin:
    return Unauthorized()
    
  recipe = models.Recipe.get(key)
  if not recipe:
    return NotFound()
  
  # Zmień status na włączony
  recipe.disabled = False
  recipe.put()

  if recipe.rec_vis == VISIBILITY[2]:
    def utx():
      user = PMMUser.get(recipe.parent_key())
      user.rec_pub += 1
      user.put()
      cache_delete('gfcu', recipe.parent_key().name())
    db.run_in_transaction(utx)

  # na później odłóż indeksację, uaktualnienie tagów i licznika kategorii
  deferred_lib.defer(deferred.recipe_update, recipe.key(), 'enable')

  request.notifications.success('Przepis włączony!')
  return render_json_response({'redirectUrl': url_for('przepisy/disabled_list')})
Exemple #2
0
def favs_button(request, operation, key):
  if operation not in ('dodaj', 'usun'):
    return NotFound()
    
  if request.user.is_anonymous():
    return Unauthorized()
  
  db_key = db.Key(key)
    
  if db_key.kind() != 'Recipe':
    return NotFound()
    
  if operation == 'dodaj':
    models.Favs.add_one(request.user.key(), db_key)
    return render_json_response({'msg': 'Przepis dodany do ulubionych'})
  else:
    models.Favs.remove_one(request.user.key(), db_key)
    return render_json_response({'msg': 'Przepis usunięty z ulubionych'})
Exemple #3
0
def remove(request, key):
  if request.method != 'POST':
    return MethodNotAllowed()
  
  if request.user.is_anonymous():
    return Unauthorized()
    
  recipe = models.Recipe.get(key)
  if not recipe:
    return NotFound()
  
  # Użytkownik może usunąć swój publiczny przepis tą metodą, ale nie jest to reklamowane!
  if not (request.user.is_admin or request.user.key() == recipe.parent_key()):
    return Unauthorized()
  
  # Jeśli jest już wyłączony, wykonaj prostsze kroki usuwające
  if recipe.disabled:
    to_delete = models.RecipeIngr.all().ancestor(recipe).fetch(20)
    db.delete(to_delete)
  
    Counter.remove_by_name(SHARD_RECIPE_KEY % recipe.key())
    
    recipe.delete()
  else:
    # Zmień status na wyłączony  
    recipe.disabled = True
    recipe.put()
    
    # Usuń liczniki, składniki i użytkownika
    to_delete = models.RecipeIngr.all().ancestor(recipe).fetch(20)
    db.delete(to_delete)
    
    Counter.remove_by_name(SHARD_RECIPE_KEY % recipe.key())
    
    if recipe.rec_vis == VISIBILITY[2]:
      def utx():
        user = PMMUser.get(recipe.parent_key())
        user.rec_pub -= 1
        if user.rec_pub < 0:
          user.rec_pub = 0
        user.put()
        cache_delete('gfcu', recipe.parent_key().name())
      db.run_in_transaction(utx)
  
    # na później odłóż indeksację, uaktualnienie tagów i licznika kategorii
    deferred_lib.defer(deferred.recipe_update, recipe.key(), 'delete')
  
  request.notifications.success('Przepis usunięty!')
  return render_json_response({'redirectUrl': url_for('przepisy/my_list')})