#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2004-2008 Centro de Computacao Cientifica e Software Livre
# Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
#
# This file is part of participatorio/opendata
#
# participatorio/opendata is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.

import MySQLdb
import codecs
import datetime

import queries_definition as qry
import write_support_functions as wrt

######################################################################
# Functions that write on XML file

#--------------------------------------------------------------------#
def write_userfriends_subsection (db, xml, user_guid):
    friends_info = db.cursor()
    friends_info.execute(qry.qry_user_friends, (user_guid))
    
    wrt.write_open_tag(xml,2,"amigos")
    for (friend_id, friend_name, friend_username) in friends_info:
        prefix='profile/'
        friend_attr=wrt.uidstr(wrt.urlparticipa(prefix,friend_username))
        wrt.write_tag(xml,3,"uid",friend_attr)
        wrt.write_tag(xml,3,"usuario",friend_name)
    wrt.write_close_tag(xml,2,"amigos")
        
    friends_info.close()
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#
def write_userowngroup_subsection (db, xml, user_guid):        
    user_owngroups = db.cursor()
    user_owngroups.execute(qry.qry_user_owngroups, (user_guid, user_guid, ))
        
    wrt.write_open_tag(xml,3,"dono")
    for (group_id, group_title) in user_owngroups:
        prefix='groups/profile/'
        group_attr=wrt.cidstr(wrt.urlparticipa(prefix,str(group_id)))
        wrt.write_tag(xml,3,"cid",group_attr)
        wrt.write_tag(xml,4,"titulo",group_title)
    wrt.write_close_tag(xml,3,"dono")
        
    user_owngroups.close()
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#
def write_usermembergroup_subsection (db, xml, user_guid):
    user_membergroups = db.cursor()
    user_membergroups.execute(qry.qry_user_membergroups, (user_guid, ))
        
    wrt.write_open_tag(xml,3,"membro")
    for (group_id, group_title) in user_membergroups:
        prefix='groups/profile/'
        group_attr=wrt.cidstr(wrt.urlparticipa(prefix,str(group_id)))
        wrt.write_tag(xml,3,"cid",group_attr)
        wrt.write_tag(xml,4,"titulo",group_title)
    wrt.write_close_tag(xml,3,"membro")
        
    user_membergroups.close()
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#
def write_usergroups_subsection (db, xml, user_guid):
    wrt.write_open_tag(xml,2,"comunidades")
    write_userowngroup_subsection(db, xml, user_guid)
    write_usermembergroup_subsection(db, xml, user_guid)
    wrt.write_close_tag(xml,2,"comunidades")
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#
def write_userfiles_subsection (db, xml, user_guid):
    user_files = db.cursor()
    
    # 1 = select * from elgg_entity_subtypes where subtype='file';
    user_files.execute(qry.qry_user_posts, (user_guid, user_guid, 1,))
    
    wrt.write_open_tag(xml,2,"arquivos")
    
    for (post_guid, post_title, post_desc, time)\
        in user_files:
        
        prefix="file/download/"
        file_link=wrt.urlparticipa(prefix,str(post_guid))
        
        prefix='file/view/'
        post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
        
        wrt.write_open_tag(xml,3,"arquivo")
        
        wrt.write_tag(xml,4,"pid",post_attr)
        wrt.write_tag(xml,4,"titulo",post_title)
        wrt.write_tag(xml,4,"data",wrt.datestr(time))
        wrt.write_tag(xml,4,"link",wrt.hrefstr(file_link))
        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
            
        wrt.write_comments(db,xml,post_guid)
        
        wrt.write_close_tag(xml,3,"arquivo")
    
    wrt.write_close_tag(xml,2,"arquivos")
    
    user_files.close()
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#
def write_userblogs_subsection (db, xml, user_guid):
    user_blogs = db.cursor()
    
    # 4 = select * from elgg_entity_subtypes where subtype='blog';
    user_blogs.execute(qry.qry_user_posts, (user_guid, user_guid, 4,))
    
    wrt.write_open_tag(xml,2,"blogs")
    
    for (post_guid, post_title, post_desc, time)\
        in user_blogs:
                    
        post_excerpt = db.cursor()
        
        # 64 = select * from elgg_metastrings where string='excerpt';
        post_excerpt=wrt.post_content(db,post_guid,64)
            
        prefix='blog/view/'
        post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
        wrt.write_open_tag(xml,3,"blog")

        wrt.write_tag(xml,4,"pid",post_attr)
        wrt.write_tag(xml,4,"titulo",post_title)
        wrt.write_tag(xml,4,"data",wrt.datestr(time))
        wrt.write_tag(xml,4,"resumo",wrt.cdata(post_excerpt))
        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc))
                    
        wrt.write_comments(db,xml,post_guid)
        
        wrt.write_close_tag(xml,3,"blog")
            
    wrt.write_close_tag(xml,2,"blogs")
    
    user_blogs.close()
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#
def write_userbookmarks_subsection (db, xml, user_guid):
    user_bookmarks = db.cursor()
    
    # 13 = select * from elgg_entity_subtypes where subtype='bookmarks';
    user_bookmarks.execute(qry.qry_user_posts, (user_guid, user_guid, 13,))
    
    wrt.write_open_tag(xml,2,"favoritos")
    
    for (post_guid, post_title, post_desc, time)\
        in user_bookmarks:
                    
        # 90 = select * from elgg_metastrings where string='address';
        bookmark_link=wrt.post_content(db,post_guid,90)
  
        prefix='bookmarks/view/'
        post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
        wrt.write_open_tag(xml,3,"favorito")
    
        wrt.write_tag(xml,4,"pid",post_attr)
        wrt.write_tag(xml,4,"titulo",post_title)
        wrt.write_tag(xml,4,"data",wrt.datestr(time))
        wrt.write_tag(xml,4,"link",wrt.hrefstr(bookmark_link))
        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
                    
        wrt.write_comments(db,xml,post_guid)
        
        wrt.write_close_tag(xml,3,"favorito")
                
    wrt.write_close_tag(xml,2,"favoritos")
    
    user_bookmarks.close()
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#    
def write_userpages_subsection (db, xml, user_guid):
    user_pages = db.cursor()
    
    # 14 = select * from elgg_entity_subtypes where subtype='page_top';
    user_pages.execute(qry.qry_user_posts, (user_guid, user_guid, 14,))
    
    wrt.write_open_tag(xml,2,"paginas")
    
    for (post_guid, post_title, post_desc, time)\
        in user_pages:
        
        prefix='pages/view/'
        post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
        wrt.write_open_tag(xml,3,"pagina")

        wrt.write_tag(xml,4,"pid",post_attr)
        wrt.write_tag(xml,4,"titulo",post_title)
        wrt.write_tag(xml,4,"data",wrt.datestr(time))
        wrt.write_tag(xml,4,"texto",wrt.cdata(post_desc))
                    
        wrt.write_comments(db,xml,post_guid)
        
        wrt.write_close_tag(xml,3,"pagina")
        
    wrt.write_close_tag(xml,2,"paginas")
    
    user_pages.close()
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#
def write_uservideos_subsection (db, xml, user_guid):
    user_videos = db.cursor()
    
    # 12 = select * from elgg_entity_subtypes where subtype='videos';
    user_videos.execute(qry.qry_user_posts, (user_guid, user_guid, 12,))
    
    wrt.write_open_tag(xml,2,"videos")
    
    for (post_guid, post_title, post_desc, time)\
        in user_videos:
                    
        # 477 = select * from elgg_metastrings where string='video_url';
        video_link=wrt.post_content(db, post_guid, 477)
        
        prefix='videos/view/'
        post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
        wrt.write_open_tag(xml,3,"video")
        
        wrt.write_tag(xml,4,"pid",post_attr)
        wrt.write_tag(xml,4,"titulo",post_title)
        wrt.write_tag(xml,4,"data",wrt.datestr(time))
        wrt.write_tag(xml,4,"link",wrt.hrefstr(video_link))
        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
        
        wrt.write_comments(db,xml,post_guid)
        
        wrt.write_close_tag(xml,3,"video")
        
    wrt.write_close_tag(xml,2,"videos")
    
    user_videos.close()
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#
def write_userevents_subsection (db, xml, user_guid):
    user_events = db.cursor()
    
    # 6 = select * from elgg_entity_subtypes where subtype='calendar_event';
    user_events.execute(qry.qry_user_posts, (user_guid, user_guid, 6,))
    
    
    wrt.write_open_tag(xml,2,"eventos")
    
    for (post_guid, post_title, post_desc, time)\
        in user_events:
            
        # 18 = select * from elgg_metastrings where string='venue';
        venue=wrt.post_content(db, post_guid, 18)
        
        # 20 = select * from elgg_metastrings where string='start_date';
        time_start=wrt.post_content(db, post_guid, 20)

        # 22 = select * from elgg_metastrings where string='end_date';
        time_end=wrt.post_content(db, post_guid, 22)
        
        # 26 = select * from elgg_metastrings where string='fees';
        fees=wrt.post_content(db, post_guid, 26)
        
        # 28 = select * from elgg_metastrings where string='contact';
        contact=wrt.post_content(db, post_guid, 28)
        
        # 30 = select * from elgg_metastrings where string='organizer';
        organizer=wrt.post_content(db, post_guid, 30)
        
        prefix='event_calendar/view/'
        post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
        wrt.write_open_tag(xml,3,"")
        
        wrt.write_tag(xml,4,"pid",post_attr)
        wrt.write_tag(xml,4,"titulo",post_title)
        wrt.write_tag(xml,4,"data",wrt.datestr(time))
        wrt.write_tag(xml,4,"organizador",organizer)
        wrt.write_tag(xml,4,"contato",contact)
        wrt.write_tag(xml,4,"endereco",venue)
        wrt.write_tag(xml,4,"data_inicio",wrt.datestr(time_start))
        wrt.write_tag(xml,4,"data_fim",wrt.datestr(time_end))
        wrt.write_tag(xml,4,"taxa_participacao",fees)
        wrt.write_tag(xml,4,"descricao",wrt.cdata(post_desc))
        
        wrt.write_comments(db,xml,post_guid)
        
        wrt.write_close_tag(xml,3,"")
    
    wrt.write_close_tag(xml,2,"eventos")
    
    user_events.close()
#--------------------------------------------------------------------#

#--------------------------------------------------------------------#    
def write_users_section (db, xml_file):
    
    xml = codecs.open(xml_file,'w',encoding='utf-8')
    
    xml.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")

    wrt.write_open_tag(xml,0,"usuarios")
    
    users_info = db.cursor()
    users_info.execute(qry.qry_users_info)
    
    for (guid, name, username) in users_info:
        
        prefix='profile/'
        user_attr=wrt.uidstr(wrt.urlparticipa(prefix,username))
        wrt.write_open_tag(xml,1,"")
        
        # Write all user's information
        wrt.write_tag(xml,2,"uid",user_attr)
        wrt.write_tag(xml,2,"nome",name)
            
        # Write a list of user friend's names
        write_userfriends_subsection(db, xml, guid)
        
        # Write a list of all groups that the user owns or belongs
        write_usergroups_subsection(db, xml, guid)
        
        # Write a list, and all the info, of all posts made by the user
        write_userfiles_subsection(db, xml, guid)
        write_userblogs_subsection(db, xml, guid)
        write_userbookmarks_subsection(db, xml, guid)
        write_userpages_subsection(db, xml, guid)
        write_uservideos_subsection(db, xml, guid)
        write_userevents_subsection(db, xml, guid)
        
        wrt.write_close_tag(xml,1,"usuario")
    
    wrt.write_close_tag(xml,0,"usuarios")
    
    users_info.close()
    
    xml.close()
#--------------------------------------------------------------------#

######################################################################