Commit 98afb372 authored by Romain Loth's avatar Romain Loth

merge unstable into romain (2/2)

parents ad9f05e7 2ab53773
...@@ -107,7 +107,9 @@ urlpatterns = patterns('', ...@@ -107,7 +107,9 @@ urlpatterns = patterns('',
url(r'^explorer$', samtest.graph_share), # global explorer url(r'^explorer$', samtest.graph_share), # global explorer
url(r'^explorer/(\d+)/(\d+)$', samtest.graph_share), # global explorer url(r'^explorer/(\d+)/(\d+)$', samtest.graph_share), # global explorer
url(r'^node_link_share.json$', samtest.node_link_share), # global explorer url(r'^node_link_share.json$', samtest.node_link_share), # global explorer
url(r'^get_groups$', samtest.get_groups) url(r'^get_groups$', samtest.get_groups),
url(r'^api/share/(\d+)/(\d+)$', samtest.share_resource),
# url(r'^lalala/(\d+)/(\d+)$', samtest.copy_corpus_GET),
) )
......
...@@ -232,8 +232,39 @@ def projects(request): ...@@ -232,8 +232,39 @@ def projects(request):
# print(Logger.write("STATIC_ROOT")) # print(Logger.write("STATIC_ROOT"))
projects = session.query(Node).filter(Node.user_id == user_id, Node.type_id == project_type_id).order_by(Node.date).all() projects = session.query(Node).filter(Node.user_id == user_id, Node.type_id == project_type_id).order_by(Node.date).all()
number = len(projects) number = len(projects)
# common_users = session.query(User_User.user_parent).filter( User_User.user_id==user_id ).all()
# [ Getting shared projects ] #
common_users = []
common_projects = []
the_query = """ SELECT node_user_user.user_parent, auth_user.username \
FROM node_user_user, auth_user \
WHERE node_user_user.user_id=%d \
AND node_user_user.user_parent=auth_user.id """ % ( int(request.user.id) )
cursor = connection.cursor()
try:
cursor.execute(the_query)
common_users = cursor.fetchall()
except:
pass
for u in common_users:
u_id = u[0]
u_name = u[1]
shared_projects = session.query(Node).filter(Node.user_id == u_id, Node.type_id == project_type_id).order_by(Node.date).all()
print("admin group user ID:",u_id , " | nb_projects:",len(shared_projects))
if len(shared_projects)>0:
for p in shared_projects:
common_projects.append( p )
if len(common_projects)==0:
common_projects = False
if len(common_users)==0:
common_users = False
# [ / Getting shared projects ] #
form = ProjectForm() form = ProjectForm()
if request.method == 'POST': if request.method == 'POST':
...@@ -253,7 +284,9 @@ def projects(request): ...@@ -253,7 +284,9 @@ def projects(request):
'date': date, 'date': date,
'form': form, 'form': form,
'number': number, 'number': number,
'projects': projects 'projects': projects,
'common_projects':common_projects,
'common_users':common_users,
}) })
...@@ -356,20 +389,6 @@ def corpus(request, project_id, corpus_id): ...@@ -356,20 +389,6 @@ def corpus(request, project_id, corpus_id):
processing = "Error" processing = "Error"
# [ / getting workflow status ] # # [ / getting workflow status ] #
# [ how many groups ? ] #
nb_groups = 0
the_query = """ SELECT group_id FROM auth_user_groups WHERE user_id=%d """ % ( int(request.user.id) )
cursor = connection.cursor()
try:
cursor.execute(the_query)
results = cursor.fetchall()
nb_groups = len(results)
except:
pass
# [ / how many groups ? ] #
html = t.render(Context({ html = t.render(Context({
'debug': settings.DEBUG, 'debug': settings.DEBUG,
'user': request.user, 'user': request.user,
...@@ -379,7 +398,6 @@ def corpus(request, project_id, corpus_id): ...@@ -379,7 +398,6 @@ def corpus(request, project_id, corpus_id):
'processing' : processing, 'processing' : processing,
# 'documents': documents,\ # 'documents': documents,\
'number' : number, 'number' : number,
'nb_groups' : nb_groups,
'view' : "documents" 'view' : "documents"
})) }))
...@@ -398,8 +416,7 @@ def newpaginatorJSON(request , corpus_id): ...@@ -398,8 +416,7 @@ def newpaginatorJSON(request , corpus_id):
# documents = session.query(Node).filter(Node.parent_id==corpus_id , Node.type_id == type_document_id ).all() # documents = session.query(Node).filter(Node.parent_id==corpus_id , Node.type_id == type_document_id ).all()
docs = (session.query(Node) docs = (session.query(Node)
.filter(Node.user_id == user_id .filter(Node.parent_id==corpus_id
, Node.parent_id==corpus_id
, Node.type_id == type_document_id ) , Node.type_id == type_document_id )
.all() .all()
) )
......
...@@ -18,6 +18,7 @@ from gargantext_web.db import * ...@@ -18,6 +18,7 @@ from gargantext_web.db import *
from gargantext_web.db import get_or_create_node from gargantext_web.db import get_or_create_node
from gargantext_web.settings import DEBUG, MEDIA_ROOT from gargantext_web.settings import DEBUG, MEDIA_ROOT
from rest_v1_0.api import JsonHttpResponse from rest_v1_0.api import JsonHttpResponse
from django.db import connection
import json import json
import re import re
...@@ -51,7 +52,15 @@ def project(request, project_id): ...@@ -51,7 +52,15 @@ def project(request, project_id):
if not user.is_authenticated(): if not user.is_authenticated():
return redirect('/login/?next=%s' % request.path) return redirect('/login/?next=%s' % request.path)
if project.user_id != user.id: if project.user_id != user.id:
return HttpResponseForbidden() in_group = """ SELECT user_parent FROM node_user_user WHERE user_id=%d""" % ( int(user.id) )
cursor = connection.cursor()
cursor.execute(in_group)
in_group = False
for c in cursor.fetchall():
if c[0]==project.user_id:
in_group = True
if not in_group:
return JsonHttpResponse( {"request" : "forbidden"} )
# Let's find out about the children nodes of the project # Let's find out about the children nodes of the project
ChildrenNode = aliased(Node) ChildrenNode = aliased(Node)
...@@ -241,7 +250,6 @@ def tfidf(request, corpus_id, ngram_ids): ...@@ -241,7 +250,6 @@ def tfidf(request, corpus_id, ngram_ids):
return JsonHttpResponse(nodes_list) return JsonHttpResponse(nodes_list)
def getCorpusIntersection(request , corpuses_ids): def getCorpusIntersection(request , corpuses_ids):
FinalDict = False FinalDict = False
...@@ -259,7 +267,7 @@ def getCorpusIntersection(request , corpuses_ids): ...@@ -259,7 +267,7 @@ def getCorpusIntersection(request , corpuses_ids):
return JsonHttpResponse(FinalDict) return JsonHttpResponse(FinalDict)
# If corpus[1] has a coocurrence.id then lets continue # If corpus[1] has a coocurrence.id then lets continue
Cooc_Avg = {} Coocs = {}
import networkx as nx import networkx as nx
G = nx.Graph() # I use an undirected graph, because direction doesnt matter here, coocs should be a triangular matrix, so... G = nx.Graph() # I use an undirected graph, because direction doesnt matter here, coocs should be a triangular matrix, so...
ngrams_data1 = session.query(NodeNgramNgram).filter( NodeNgramNgram.node_id==cooc_ids[0], NodeNgramNgram.ngramx_id.in_( node_ids )).all() ngrams_data1 = session.query(NodeNgramNgram).filter( NodeNgramNgram.node_id==cooc_ids[0], NodeNgramNgram.ngramx_id.in_( node_ids )).all()
...@@ -275,21 +283,20 @@ def getCorpusIntersection(request , corpuses_ids): ...@@ -275,21 +283,20 @@ def getCorpusIntersection(request , corpuses_ids):
n1 = e[0] n1 = e[0]
n2 = e[1] n2 = e[1]
# print( G[n1][n2]["weight"] , "\t", n1,",",n2 ) # print( G[n1][n2]["weight"] , "\t", n1,",",n2 )
if n1 not in Cooc_Avg: if n1 not in Coocs:
Cooc_Avg[n1]=0 Coocs[n1]=0
if n2 not in Cooc_Avg: if n2 not in Coocs:
Cooc_Avg[n2]=0 Coocs[n2]=0
Cooc_Avg[n1]+=G[n1][n2]["weight"] Coocs[n1]+=G[n1][n2]["weight"]
Cooc_Avg[n2]+=G[n1][n2]["weight"] Coocs[n2]+=G[n1][n2]["weight"]
FinalDict = {} FinalDict = {}
for node in node_ids: for node in node_ids:
if node in Cooc_Avg: if node in Coocs:
FinalDict[node] = Cooc_Avg[node]/G.degree(node) FinalDict[node] = Coocs[node]/G.degree(node)
# Getting AVG-COOC of each ngram that exists in the cooc-matrix of the compared-corpus. # Getting AVG-COOC of each ngram that exists in the cooc-matrix of the compared-corpus.
return JsonHttpResponse(FinalDict) return JsonHttpResponse(FinalDict)
def getUserPortfolio(request , project_id): def getUserPortfolio(request , project_id):
user = request.user user = request.user
user_id = cache.User[request.user.username].id user_id = cache.User[request.user.username].id
...@@ -298,6 +305,18 @@ def getUserPortfolio(request , project_id): ...@@ -298,6 +305,18 @@ def getUserPortfolio(request , project_id):
results = {} results = {}
projs = session.query(Node).filter(Node.user_id == user_id,Node.type_id==project_type_id ).all() projs = session.query(Node).filter(Node.user_id == user_id,Node.type_id==project_type_id ).all()
in_group = """ SELECT user_parent FROM node_user_user WHERE user_id=%d""" % ( int(user_id) )
cursor = connection.cursor()
cursor.execute(in_group)
for c in cursor.fetchall():
user_parent = c[0]
more_projs = session.query(Node).filter(Node.user_id == user_parent,Node.type_id==project_type_id ).all()
if more_projs!=None:
for p in more_projs:
projs.append( p )
for i in projs: for i in projs:
# print (i.id,i.name) # print (i.id,i.name)
if i.id not in results: if i.id not in results:
...@@ -320,4 +339,5 @@ def getUserPortfolio(request , project_id): ...@@ -320,4 +339,5 @@ def getUserPortfolio(request , project_id):
if len(results[i.id]["corpuses"])==0: if len(results[i.id]["corpuses"])==0:
del results[i.id] del results[i.id]
return JsonHttpResponse( results ) return JsonHttpResponse( results )
...@@ -14,6 +14,10 @@ def notify_user(username, email, password): ...@@ -14,6 +14,10 @@ def notify_user(username, email, password):
Votre login est: %s Votre login est: %s
Votre mot de passe est : %s Votre mot de passe est : %s
En janvier prochain, il y aura une formation Gargantext (gratuite).
Inscription obligatoire pour les dernière places:
http://iscpif.fr/event/formation-gargantext/
Nous restons votre disposition pour tout complément d'information. Nous restons votre disposition pour tout complément d'information.
Cordialement Cordialement
-- --
...@@ -21,9 +25,7 @@ def notify_user(username, email, password): ...@@ -21,9 +25,7 @@ def notify_user(username, email, password):
''' % (username, password) ''' % (username, password)
send_mail('[Gargantext] Votre compte', message, 'alexandre.delanoe@mines-paristech.fr', [email], fail_silently=False ) send_mail('[Gargantext] Votre accès à la plateforme', message, 'alexandre.delanoe@iscpif.fr', [email], fail_silently=False )
#send_mail('[Gargantext] Votre compte', message, 'alexandre.delanoe@mines-paristech.fr', [email], ['alexandre@delanoe.org'] )
# add option for mass sending email # add option for mass sending email
......
...@@ -22,7 +22,7 @@ def copy_corpus(from_id=None, to_id=None, title=None): ...@@ -22,7 +22,7 @@ def copy_corpus(from_id=None, to_id=None, title=None):
corpus = session.query(Node).filter(Node.id==from_id).first() corpus = session.query(Node).filter(Node.id==from_id).first()
group_id = get_or_create_node(nodetype='Group', corpus=corpus).id group_id = get_or_create_node(nodetype='Group', corpus=corpus).id
print( [from_id, cache.NodeType['Document'].id, 'journal', group_id, title, to_id] )
cursor.execute(''' cursor.execute('''
CREATE TEMPORARY TABLE node_node__tmp AS CREATE TEMPORARY TABLE node_node__tmp AS
SELECT SELECT
......
from ..Taggers import TurboTagger #NltkTagger #, # from ..Taggers import NltkTagger
from ..Taggers import TurboTagger
import nltk import nltk
from re import sub from re import sub
...@@ -22,6 +23,7 @@ class NgramsExtractor: ...@@ -22,6 +23,7 @@ class NgramsExtractor:
self.stop() self.stop()
def start(self): def start(self):
# self.tagger = NltkTagger()
self.tagger = TurboTagger() self.tagger = TurboTagger()
def stop(self): def stop(self):
......
from .NgramsExtractor import NgramsExtractor from .NgramsExtractor import NgramsExtractor
from ..Taggers import TurboTagger
# from ..Taggers import NltkTagger # from ..Taggers import NltkTagger
from ..Taggers import TurboTagger
class TurboNgramsExtractor(NgramsExtractor): class TurboNgramsExtractor(NgramsExtractor):
def start(self): def start(self):
# self.tagger = NltkTagger()
self.tagger = TurboTagger() self.tagger = TurboTagger()
...@@ -125,9 +125,9 @@ class List(APIView): ...@@ -125,9 +125,9 @@ class List(APIView):
def get(self, request, corpus_id , list_name ): def get(self, request, corpus_id , list_name ):
if not request.user.is_authenticated(): if not request.user.is_authenticated():
return JsonHttpResponse( {"request" : "forbidden"} ) return JsonHttpResponse( {"request" : "forbidden"} )
corpus = session.query(Node).filter( Node.user_id==request.user.id , Node.id==corpus_id ).first() corpus = session.query(Node).filter( Node.id==corpus_id ).first()
if corpus==None: # if corpus==None:
return JsonHttpResponse( {"request" : "forbidden"} ) # return JsonHttpResponse( {"request" : "forbidden"} )
start_ = time.time() start_ = time.time()
list_name = list_name.title()+"List" list_name = list_name.title()+"List"
node_list = get_or_create_node(nodetype=list_name, corpus=corpus ) node_list = get_or_create_node(nodetype=list_name, corpus=corpus )
...@@ -162,9 +162,9 @@ class Ngrams(APIView): ...@@ -162,9 +162,9 @@ class Ngrams(APIView):
def get(self, request, node_id): def get(self, request, node_id):
if not request.user.is_authenticated(): if not request.user.is_authenticated():
return JsonHttpResponse( {"request" : "forbidden"} ) return JsonHttpResponse( {"request" : "forbidden"} )
corpus = session.query(Node).filter( Node.user_id==request.user.id , Node.id==node_id).first() corpus = session.query(Node).filter( Node.id==node_id).first()
if corpus==None: # if corpus==None:
return JsonHttpResponse( {"request" : "forbidden"} ) # return JsonHttpResponse( {"request" : "forbidden"} )
start_ = time.time() start_ = time.time()
ParentNode = aliased(Node) ParentNode = aliased(Node)
group_by = [] group_by = []
...@@ -340,7 +340,7 @@ class Group(APIView): ...@@ -340,7 +340,7 @@ class Group(APIView):
''' '''
def get_group_id(self , node_id , user_id): def get_group_id(self , node_id , user_id):
node_id = int(node_id) node_id = int(node_id)
corpus = session.query(Node).filter( Node.user_id==user_id , Node.id==node_id).first() corpus = session.query(Node).filter( Node.id==node_id).first()
if corpus==None: return None if corpus==None: return None
group = get_or_create_node(corpus=corpus, nodetype='Group') group = get_or_create_node(corpus=corpus, nodetype='Group')
return(group.id) return(group.id)
...@@ -458,7 +458,6 @@ class Group(APIView): ...@@ -458,7 +458,6 @@ class Group(APIView):
NewGroups = {} NewGroups = {}
Rels_2_delete = {} Rels_2_delete = {}
for ng in grouped_ngrams: for ng in grouped_ngrams:
print(ng)
for i in range(len(GDict)): for i in range(len(GDict)):
clique_i = GDict[i] clique_i = GDict[i]
neighbours = {} neighbours = {}
......
...@@ -1090,9 +1090,9 @@ var NGrams = { ...@@ -1090,9 +1090,9 @@ var NGrams = {
} }
$("#corpusdisplayer").hide() $("#corpusdisplayer").hide()
if( $("#share_button").length==0 ) { // if( $("#share_button").length==0 ) {
$("#ImportList").remove() // $("#ImportList").remove()
} // }
var url = [ var url = [
......
...@@ -48,9 +48,6 @@ ...@@ -48,9 +48,6 @@
{% if number == 0 %} {% if number == 0 %}
<a class="btn btn-primary btn-lg" role="button" href="/admin/documents/corpus/{{ corpus.id }}/">Add documents</a></p> <a class="btn btn-primary btn-lg" role="button" href="/admin/documents/corpus/{{ corpus.id }}/">Add documents</a></p>
{% endif %} {% endif %}
{% if nb_groups != None and nb_groups > 0 %}
<a id="share_button" class="btn btn-primary btn-lg" role="button" >Share!!!</a></p>
{% endif %}
</div> </div>
</div> </div>
...@@ -121,46 +118,6 @@ ...@@ -121,46 +118,6 @@
</div> </div>
<div id="sharemodal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 class="modal-title">Share this Corpus with your Groups</h3>
</div>
<div class="modal-body form-horizontal">
<h4>List of available groups:</h4>
<div id="groups_list">here show the groups</div>
<div class="modal-footer">
<button id="closesharemodal" type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button id="send_share" type="button" class="btn btn-primary" >Share</button>
</div>
</div>
</div>
</div>
</div>
<style>
label {
padding:10px;
margin:0 0 10px;
display:block;
}
label:hover {
background:#eee;
cursor:pointer;
}
</style>
<script type="text/javascript"> <script type="text/javascript">
function gotoexplorer(elem) { function gotoexplorer(elem) {
...@@ -212,45 +169,6 @@ label:hover { ...@@ -212,45 +169,6 @@ label:hover {
} }
function get_groups() {
console.log( "IN get_groups()!" )
var url_ = "/get_groups"
$.ajax({
type: "GET",
url: url_,
dataType: "json",
success : function(data, textStatus, jqXHR) {
var _content = ""
for(var i in data) {
var g_id = data[i][0] , g_name=data[i][1]
_content += '<label><input name="groups" data-id="'+g_id+'" type="checkbox" />&nbsp;'+g_name+'</label>'
}
$("#groups_list").html( _content )
},
error: function(exception) {
console.log("exception!:"+exception.status)
}
});
}
if( $("#share_button").length>0 ) {
$("#share_button").click(function() {
get_groups()
$("#sharemodal").modal("show");
});
$("#send_share").click(function() {
$('input[name=groups]:checked').each(function () {
console.log( $(this).data("id") );
});
});
}
</script> </script>
......
...@@ -322,7 +322,9 @@ input[type=radio]:checked + label { ...@@ -322,7 +322,9 @@ input[type=radio]:checked + label {
<!-- </optgroup> --> <!-- </optgroup> -->
</select> </select>
<button id="ImportList" onclick="GetUserPortfolio();" class="btn btn-warning">Import a Corpus-List</button> {% if nb_groups > 0 %}
<button id="ImportList" onclick="GetUserPortfolio();" class="btn btn-warning">Import a Corpus-List</button>
{% endif %}
</div> </div>
......
...@@ -37,6 +37,33 @@ ...@@ -37,6 +37,33 @@
{% if projects %} {% if projects %}
{% for project in projects %} {% for project in projects %}
<!--<div class="col-md-offset-7 col-md-4 content" style="background-color:grey">!--> <!--<div class="col-md-offset-7 col-md-4 content" style="background-color:grey">!-->
<div class="col-md-3 content">
<h3><a href="/project/{{ project.id }}">{{ project.name }}</a>
<button type="button" class="btn btn-xs btn-default" data-container="body" data-toggle="popover" data-placement="bottom"
data-content='
<ul>
<li> Rename </li>
<li><a href="/project/{{ project.id }}">Add new corpus</a></li>
<li><a href="/delete/{{ project.id }}">Delete</a></li>
</ul>
'>Manage</button>
{% if common_users %}
<a style="cursor:pointer;"><img class="share_button" data-id="{{ project.id }}" title="Share it!" width="20px" src="{% static "img/share.png" %}"></img></a>
{% endif %}
</h3>
<h4>{{ project.subtitle }}<h4>
</div>
{% endfor %}
{% endif %}
{% if common_projects %}
<br><br><br><br><br><br>
<h3><i> - - Shared projects - -</i></h3>
{% for project in common_projects %}
<!--<div class="col-md-offset-7 col-md-4 content" style="background-color:grey">!-->
<div class="col-md-3 content"> <div class="col-md-3 content">
<h3><a href="/project/{{ project.id }}">{{ project.name }}</a> <h3><a href="/project/{{ project.id }}">{{ project.name }}</a>
...@@ -52,10 +79,6 @@ ...@@ -52,10 +79,6 @@
</h3> </h3>
<h4>{{ project.subtitle }}<h4> <h4>{{ project.subtitle }}<h4>
<!--
<h5>Completed:</h5>
<div class="chart" barColor="#fffff" data-percent="75">75%</div>
--!>
</div> </div>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
...@@ -63,4 +86,121 @@ ...@@ -63,4 +86,121 @@
</div> </div>
</div> </div>
<div id="sharemodal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 class="modal-title">Share this Corpus with your Groups</h3>
</div>
<div class="modal-body form-horizontal">
<h4>List of available groups:</h4>
<div id="groups_list">here show the groups</div>
<div class="modal-footer">
<button id="closesharemodal" type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button id="send_share" type="button" class="btn btn-primary" >Share<span id="simpleloader"></span></button>
</div>
</div>
</div>
</div>
</div>
<style>
label {
padding:10px;
margin:0 0 10px;
display:block;
}
label:hover {
background:#eee;
cursor:pointer;
}
</style>
<script>
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var last_project = -1
function get_groups() {
console.log( "IN get_groups()!" )
var url_ = "/get_groups"
$.ajax({
type: "GET",
url: url_,
dataType: "json",
success : function(data, textStatus, jqXHR) {
var _content = ""
for(var i in data) {
var g_id = data[i][0] , g_name=data[i][1]
_content += '<label><input name="groups" data-id="'+g_id+'" type="checkbox" />&nbsp;'+g_name+'</label>'
}
$("#groups_list").html( _content )
},
error: function(exception) {
console.log("exception!:"+exception.status)
}
});
}
if( $(".share_button").length>0 ) {
$(".share_button").click(function(){
last_project = $(this).data("id")
get_groups()
$("#sharemodal").modal("show");
});
$("#send_share").click(function() {
$('input[name=groups]:checked').each(function () {
$("#send_share").attr("disabled","disabled")
console.log( $(this).data("id") );
$("#simpleloader").html('<img width="30px" src="{% static "js/libs/img2/loading-bar.gif" %}"></img>')
$.ajax({
url: "/api/share/"+last_project+"/"+$(this).data("id"),
type: 'POST',
beforeSend: function(xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie("csrftoken"));
},
success: function(data) {
console.log("SUCCESS!")
window.location.reload();
},
error: function(result) {
console.log("FAIL!")
console.log(result)
}
});
});
});
}
</script>
{% endblock %} {% endblock %}
...@@ -75,7 +75,7 @@ def get_ngrams(request , project_id , corpus_id ): ...@@ -75,7 +75,7 @@ def get_ngrams(request , project_id , corpus_id ):
type_doc_id = cache.NodeType['Document'].id type_doc_id = cache.NodeType['Document'].id
number = session.query(func.count(Node.id)).filter(Node.parent_id==corpus_id, Node.type_id==type_doc_id).all()[0][0] number = session.query(func.count(Node.id)).filter(Node.parent_id==corpus_id, Node.type_id==type_doc_id).all()[0][0]
myamlist_type_id = cache.NodeType['MiamList'].id myamlist_type_id = cache.NodeType['MiamList'].id
miamlist = session.query(Node).filter(Node.user_id == request.user.id , Node.parent_id==corpus_id , Node.type_id == myamlist_type_id ).first() miamlist = session.query(Node).filter(Node.parent_id==corpus_id , Node.type_id == myamlist_type_id ).first()
the_query = """ SELECT hyperdata FROM node_node WHERE id=%d """ % ( int(corpus_id) ) the_query = """ SELECT hyperdata FROM node_node WHERE id=%d """ % ( int(corpus_id) )
cursor = connection.cursor() cursor = connection.cursor()
...@@ -87,7 +87,7 @@ def get_ngrams(request , project_id , corpus_id ): ...@@ -87,7 +87,7 @@ def get_ngrams(request , project_id , corpus_id ):
# [ how many groups ? ] # # [ how many groups ? ] #
nb_groups = 0 nb_groups = 0
the_query = """ SELECT group_id FROM auth_user_groups WHERE user_id=%d """ % ( int(request.user.id) ) the_query = """ SELECT user_parent FROM node_user_user WHERE user_id=%d""" % ( int(request.user.id) )
cursor = connection.cursor() cursor = connection.cursor()
try: try:
cursor.execute(the_query) cursor.execute(the_query)
...@@ -158,7 +158,7 @@ def get_journals_json(request , project_id, corpus_id ): ...@@ -158,7 +158,7 @@ def get_journals_json(request , project_id, corpus_id ):
user_id = request.user.id user_id = request.user.id
document_type_id = cache.NodeType['Document'].id document_type_id = cache.NodeType['Document'].id
documents = session.query(Node).filter(Node.user_id == user_id , Node.parent_id==corpus_id , Node.type_id == document_type_id ).all() documents = session.query(Node).filter( Node.parent_id==corpus_id , Node.type_id == document_type_id ).all()
for doc in documents: for doc in documents:
if "journal" in doc.hyperdata: if "journal" in doc.hyperdata:
journal = doc.hyperdata["journal"] journal = doc.hyperdata["journal"]
...@@ -205,20 +205,22 @@ def get_groups( request ): ...@@ -205,20 +205,22 @@ def get_groups( request ):
if not request.user.is_authenticated(): if not request.user.is_authenticated():
return JsonHttpResponse( {"request" : "forbidden"} ) return JsonHttpResponse( {"request" : "forbidden"} )
results = [] # [ getting shared projects ] #
the_query = """ SELECT auth_user_groups.group_id, auth_group.name \ common_users = []
FROM auth_user_groups,auth_group \ common_projects = []
WHERE auth_user_groups.user_id=%d \ the_query = """ SELECT node_user_user.user_parent, auth_user.username \
AND auth_user_groups.group_id=auth_group.id """ % ( int(request.user.id) ) FROM node_user_user, auth_user \
WHERE node_user_user.user_id=%d \
AND node_user_user.user_parent=auth_user.id """ % ( int(request.user.id) )
cursor = connection.cursor() cursor = connection.cursor()
try: try:
cursor.execute(the_query) cursor.execute(the_query)
results = cursor.fetchall() common_users = cursor.fetchall()
except: except:
pass pass
# [ / getting shared projects ] #
return JsonHttpResponse( results ) return JsonHttpResponse( common_users )
def graph_share(request, generic=100, specific=100): def graph_share(request, generic=100, specific=100):
...@@ -270,3 +272,55 @@ def node_link_share(request): ...@@ -270,3 +272,55 @@ def node_link_share(request):
data = get_cooc(request=request, corpus=corpus, type="node_link") data = get_cooc(request=request, corpus=corpus, type="node_link")
return JsonHttpResponse(data) return JsonHttpResponse(data)
def copy_corpus_GET(request , project_id , corpus_id):
from node import copy
corpus_id = int(corpus_id)
user_id = request.user.id
project_id = project_id
import random
title = "clone_"+str(random.random())
corpus_clone_id = copy.create_corpus(title, project_id=project_id, user_id=user_id)
# print(corpus_clone_id)
copy.copy_corpus(from_id=corpus_id, to_id=corpus_clone_id, title=title)
return JsonHttpResponse([title , corpus_clone_id])
def share_resource(request , resource_id , group_id) :
results = ["OK"]
if request.method == 'POST':
project2share = session.query(Node).filter(Node.user_id == request.user.id, Node.id == resource_id).first()
if project2share!=None: # project exists?
# [ is the received group in fact the group of the current user? ]
in_group = """ SELECT * FROM node_user_user WHERE user_id=%d AND user_parent=%d""" % ( int(request.user.id) , int(group_id) )
cursor = connection.cursor()
cursor.execute(in_group)
if len(cursor.fetchall())<1:
return JsonHttpResponse( {"request" : "forbidden"} )
# [ / is the received group in fact the group of the current user? ]
# [ getting all childs ids of this project ]
ids2changeowner = [ project2share.id ]
corpuses = session.query(Node.id).filter(Node.user_id == request.user.id, Node.parent_id==resource_id , Node.type_id == cache.NodeType["Corpus"].id ).all()
for corpus in corpuses:
ids2changeowner.append(corpus.id)
lists = session.query(Node.id,Node.name).filter(Node.user_id == request.user.id, Node.parent_id==corpus.id ).all()
for l in lists:
ids2changeowner.append(l.id)
# [ / getting all childs ids of this project ]
# [ changing owner ]
print( "ids to change owner: ",len(ids2changeowner))
print("old owner:", request.user.id , " | new owner:" , group_id)
query = """UPDATE node_node set user_id=%d WHERE id IN (%s)""" % ( int(group_id) , ','.join((str(n) for n in ids2changeowner)) )
cursor = connection.cursor()
try:
cursor.execute(query)
cursor.execute("COMMIT;")
except Exception as error:
print(error)
pass
connection.close()
# [ / changing owner ]
return JsonHttpResponse( results )
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment