def complete_award_to(self, user_data, target_context=None, target_context_name=None): name_with_context = self.name_with_target_context(target_context_name) key_name = user_data.key_email + ":" + name_with_context if user_data.badges is None: user_data.badges = [] user_data.badges.append(name_with_context) user_badge = models_badges.UserBadge.get_by_key_name(key_name) if user_badge is None: user_data.add_points(self.points) user_badge = models_badges.UserBadge( key_name=key_name, user=user_data.user, badge_name=self.name, target_context=target_context, target_context_name=target_context_name, points_earned=self.points) user_badge.put() # call notifications phantom_users.util_notify.update(user_data, None, threshold=False, isProf=False, gotBadge=True) UserNotifier.push_badge_for_user_data(user_data, user_badge)
def welcome(user_data): if user_data == None: return False UserNotifier.push_login_for_user_data( user_data, "Welcome to Khan Academy! To get the best experience you should [login]" )
def complete_award_to(self, user_data, target_context=None, target_context_name=None): name_with_context = self.name_with_target_context(target_context_name) key_name = user_data.key_email + ":" + name_with_context if user_data.badges is None: user_data.badges = [] user_data.badges.append(name_with_context) user_badge = models_badges.UserBadge.get_by_key_name(key_name) if user_badge is None: user_data.add_points(self.points) user_badge = models_badges.UserBadge( key_name = key_name, user = user_data.user, badge_name = self.name, target_context = target_context, target_context_name = target_context_name, points_earned = self.points) user_badge.put() # call notifications phantom_users.util_notify.update(user_data,None,threshold = False, isProf = False, gotBadge = True) UserNotifier.push_badge_for_user_data(user_data, user_badge)
def _upgrade_phantom_into(phantom_data, target_data): """Attempt to merge a phantom user into a target user. Will bail if any signs that the target user has previous activity. """ # First make sure user has 0 points and phantom user has some activity if (phantom_data and phantom_data.points > 0): if phantom_data.consume_identity(target_data): # Phantom user just converted into a real user. user_counter.add(1) # Clear all "login" notifications UserNotifier.clear_all(phantom_data) return True return False
def update(user_data, user_exercise, threshold=False, isProf=False, gotBadge=False): if user_data == None: return False if not user_data.is_phantom: return False numquest = None if user_exercise != None: numquest = user_exercise.total_done prof = str(models.Exercise.to_display_name(user_exercise.exercise)) numbadge = user_data.badges numpoint = user_data.points # First question if (numquest == 1): UserNotifier.push_login_for_user_data( user_data, "פתרתם את התרגיל הראשון שלכם! כדאי לכם [login]") # Every 10 questions, more than 20 every 5 if (numquest != None and numquest % 10 == 0) or \ (numquest != None and numquest > 20 and numquest % 5 == 0): UserNotifier.push_login_for_user_data( user_data, "פתרתם " + str(numquest) + " תרגילים! כדאי לכם [login]") #Proficiency if isProf: UserNotifier.push_login_for_user_data( user_data, "אתם מיומנים ב-" + str(prof) + ". כדאי לכם [login]") #First Badge if numbadge != None and len(numbadge) == 1 and gotBadge: achievements_url = "%s/achievements" % user_data.profile_root UserNotifier.push_login_for_user_data( user_data, "ברכות על ה<a href='%s'>תג</a> הראשון שלכם! כדאי לכם [login]" % achievements_url) #Every badge after if numbadge != None and len(numbadge) > 1 and gotBadge: UserNotifier.push_login_for_user_data( user_data, "השגתם <a href='/profile'>" + str(len(numbadge)) + " תגים</a> עד כה. כדאי לכם [login]") #Every 2.5k points if numpoint != None and threshold: numpoint = 2500 * (numpoint / 2500) + 2500 UserNotifier.push_login_for_user_data( user_data, "השגתם <a href='/profile'>" + str(numpoint) + " נקודות</a>! כדאי לכם [login]")
def badge_notifications(): user_badges = UserNotifier.pop_for_current_user_data()["badges"] return badge_notifications_html(user_badges)
def get(self): cont = self.request_string('continue', default = "/") # Immediately after login we make sure this user has a UserData entity user_data = UserData.current() if user_data: # Update email address if it has changed current_google_user = users.get_current_user() if current_google_user and current_google_user.email() != user_data.email: user_data.user_email = current_google_user.email() user_data.put() # Update nickname if it has changed current_nickname = get_nickname_for(user_data) if user_data.user_nickname != current_nickname: user_data.user_nickname = current_nickname user_data.put() # Set developer and moderator to True if user is admin if (not user_data.developer or not user_data.moderator) and users.is_current_user_admin(): user_data.developer = True user_data.moderator = True user_data.put() # If user is brand new and has 0 points, migrate data phantom_id = get_phantom_user_id_from_cookies() if phantom_id: phantom_data = UserData.get_from_db_key_email(phantom_id) # First make sure user has 0 points and phantom user has some activity if user_data.points == 0 and phantom_data and phantom_data.points > 0: # Make sure user has no students if not user_data.has_students(): # Clear all "login" notifications UserNotifier.clear_all(phantom_data) # Update phantom user_data to real user_data phantom_data.user_id = user_data.user_id phantom_data.current_user = user_data.current_user phantom_data.user_email = user_data.user_email phantom_data.user_nickname = user_data.user_nickname if phantom_data.put(): # Phantom user was just transitioned to real user user_counter.add(1) user_data.delete() cont = "/newaccount?continue=%s" % cont else: # If nobody is logged in, clear any expired Facebook cookie that may be hanging around. self.delete_cookie("fbsr_" + App.facebook_app_id) self.delete_cookie("fbs_" + App.facebook_app_id) logging.critical("Missing UserData during PostLogin, with id: %s, cookies: (%s), google user: %s" % ( util.get_current_user_id(), os.environ.get('HTTP_COOKIE', ''), users.get_current_user() ) ) # Always delete phantom user cookies on login self.delete_cookie('ureg_id') self.redirect(cont)
def login_notifications(user_data, continue_url): login_notifications = UserNotifier.pop_for_current_user_data()["login"] return login_notifications_html(login_notifications, user_data, continue_url)
def update(user_data, user_exercise, threshold=False, isProf=False, gotBadge=False): if user_data == None: return False if not user_data.is_phantom: return False numquest = None numbadge = None numpoint = None if user_exercise != None: numquest = user_exercise.total_done prof = str(models.Exercise.to_display_name(user_exercise.exercise)) numbadge = user_data.badges numpoint = user_data.points # First question if (numquest == 1): UserNotifier.push_login_for_user_data( user_data, "You've answered your first question! You should [login]") # Every 10 questions, more than 20 every 5 if (numquest != None and numquest % 10 == 0) or \ (numquest != None and numquest > 20 and numquest % 5 == 0): UserNotifier.push_login_for_user_data( user_data, "You've answered " + str(numquest) + " questions! You should [login]") #Proficiency if isProf: UserNotifier.push_login_for_user_data( user_data, "You're proficient in " + str(prof) + ". You should [login]") #First Badge if numbadge != None and len(numbadge) == 1 and gotBadge: UserNotifier.push_login_for_user_data( user_data, "Congrats on your first <a href='/profile'>badge</a>! You should [login]" ) #Every badge after if numbadge != None and len(numbadge) > 1 and gotBadge: UserNotifier.push_login_for_user_data( user_data, "You've earned <a href='/profile'>" + str(len(numbadge)) + " badges</a> so far. You should [login]") #Every 2.5k points if numpoint != None and threshold: numpoint = 2500 * (numpoint / 2500) + 2500 UserNotifier.push_login_for_user_data( user_data, "You've earned over <a href='/profile'>" + str(numpoint) + " points</a>! You should [login]")
def post(self): UserNotifier.clear_login_notifications(user_models.UserData.current())
def welcome(user_data): if user_data == None: return False UserNotifier.push_login_for_user_data(user_data,"ברוכים הבאים לאקדמיית קהאן! לחוויה מלאה ממולץ [login]")
def update(user_data, user_exercise, threshold=False, isProf=False, gotBadge=False): if user_data == None: return False if not user_data.is_phantom: return False numquest = None if user_exercise != None: numquest = user_exercise.total_done prof = models.Exercise.get_by_name(user_exercise.exercise).display_name numbadge = user_data.badges numpoint = user_data.points # First question if (numquest == 1): UserNotifier.push_login_for_user_data(user_data,"פתרתם את התרגיל הראשון שלכם! כדאי לכם [login]") # Every 10 questions, more than 20 every 5 if (numquest != None and numquest % 10 == 0) or \ (numquest != None and numquest > 20 and numquest % 5 == 0): UserNotifier.push_login_for_user_data(user_data,"פתרתם %s תרגילים! כדאי לכם [login]" % numquest) #Proficiency if isProf: UserNotifier.push_login_for_user_data(user_data,"אתם מיומנים ב-%s. כדאי לכם [login]" % prof) #First Badge if numbadge != None and len(numbadge) == 1 and gotBadge: achievements_url = "%s/achievements" % user_data.profile_root UserNotifier.push_login_for_user_data( user_data, "ברכות על ה<a href='%s'>תג</a> הראשון שלכם! כדאי לכם [login]" % achievements_url) #Every badge after if numbadge != None and len(numbadge) > 1 and gotBadge: UserNotifier.push_login_for_user_data(user_data,"השגתם <a href='/profile'>"+str(len(numbadge))+" תגים</a> עד כה. כדאי לכם [login]") #Every 2.5k points if numpoint != None and threshold: numpoint = 2500*(numpoint/2500)+2500 UserNotifier.push_login_for_user_data(user_data,"השגתם <a href='/profile'>"+str(numpoint)+ " נקודות</a>! כדאי לכם [login]")
def welcome(user_data): if user_data == None: return False UserNotifier.push_login_for_user_data( user_data, "ברוכים הבאים לאקדמיית קהאן! לחוויה מלאה ממולץ [login]")
def post(self): UserNotifier.clear_login()
def welcome(user_data): if user_data == None: return False UserNotifier.push_login_for_user_data(user_data,"Welcome to Khan Academy! To get the best experience you should [login]")
def update(user_data, user_exercise, threshold=False, isProf=False, gotBadge=False): if user_data == None: return False if not user_data.is_phantom: return False numquest = None numbadge = None numpoint = None if user_exercise != None: numquest = user_exercise.total_done prof = str(models.Exercise.to_display_name(user_exercise.exercise)) numbadge = user_data.badges numpoint = user_data.points # First question if (numquest == 1): UserNotifier.push_login_for_user_data(user_data,"You've answered your first question! You should [login]") # Every 10 questions, more than 20 every 5 if (numquest != None and numquest % 10 == 0) or \ (numquest != None and numquest > 20 and numquest % 5 == 0): UserNotifier.push_login_for_user_data(user_data,"You've answered "+str(numquest)+" questions! You should [login]") #Proficiency if isProf: UserNotifier.push_login_for_user_data(user_data,"You're proficient in "+str(prof)+". You should [login]") #First Badge if numbadge != None and len(numbadge) == 1 and gotBadge: UserNotifier.push_login_for_user_data(user_data,"Congrats on your first <a href='/profile'>badge</a>! You should [login]") #Every badge after if numbadge != None and len(numbadge) > 1 and gotBadge: UserNotifier.push_login_for_user_data(user_data,"You've earned <a href='/profile'>"+str(len(numbadge))+" badges</a> so far. You should [login]") #Every 2.5k points if numpoint != None and threshold: numpoint = 2500*(numpoint/2500)+2500 UserNotifier.push_login_for_user_data(user_data,"You've earned over <a href='/profile'>"+str(numpoint)+ " points</a>! You should [login]")