Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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]"
    )
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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]")
Ejemplo n.º 7
0
def badge_notifications():
    user_badges = UserNotifier.pop_for_current_user_data()["badges"]
    return badge_notifications_html(user_badges)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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]")
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
 def post(self):
     UserNotifier.clear_login_notifications(user_models.UserData.current())
Ejemplo n.º 13
0
def welcome(user_data):
    if user_data == None:
        return False
    UserNotifier.push_login_for_user_data(user_data,"ברוכים הבאים לאקדמיית קהאן! לחוויה מלאה ממולץ [login]")
Ejemplo n.º 14
0
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]")
Ejemplo n.º 15
0
def welcome(user_data):
    if user_data == None:
        return False
    UserNotifier.push_login_for_user_data(
        user_data, "ברוכים הבאים לאקדמיית קהאן! לחוויה מלאה ממולץ [login]")
Ejemplo n.º 16
0
 def post(self):
     UserNotifier.clear_login()
Ejemplo n.º 17
0
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]")
Ejemplo n.º 18
0
def badge_notifications():
    user_badges = UserNotifier.pop_for_current_user_data()["badges"]
    return badge_notifications_html(user_badges)
Ejemplo n.º 19
0
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]")
Ejemplo n.º 20
0
 def post(self):
     UserNotifier.clear_login()
Ejemplo n.º 21
0
 def post(self):
     UserNotifier.clear_login_notifications(user_models.UserData.current())