diff --git a/lib/json/__init__.py b/lib/json/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/lib/json/group_section.py b/lib/json/group_section.py
new file mode 100644
index 0000000000000000000000000000000000000000..141d69c3e9e610cb813819e86a4391c975b2214f
--- /dev/null
+++ b/lib/json/group_section.py
@@ -0,0 +1,391 @@
+#!/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_groupmembers_subsection (db, xml, group_guid):
+    group_members = db.cursor()
+    group_members.execute(qry.qry_group_members, (group_guid,))
+    
+    wrt.write_tag(xml,2,"quantidade_membros",str(group_members.rowcount))
+                    
+    wrt.write_open_tag(xml,2,"membros")
+    for (user_id, user_name, user_username) in group_members:
+        prefix='profile/'
+        user_attr=wrt.uidstr(wrt.urlparticipa(prefix,user_username))
+        wrt.write_tag(xml,4,"uid",user_attr)
+        wrt.write_tag(xml,3,"usuario",user_name)
+    wrt.write_close_tag(xml,2,"membros")
+    
+    group_members.close()
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_groupfiles_subsection (db, xml, group_guid):
+    group_files = db.cursor()
+    
+    # 1 = select * from elgg_entity_subtypes where subtype='file';
+    group_files.execute(qry.qry_group_posts, (group_guid, 1,))
+    
+    # 50 = select * from elgg_metastrings where string='file_enable';
+    perm=wrt.postcontent_permission(db, group_guid, 50)
+    
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
+    wrt.write_open_tag(xml,2,"arquivos")
+    
+    for (post_guid, post_title, post_desc, \
+            owner_id, owner_name, owner_username, time)\
+        in group_files:
+        
+        wrt.write_open_tag(xml,3,"arquivo")
+        
+        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_tag(xml,4,"pid",post_attr)
+
+        prefix='profile/'
+        owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
+        
+        wrt.write_tag(xml,4,"uid",owner_attr)
+        wrt.write_tag(xml,4,"autor",owner_name)
+        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")
+    
+    group_files.close()
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_groupforumtopics_subsection (db, xml, group_guid):
+    group_forumtopics = db.cursor()
+    
+    # 7 = select * from elgg_entity_subtypes where subtype='groupforumtopic';
+    group_forumtopics.execute(qry.qry_group_posts, (group_guid, 7,))
+    
+    # 52 = select * from elgg_metastrings where string='forum_enable';
+    perm=wrt.postcontent_permission(db, group_guid, 52)
+    
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
+    wrt.write_open_tag(xml,2,"debates")
+    
+    for (post_guid, post_title, post_desc, \
+        owner_id, owner_name, owner_username, time)\
+        in group_forumtopics:
+        
+        wrt.write_open_tag(xml,3,"debate")
+        
+        prefix='discussion/view/'
+        post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
+        wrt.write_tag(xml,4,"pid",post_attr)
+
+        prefix='profile/'
+        owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
+        
+        wrt.write_tag(xml,4,"uid",owner_attr)
+        wrt.write_tag(xml,4,"autor",owner_name)
+        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,"debate")
+        
+    wrt.write_close_tag(xml,2,"debates")
+    
+    group_forumtopics.close()
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_groupbookmarks_subsection (db, xml, group_guid):
+    group_bookmarks = db.cursor()
+    
+    # 13 = select * from elgg_entity_subtypes where subtype='bookmarks';
+    group_bookmarks.execute(qry.qry_group_posts, (group_guid, 13,))
+    
+    # 49 = select * from elgg_metastrings where string='bookmarks_enable';
+    perm=wrt.postcontent_permission(db, group_guid, 49)
+    
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
+    wrt.write_open_tag(xml,2,"favoritos")
+    
+    for (post_guid, post_title, post_desc, \
+            owner_id, owner_name, owner_username, time)\
+        in group_bookmarks:
+        
+        wrt.write_open_tag(xml,3,"")
+        
+        # 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_tag(xml,4,"pid",post_attr)
+
+        prefix='profile/'
+        owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
+        
+        wrt.write_tag(xml,4,"uid",owner_attr)
+        wrt.write_tag(xml,4,"autor",owner_name)
+        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,"")
+    
+    wrt.write_close_tag(xml,2,"favoritos")
+    
+    group_bookmarks.close()
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_grouppages_subsection (db, xml, group_guid):
+    group_pages = db.cursor()
+    
+    # 14 = select * from elgg_entity_subtypes where subtype='page_top';
+    group_pages.execute(qry.qry_group_posts, (group_guid, 14,))
+    
+    # 53 = select * from elgg_metastrings where string='pages_enable';
+    perm=wrt.postcontent_permission(db, group_guid, 53)
+    
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
+    wrt.write_open_tag(xml,2,"paginas")
+    
+    for (post_guid, post_title, post_desc,
+            owner_id, owner_name, owner_username, time)\
+        in group_pages:
+        
+        wrt.write_open_tag(xml,3,"")
+        
+        prefix='pages/view/'
+        post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
+        wrt.write_tag(xml,4,"pid",post_attr)
+
+        prefix='profile/'
+        owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
+        
+        wrt.write_tag(xml,4,"uid",owner_attr)
+        wrt.write_tag(xml,4,"autor",owner_name)
+        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")
+    
+    group_pages.close()
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_groupvideos_subsection (db, xml, group_guid):
+    group_videos = db.cursor()
+    
+    # 12 = select * from elgg_entity_subtypes where subtype='videos';
+    group_videos.execute(qry.qry_group_posts, (group_guid, 12,))
+    
+    # 399 = select * from elgg_metastrings where string='videos_enable';
+    perm=wrt.postcontent_permission(db, group_guid, 399)
+    
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
+    wrt.write_open_tag(xml,2,"videos")
+    
+    for (post_guid, post_title, post_desc, \
+            owner_id, owner_name, owner_username, time)\
+        in group_videos:
+            
+        # 477 = select * from elgg_metastrings where string='video_url';
+        video_link=wrt.post_content(db,post_guid, 477)
+        
+        wrt.write_open_tag(xml,3,"video")
+            
+        prefix='videos/view/'
+        post_attr=wrt.pidstr(wrt.urlparticipa(prefix,str(post_guid)))
+        wrt.write_tag(xml,4,"pid",post_attr)
+        
+        prefix='profile/'
+        owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
+        
+        wrt.write_tag(xml,4,"uid",owner_attr)
+        wrt.write_tag(xml,4,"autor",owner_name)
+        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")
+    
+    group_videos.close()
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_groupevents_subsection (db, xml, group_guid):
+    group_events = db.cursor()
+    
+    # 6 = select * from elgg_entity_subtypes where subtype='calendar_event';
+    group_events.execute(qry.qry_group_posts, (group_guid, 6,))
+    
+    # 54 = select * from elgg_metastrings where string='event_calendar_enable';
+    perm=wrt.postcontent_permission(db, group_guid, 54)
+    
+    wrt.write_tag(xml,2,"habilitado",wrt.permstr(perm))
+    wrt.write_open_tag(xml,2,"eventos")
+    
+    for (post_guid, post_title, post_desc, \
+            owner_id, owner_name, owner_username, time)\
+        in group_events:
+            
+        wrt.write_open_tag(xml,3,"")
+            
+        # 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_tag(xml,4,"pid",post_attr)
+                
+        prefix='profile/'
+        owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
+        
+        wrt.write_tag(xml,4,"uid",owner_attr)
+        wrt.write_tag(xml,4,"autor",owner_name,)
+        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_close_tag(xml,3,"evento")
+        
+        wrt.write_comments(db,xml,post_guid)
+    
+    wrt.write_close_tag(xml,2,"eventos")
+    
+    group_events.close()
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_groups_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,"comunidades")
+    
+    groups_info = db.cursor()
+    groups_info.execute(qry.qry_groups_info)
+    
+    for (guid, title, desc, owner_id, owner_name, owner_username, time)\
+        in groups_info:
+        
+        # 45 = select * from elgg_metastrings where string='briefdescription';
+        brief_desc=wrt.post_content(db,guid, 45)
+        
+        wrt.write_open_tag(xml,1,"")
+        
+        prefix='groups/profile/'
+        group_attr=wrt.cidstr(wrt.urlparticipa(prefix,str(guid)))
+        wrt.write_tag(xml,4,"cid",group_attr)
+
+        # Write all group's information
+        prefix='profile/'
+        owner_attr=wrt.uidstr(wrt.urlparticipa(prefix,owner_username))
+        
+        wrt.write_tag(xml,2,"uid",owner_attr)
+        wrt.write_tag(xml,2,"proprietario",owner_name)
+        wrt.write_tag(xml,2,"titulo",title)
+        wrt.write_tag(xml,2,"data",wrt.datestr(time))
+        wrt.write_tag(xml,2,"descricao",wrt.cdata(desc))
+        wrt.write_tag(xml,2,"breve_descricao",wrt.cdata(brief_desc))
+                                    
+        if wrt.groupaccess_permission(db, guid) == 'public':
+            
+            # Write a list of group member's name
+            write_groupmembers_subsection(db, xml, guid)
+        
+            # Write a list, and all the info, of all posts made on the group.
+            write_groupfiles_subsection(db, xml, guid)
+            write_groupforumtopics_subsection(db, xml, guid)
+            write_groupbookmarks_subsection(db, xml, guid)
+            write_grouppages_subsection(db, xml, guid)
+            write_groupvideos_subsection(db, xml, guid)
+            write_groupevents_subsection(db, xml, guid)
+        
+        wrt.write_close_tag(xml,1,"comunidade")
+        
+    wrt.write_close_tag(xml,0,"comunidades")
+    
+    groups_info.close()
+    
+    xml.close()
+#--------------------------------------------------------------------#
+
+######################################################################
diff --git a/lib/json/queries_definition.py b/lib/json/queries_definition.py
new file mode 100644
index 0000000000000000000000000000000000000000..f864bad205bda5f4de61ba4c661d3298631c9a8d
--- /dev/null
+++ b/lib/json/queries_definition.py
@@ -0,0 +1,166 @@
+#!/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.
+
+######################################################################
+# Users Section Query definitions:
+
+#--------------------------------------------------------------------#
+# Argument: None
+# Return: All member instances, and its info, from database.
+qry_users_info = \
+("	SELECT u.guid, u.name, u.username \
+	FROM elgg_entities e, elgg_users_entity u \
+	WHERE e.guid = u.guid \
+    AND (e.access_id = 1 OR e.access_id = 2); ")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+# Argument: Group_ID / InfoType_ID
+# Return: All InfoTypes' posts made by this group.
+qry_user_posts = \
+("	SELECT o.guid, o.title, o.description, e.time_created \
+	FROM elgg_entities e, elgg_objects_entity o \
+	WHERE e.guid = o.guid \
+    AND (e.access_id = 1 OR e.access_id = 2) \
+    AND e.owner_guid = %s AND e.container_guid = %s AND e.subtype = %s \
+    ORDER BY e.time_created ASC; ")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+# Argument: User_ID
+# Return: All user friends' name
+qry_user_friends = \
+("	SELECT u.guid, u.name, u.username \
+	FROM elgg_users_entity u, elgg_entity_relationships r \
+	WHERE u.guid = r.guid_two \
+	AND r.guid_one = %s AND r.relationship = 'friend'; ")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+# Argument: User_ID
+# Return: Name of all the groups owned/created by the user.
+qry_user_owngroups = \
+("	SELECT g.guid, g.name \
+	FROM elgg_entities e, elgg_groups_entity g \
+	WHERE e.guid = g.guid \
+	AND e.owner_guid = %s AND e.container_guid = %s; ")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+# Argument: User_ID
+# Return: Name of all the groups that the user is a member.
+qry_user_membergroups = \
+("	SELECT g.guid, g.name \
+	FROM elgg_entity_relationships r, elgg_groups_entity g \
+	WHERE r.guid_two = g.guid \
+	AND r.relationship = 'member' AND r.guid_one = %s; ")
+#--------------------------------------------------------------------#
+
+######################################################################
+
+######################################################################
+# Group Section Query definitions:
+
+#--------------------------------------------------------------------#
+# Argument: None
+# Return: All group instances, and its info, from database.
+qry_groups_info = \
+("	SELECT g.guid, g.name, g.description, \
+        u.guid, u.name, u.username, e.time_created \
+	FROM elgg_entities e, elgg_groups_entity g, elgg_users_entity u\
+	WHERE e.guid = g.guid AND e.owner_guid = u.guid \
+    AND (e.access_id = 1 OR e.access_id = 2) \
+    ORDER BY e.time_created ASC; ")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+# Argument: Group_ID / InfoType_ID
+# Return: All InfoTypes' posts from this group.
+qry_group_posts = \
+("	SELECT o.guid, o.title, o.description, \
+        u.guid, u.name, u.username, e.time_created\
+	FROM elgg_entities e, elgg_objects_entity o, elgg_users_entity u\
+	WHERE e.guid = o.guid AND e.owner_guid = u.guid\
+    AND (e.access_id = 1 OR e.access_id = 2) \
+    AND e.container_guid = %s AND e.subtype = %s \
+    ORDER BY e.time_created ASC; ")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+# Argument: Group_ID
+# Return: Flag containing the access control to become a group member
+qry_group_access_permission = \
+("  SELECT CASE WHEN s.string = '2' THEN 'public' ELSE 'private' END \
+    FROM elgg_metadata d, elgg_metastrings s \
+    WHERE d.value_id = s.id \
+    AND d.entity_guid = %s AND d.name_id = %s; ")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+# Argument: Group_ID / InfoType_ID
+# Return: Yes or No, depending on the permission given by the owner.
+qry_post_content_permission = \
+("  SELECT CASE WHEN s.string = 'yes' THEN 'Sim' ELSE 'Nao' END \
+    FROM elgg_metadata d, elgg_metastrings s \
+    WHERE d.value_id = s.id \
+    AND d.entity_guid = %s AND d.name_id = %s;")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+# Argument: Group_ID
+# Return: All members' name from this group.
+qry_group_members = \
+("  SELECT u.guid, u.name, u.username \
+    FROM elgg_users_entity u, elgg_entity_relationships r \
+    WHERE u.guid = r.guid_one \
+    AND r.relationship = 'member' AND r.guid_two = %s; ")
+#--------------------------------------------------------------------#
+    
+######################################################################
+
+######################################################################
+
+#--------------------------------------------------------------------#
+# Argument: Post_ID
+# Return: All comments, and its info, made on the post.
+qry_post_comments = \
+("	SELECT u.guid, u.name, u.username, m.string, a.time_created \
+	FROM elgg_annotations a, elgg_metastrings m, elgg_users_entity u \
+	WHERE a.value_id = m.id AND a.owner_guid = u.guid \
+    AND (a.access_id = 1 OR a.access_id = 2) \
+    AND a.entity_guid = %s \
+    ORDER BY a.time_created ASC; ")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+# Argument: Post_ID / InfoType_ID
+# Return: Essential information about the group or post, such as
+#   blog's excerpts and bookmark's link
+qry_post_content = \
+("  SELECT s.string\
+    FROM elgg_metadata d, elgg_metastrings s \
+    WHERE d.value_id = s.id \
+    AND d.entity_guid = %s AND d.name_id = %s; ")
+#--------------------------------------------------------------------#
+
+######################################################################
diff --git a/lib/json/user_section.py b/lib/json/user_section.py
new file mode 100644
index 0000000000000000000000000000000000000000..73ec5a00a3b411b2018a31ed9d58b8b41bd65113
--- /dev/null
+++ b/lib/json/user_section.py
@@ -0,0 +1,359 @@
+#!/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()
+#--------------------------------------------------------------------#
+
+######################################################################
diff --git a/lib/json/write_support_functions.py b/lib/json/write_support_functions.py
new file mode 100644
index 0000000000000000000000000000000000000000..b8d3b93440bc91891563dd42f1ecad2fad946c9b
--- /dev/null
+++ b/lib/json/write_support_functions.py
@@ -0,0 +1,212 @@
+#!/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
+
+######################################################################
+# Support functions:
+
+#--------------------------------------------------------------------#
+def lvl (l):
+    if l == 1:
+        return "\t"
+    elif l == 2:
+        return "\t\t"
+    elif l == 3:
+        return "\t\t\t"
+    elif l == 4:
+        return "\t\t\t\t"
+    elif l == 5:
+        return "\t\t\t\t\t"
+    elif l == 6:
+        return "\t\t\t\t\t\t"
+    elif l == 7:
+        return "\t\t\t\t\t\t\t"
+    else:
+        return ""
+#--------------------------------------------------------------------#    
+
+#--------------------------------------------------------------------#
+def cdata (string):
+    cdata_string="<![CDATA["+string+"]]>"
+    return cdata_string
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def uidstr (guid):
+    uid_string=" uid="+"\""+guid+"\""
+    return uid_string
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def cidstr (guid):
+    uid_string=" cid="+"\""+guid+"\""
+    return uid_string
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def pidstr (guid):
+    pid_string=" pid="+"\""+guid+"\""
+    return pid_string
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def permstr (perm):
+    perm_string=" habilitado="+"\""+str(perm)+"\""
+    return perm_string
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def qtystr (quantity):
+    qty_string=" quantidade="+"\""+str(quantity)+"\""
+    return qty_string
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def urlparticipa (prefix, guid):
+    http_str="http://participatorio.juventude.gov.br/"
+    url_participa=http_str+prefix+guid
+    return url_participa
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def hrefstr (url):
+    href_string=" href="+"\""+url+"\""
+    return href_string
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def datestr (time):
+    if time != '':
+        date=str(datetime.datetime.fromtimestamp(int(time)))
+    else:
+        date=''
+    return date
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def post_content (db, post_guid, content_typeid):
+    content = db.cursor()
+    content.execute(qry.qry_post_content, (post_guid, content_typeid,))
+    if content.rowcount == 1:
+        post_content = content.fetchone()[0]
+    else:
+        post_content=''
+        print "ERRO! Nenhum ou Mais do que um resultado para a query"
+        
+    content.close()
+    
+    return post_content
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def postcontent_permission (db, group_guid, content_id):
+        
+    perm = db.cursor()
+    perm.execute(qry.qry_post_content_permission, (group_guid, content_id,))
+
+    if perm.rowcount == 1:
+       permission=perm.fetchone()[0]
+    else:
+        permission=''
+        print "ERRO! Nenhum ou Mais do que um resultado para a query"
+    
+    perm.close()
+    
+    return permission        
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def groupaccess_permission (db, group_guid):
+        
+    access = db.cursor()
+    
+    # 55 = select * from elgg_metastrings where string = 'membership';
+    access.execute(qry.qry_group_access_permission, (group_guid, 55,))
+
+    if access.rowcount == 1:
+       access_control=access.fetchone()[0]
+    else:
+        access_control=''
+        print "ERRO! Nenhum ou Mais do que um resultado para a query"
+    
+    access.close()
+    
+    return access_control        
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_open_tag (xml, l, tag_name):
+    if len(tag_name) > 0:
+        name="\""+tag_name+"\""
+        xml.write(lvl(l)+name+":"+"["+"\n")
+    else:
+        xml.write(lvl(l)+"{"+"\n")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_close_tag (xml, l, tag_name):
+    if len(tag_name) > 0:
+        name="\""+tag_name+"\""
+        xml.write(lvl(l)+"]"+"\n")
+    else:
+        xml.write(lvl(l)+"}"+"\n")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_tag (xml, l, tag_name, info_str):
+    level=lvl(l)
+    name="\""+tag_name+"\""
+    info="\""+info_str+"\""
+    xml.write(level+name+":"+info+",\n")
+#--------------------------------------------------------------------#
+
+#--------------------------------------------------------------------#
+def write_comments (db, xml, post_guid):
+    post_comments = db.cursor()
+    post_comments.execute(qry.qry_post_comments, (post_guid,))
+            
+    write_open_tag(xml,4,"comentarios")
+    for (user_id, user_name, user_username, string, time) in post_comments:
+        
+        write_open_tag(xml,5,"")
+        
+        prefix='profile/'
+        user_attr=uidstr(urlparticipa(prefix,user_username))
+        write_tag(xml,6,"uid",user_attr)
+        write_tag(xml,6,"usuario",user_name)
+        write_tag(xml,6,"data",datestr(time))
+        write_tag(xml,6,"mensagem",cdata(string))
+        
+        write_close_tag(xml,5,"")
+        
+    write_close_tag(xml,4,"comentarios")
+    
+    post_comments.close()
+#--------------------------------------------------------------------#
+
+######################################################################
diff --git a/opendata_json_version.py b/opendata_json_version.py
new file mode 100644
index 0000000000000000000000000000000000000000..d9e16a53fff0f69f9241e2d393a1d31cd18f7a96
--- /dev/null
+++ b/opendata_json_version.py
@@ -0,0 +1,64 @@
+#!/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 datetime
+
+from lib.json.user_section import write_users_section 
+from lib.json.group_section import write_groups_section 
+
+def main():
+    
+    # Open connection to database
+    db = MySQLdb.connect(host='localhost', \
+                        user='opendata', \
+                        passwd='123mudar', \
+                        db='elgg', \
+                        charset='utf8')
+    
+    # Define directory and name of XML files
+    date_today=str(datetime.date.today())
+    dir_results="/home/www/elgg/opendata_xmlfiles/"
+    user_xml_file=dir_results+date_today+"_usuarios"+".json"
+    group_xml_file=dir_results+date_today+"_comunidades"+".json"
+    
+    # Get the execution start time information
+    time_script_start=datetime.datetime.now()
+    
+    # Call functions to write XML files
+    #write_users_section(db,user_xml_file)
+    write_groups_section(db,group_xml_file)
+    
+    # Calculate and Print script time duration
+    script_duration=datetime.datetime.now()-time_script_start
+    total_exec_time=str(script_duration.total_seconds())
+    print "TOTAL EXECUTION TIME: "+total_exec_time+"\n"
+    
+    # Close database connection
+    db.close()   
+    
+    return 0
+
+if __name__ == '__main__':
+    main()
+