Ejemplo n.º 1
0
    def get (self):
        tool_user, db_user = ADayThere.tool_user ()

        if not ADayThere.admin_user (db_user):
            self.response.status = 401
            self.response.write ("Unauthorized")
            return

        adaythere = ADayThere ()
        adaythere.add_meta_tags ([
            { "charset":"UTF-8" },
            { "http-equiv":"X-UA-Compatible", "content":"IE=edge" },
            { "name":"viewport", "content":"initial-scale=1"}
        ])

        adaythere.add_links ([
            { "rel":"stylesheet", "href":"css/bootstrap.css" },
            { "rel":"stylesheet", "href":"css/adaythere.css" }
        ])
        
        adaythere.add_script_tags_for_body ([
            { "src":"js/jquery-1.11.0-beta2.js" },
            { "src":"js/angular/angular.min.js" },
            { "src":"js/angular/angular-route.min.js" },
            { "src":"js/ui-bootstrap-tpls-0.10.0.min.js" },
            { "src":"js/adaythere.js" }
        ])

        
        adaythere.open_element ("header", {"id":"page_header"})
        adaythere.open_element ("h1", {"id":"page_heading"}, "A Day There - Administration Page")
        adaythere.close_element ("h1")
        adaythere.open_element ("nav")
        adaythere.append_to_element ("")
        adaythere.close_element ("nav")
        adaythere.close_element ("header")

        adaythere.open_element ("section", {"ng-controller":"adminCtrl", "style":"width:600px;margin:0px auto;"})

        adaythere.open_element ("div", {"id":"admin_profile_div"})

        type = self.request.get ('type', default_value=None)

        if type is not None:
            if type == 'profiles':
                self.get_profile_form (adaythere)
            elif type == 'days':
                self.get_days_form (adaythere)

        adaythere.close_element ("div")

        adaythere.close_element ("section")

        adaythere.open_element ("footer", {"id":"page_footer"})
        adaythere.open_element ("p", None, "© 2014 SoftSprocket")
        adaythere.close_element ("p")
        adaythere.close_element ("footer")

        self.response.status = 200
        self.response.write (adaythere.get ())
Ejemplo n.º 2
0
    def post(self):

        tool_user, db_user = ADayThere.tool_user()
        if not tool_user:
            self.response.status = 401
            return

        data = json.loads(self.request.body)

        day = Day.query_user_title(db_user.user_id, data["title"]).get()

        KeywordsDayList.delete_keywords(day)

        day.full_locality = data["full_locality"]
        day.title = data["title"]
        day.description = data["description"]

        if isinstance(data["keywords"], basestring):
            if "," in data["keywords"]:
                day.keywords = data["keywords"].split(",")
            else:
                day.keywords = data["keywords"].split(" ")
        else:
            day.keywords = data["keywords"]

        for keyword in day.keywords:
            Keywords.add_if_missing(keyword)

        day.places = []
        for place in data["places"]:
            p = Place()
            p.name = place["name"]
            p.comment = place["comment"]
            p.location = Location()
            p.location.latitude = str(place["location"]["latitude"])
            p.location.longitude = str(place["location"]["longitude"])
            p.location.vicinity = place["vicinity"]
            day.places.append(p)

        day.photos = []
        for photo in data["photos"]:
            day_photo = DayPhoto()
            day_photo.title = photo["title"]
            day_photo.description = photo["description"]

            day.photos.append(day_photo)

            photo_query = Photos.query_photo(db_user.user_id, photo["title"])
            pq = photo_query.get()
            cnt = pq.used_by.count(day.title)
            if cnt == 0:
                pq.used_by.append(day.title)

        day.put()

        KeywordsDayList.add_keywords(day)

        Words.update_words(day.title, day.description, day.key, day.full_locality)

        self.response.status = 200
Ejemplo n.º 3
0
    def delete(self):

        tool_user, db_user = ADayThere.tool_user()
        if not tool_user:
            self.response.status = 401
            return

        title = self.request.get("title")
        day = Day.query_user_title(db_user.user_id, title).get()

        for photo in day.photos:
            photo_query = Photos.query_photo(db_user.user_id, photo.title)
            pq = photo_query.get()
            try:
                index = pq.index(day.title)
                day.title.pop(index)
            except:
                pass

            pq.key.delete()

        day.key.delete()

        KeywordsDayList.delete_keywords(day)

        Words.delete_words(day.key)

        self.response.status = 200
Ejemplo n.º 4
0
    def put (self):
        logged_in_user, commenters_id = ADayThere.tool_user ()
       
        if not logged_in_user:
            self.response.status = 401
            return

        data = json.loads (self.request.body)

        print "DATA", data

        userid = data.get ('userid', None)
        title = data.get ('title', None)
        review = data.get ('rating', 1)

        if title is None or userid is None:
            self.response.status = 401
            return
            

        
        prev_comment = UserComment.query_previous_comment (commenters_id.name, userid, title).get ()

        if prev_comment is not None:
            self.response.status = 409
            self.response.write (json.dumps ({'rating': prev_comment.rating, 'title': prev_comment.title}))
            return

        day = Day.query_user_title (userid, title).get ()

        if day is None:
            self.response.status = 403
            return


        new_comment = UserComment ()
        new_comment.commenters_name = commenters_id.name
        new_comment.userid = userid
        new_comment.title = title
        new_comment.text = data.get ('text', None)
        new_comment.rating = review

        new_comment.put ()
        
        if day.numberOfReviews == None or day.numberOfReviews == 0:
            day.numberOfReviews = 1;
            day.averageReview = review;
        else:
            rev = (day.numberOfReviews * day.averageReview) + review
            day.numberOfReviews = day.numberOfReviews + 1
            day.averageReview = rev / day.numberOfReviews

        day.put ()

        self.response.write (json.dumps ({'numberOfReviews': day.numberOfReviews, 'averageReview': day.averageReview, 'review': new_comment.to_dict ()}));

        self.response.status = 200
Ejemplo n.º 5
0
    def get (self):

        tool_user, db_user = ADayThere.tool_user ()
        if not tool_user:
            self.response.status = 401
            return

        action = self.request.get ('action');

        if action is None:
            self.response.status = 401
            return

        if (action == 'count'):
            count = 0
            query = Photos.query_user_id (db_user.user_id)
            if query is not None:
                count = query.count ()

            res = json.dumps ({ "count": count })
            self.response.write (res)
            return
        
        elif (action == 'img'):
            title = self.request.get ('title', None)
            if title is None:
                self.response.status = 401
                return

            photo_query = Photos.query_photo (db_user.user_id, title)
            photo = photo_query.get ()
            
            if photo is None:
                self.response.status = 404
                return

            self.response.headers['Content-Type'] = 'image/png'
            self.response.write (photo.photo)
            return

        elif (action == 'list'):
            list_query = Photos.query_user_id (db_user.user_id)
            
            if list_query is None:
                self.response.status = 404
                return

            titles = []
            photos = list_query.fetch ()
            for photo in photos:
                d = {}
                d['title'] = photo.title;
                d['used_by'] = photo.used_by;
                titles.append (d)

            self.response.write (json.dumps (titles))
            return
Ejemplo n.º 6
0
    def get (self):
        
        tool_user, db_user = ADayThere.tool_user ()

        if not tool_user or not ADayThere.admin_user (db_user):
            self.response.status = 401 
            self.response.write ("Unauthorized")
            return

        query = User.query ()
        if 'name' in self.request.GET.keys ():
            name = self.request.GET['name']
            if name != '':
                query = query.filter (User.name == name) 

        if 'email' in self.request.GET.keys ():
            email = self.request.GET['email']
            if email != '':
                query = query.filter (User.email == email)

        if 'user_id' in self.request.GET.keys ():    
            uid = self.request.GET['user_id']
            if uid != '':
                query = query.filter (User.user_id == uid)


        limit = self.request.get ('limit', None)
        if limit is None:
            limit = ProfilesHandler.max_limit

        cursor = ndb.Cursor (urlsafe=self.request.get ('cursor'))

        users, cursor, more = query.fetch_page (int (limit), start_cursor=cursor)

        users_arr = []

        for each in users:
            u = self.__build_user (each)
            users_arr.append (u)

        safe_cursor = ''
        if cursor:
            safe_cursor = cursor.urlsafe ()

        resp_obj = {
            "users": users_arr,
            "cursor": safe_cursor,
            "more": more
        }

        resp = json.dumps (resp_obj)
        self.response.write (resp)
Ejemplo n.º 7
0
    def get (self):
        
        tool_user, db_user = ADayThere.tool_user ()

        if not ADayThere.admin_user (db_user):
            self.response.status = 401
            self.response.write ("Unauthorized")
            return

        query = Day.query ()
        if 'name' in self.request.GET.keys ():
            name = self.request.GET['name']
            if name != '':
                query = query.filter (Day.name == name) 

        if 'title' in self.request.GET.keys ():
            title = self.request.GET['title']
            if title != '':
                query = query.filter (Day.title == title)

        if 'locale' in self.request.GET.keys ():    
            locale = self.request.GET['locale']
            if locale != '':
                query = query.filter (Day.full_locality == locale)

        limit = self.request.get ('limit', None)
        if limit is None:
            limit = DaysHandler.max_limit

        cursor = ndb.Cursor (urlsafe=self.request.get ('cursor'))

        days, cursor, more = query.fetch_page (int (limit), start_cursor=cursor)

        days_arr = []

        for each in days:
            d = self.__build_day (each)
            days_arr.append (d)

        safe_cursor = ''
        if cursor:
            safe_cursor = cursor.urlsafe ()

        resp_obj = {
            "days": days_arr,
            "cursor": safe_cursor,
            "more": more
        }

        resp = json.dumps (resp_obj)
        self.response.write (resp)
Ejemplo n.º 8
0
    def get(self):

        tool_user, db_user = ADayThere.tool_user()
        if not tool_user:
            self.response.status = 401
            return

        days = []
        data = Day.query_user(db_user.user_id).fetch()

        for each in data:
            days.append(json.dumps(each.to_dict()))

        self.response.write(json.dumps(days))
Ejemplo n.º 9
0
    def __init__(self, db_user):
        admin_menu = ""

        tool_user, holder = ADayThere.tool_user()

        if ADayThere.admin_user(db_user):
            admin_menu = """
                <li class="dropdown" ng-controller="adminCtrl">
                    <a href="/admin" class="dropdown-toggle">
                        Admin
                    </a>
                    <ul class="dropdown-menu adt-nav-menu-button">
                        <a href="/admin?type=profiles">profiles</a>
                        <a href="/admin?type=days">days</a>
                    </ul>
                </li>
            """

        self.html = """
            <li class="dropdown" ng-controller="loginCtrl">
                <a href ng-click="googlelogout()" class="dropdown-toggle">
                    Logout
                </a>
            </li>
            <li class="dropdown" ng-controller="profileCtrl">
                <a href class="dropdown-toggle" id="profile_ctrl_menu_toggle">
                    {0}
                </a>
                <ul id="tool_user_related_menu" class="dropdown-menu adt-nav-menu-button">
        """.format(
            db_user.name
        )

        if tool_user:
            self.html += LoggedInNavView.tool_user_menus()
        else:
            self.html += LoggedInNavView.non_tool_user_menus()

        self.html += """
                </ul>
            </li>
                {0}
                {1}
                {2}
            <a href popover-placement="bottom" popover-trigger="mouseenter" popover="Click links to see drop down menus">?</a>
        """.format(
            get_help_menu(), get_contact_menu(), admin_menu
        )
Ejemplo n.º 10
0
    def get (self):

        logged_in_user, commenters_id = ADayThere.tool_user ()

        userid = self.request.get ('userid', None)
        title = self.request.get ('title', None)
        limit = self.request.get ('limit', 20)
        cursor = self.request.get ('cursor', None)

        if title is None or userid is None:
            self.response.status = 401
            return


        json_comments = []

        if commenters_id is not None:
            prev_comment = UserComment.query_previous_comment (commenters_id.name, userid, title).get ()
            if prev_comment is not None:
                json_comments.append (json.dumps (prev_comment.to_dict ()))
        
        comments_query = UserComment.query_comments (userid, title) 

        if cursor is not None:
            comments, cursor, more = comments_query.fetch_page (limit, start_cursor = cursor)
        else:
            comments, cursor, more = comments_query.fetch_page (limit)

        for each in comments:
            if prev_comment is None or each.commenters_name != prev_comment.commenters_name:
                json_comments.append (json.dumps (each.to_dict ()))

        return_vals= {
            'comments': json_comments,
            'cursor': None,
            'more': more
        };

        if cursor is not None:
            return_vals['cursor'] = cursor.urlsafe()

        self.response.write (json.dumps (return_vals))
        if prev_comment is not None:
            self.response.status = 201
        else:
            self.response.status = 200
Ejemplo n.º 11
0
    def delete (self):

        tool_user, db_user = ADayThere.tool_user ()
        if not tool_user:
            self.response.status = 401
            return

        titlestr = self.request.get ("titles", None)
        used_by = self.request.get ("used_by", None)
        if titlestr is None:
            self.response.status = 401
            return 

        titles = titlestr.split (",")

        if used_by is not None:
            photos = Photos.query (Photos.user_id == db_user.user_id, Photos.title.IN (titles), Photos.used_by == used_by).fetch (keys_only=True)
        else:
            photos = Photos.query (Photos.user_id == db_user.user_id, Photos.title.IN (titles)).fetch (keys_only=True)

        ndb.delete_multi (photos)
Ejemplo n.º 12
0
    def put (self):

        tool_user, db_user = ADayThere.tool_user ()
        if not tool_user:
            self.response.status = 401
            return

        data = self.request.body
        lst = json.loads (data)
        entities = []
        for p in lst:
            photo = Photos ()
            photo.user_id = db_user.user_id
            photo.title = p['title']
            decoded = p['url'].decode ('base64')
            photo.photo = decoded
            entities.append (photo)
        
        ndb.put_multi (entities)
        
        self.response.status = 200
Ejemplo n.º 13
0
    def post (self):
        
        tool_user, db_user = ADayThere.tool_user ()

        if not ADayThere.admin_user (db_user):
            self.response.status = 401 
            self.response.write ("Unauthorized")
            return

        sent_day = json.loads (self.request.body)
    
        day_query = Day.query_user_title (sent_day['userid'], sent_day['title'])
        day = day_query.get ()
        if day is None:
            self.response.status = 404
            self.response.write ("Not Found")
            return

        day.key.delete ()

        self.response.status = 200
        self.response.write ("OK")
Ejemplo n.º 14
0
    def post (self):
        
        tool_user, db_user = ADayThere.tool_user ()

        if not tool_user or not ADayThere.admin_user (db_user):
            self.response.status = 401 
            self.response.write ("Unauthorized")
            return

        user = json.loads (self.request.body)
        record = User.query_user_id (user['user_id'])
        
        if 'type' not in self.request.GET.keys ():
            self.response.status = 400
        else:
            tp = self.request.GET['type']
            if tp == 'ban':
                record.banned = user['banned']
                record.put ()
                self.response.status = 200
            else:
                self.response.status = 400