Merge branch 'develop' into test
This commit is contained in:
		
						commit
						5da1fe6db4
					
				
					 6 changed files with 3 additions and 156 deletions
				
			
		|  | @ -109,9 +109,7 @@ INSTALLED_APPS = ( | |||
|     'dal', | ||||
|     'dal_select2', | ||||
| 
 | ||||
|     'fluent_comments', | ||||
|     'crispy_forms', | ||||
|     'threadedcomments', | ||||
|     'django_comments', | ||||
| 
 | ||||
|     'django.contrib.flatpages', | ||||
|  | @ -221,12 +219,6 @@ REST_FRAMEWORK = { | |||
|     'PAGE_SIZE': 100 | ||||
| } | ||||
| 
 | ||||
| # Comments | ||||
| 
 | ||||
| COMMENTS_APP = 'fluent_comments' | ||||
| #COMMENTS_APP = 'threadedcomments' | ||||
| FLUENT_COMMENTS_EXCLUDE_FIELDS = ('name', 'email', 'url', 'title') | ||||
| 
 | ||||
| 
 | ||||
| # SECURITY WARNING: keep the secret key used in production secret! | ||||
| # Create file 'django.secret' in every install (it is not kept in git) | ||||
|  |  | |||
|  | @ -15,9 +15,6 @@ | |||
|     <script src="{% static 'js/jquery-1.11.1.js' %}"></script> | ||||
|     <script src="{% static 'js/jquery-3.4.1.js' %}"></script> | ||||
| 
 | ||||
|     <link rel="stylesheet" type="text/css" href="{% static 'fluent_comments/css/ajaxcomments.css' %}" /> | ||||
|     <script type="text/javascript" src="{% static 'fluent_comments/js/ajaxcomments.js' %}"></script> | ||||
| 
 | ||||
|     {# nastavení MathJaxu, aby nahrazoval i matiku obalenou jednoduchými $ #} | ||||
|     <script type="text/x-mathjax-config"> | ||||
|       MathJax.Hub.Config({ | ||||
|  |  | |||
|  | @ -47,7 +47,6 @@ urlpatterns = [ | |||
| 
 | ||||
| 	# Comments (interni i verejne) | ||||
| 	path('comments_dj/', include('django_comments.urls')), | ||||
| 	path('comments_fl/', include('fluent_comments.urls')), | ||||
| 
 | ||||
| 	# REST API | ||||
| 	path('api/', include(router.urls)), | ||||
|  |  | |||
|  | @ -23,9 +23,9 @@ | |||
| 	</tr> | ||||
| 	{% for hodn in hodnoceni %} | ||||
| 	<tr> | ||||
| 		<td>{{ hodn.reseni.cas_doruceni | date:"d.m.Y H:i"}}</td> | ||||
| 		<td><a href="{% url 'odevzdavatko_resitel_reseni' hodn.reseni.id %}">{{ hodn.reseni.cas_doruceni | date:"d.m.Y H:i"}}</a></td> | ||||
| 		<td id="problem"><span title="{{ hodn.problem.nazev }}">{{ hodn.problem.nazev | zkrat_nazev_problemu }}</span></td> | ||||
|         <td><a href="{% url 'odevzdavatko_resitel_reseni' hodn.reseni.id %}">{{ hodn.body|default_if_none:"---" }}</a></td> | ||||
|         <td>{{ hodn.body|default_if_none:"---" }}</td> | ||||
| 		<td>{{ hodn.reseni.cas_doruceni | deadline_html }}</td> | ||||
| 	</tr> | ||||
| 	{% endfor %} | ||||
|  |  | |||
|  | @ -34,9 +34,6 @@ django-webpack-loader | |||
| django-rest-polymorphic | ||||
| 
 | ||||
| # Comments | ||||
| akismet==1.0.1 | ||||
| django-fluent-comments==2.1 | ||||
| django-threadedcomments==1.2 | ||||
| django-contrib-comments==1.9.0 | ||||
| 
 | ||||
| # debug tools/extensions | ||||
|  |  | |||
|  | @ -68,144 +68,6 @@ class ObalkovaniView(generic.ListView): | |||
| 		context['cislo'] = self.cislo | ||||
| 		return context | ||||
| 
 | ||||
| class TNLData(object): | ||||
| 	def __init__(self,anode,parent=None, index=None): | ||||
| 		self.node = anode | ||||
| 		self.sernode = vr.TreeNodeSerializer(anode) | ||||
| 		self.children = [] | ||||
| 		self.parent = parent | ||||
| 		self.tema_in_path = False | ||||
| 		self.index = index | ||||
| 
 | ||||
| 		if parent: | ||||
| 			self.tema_in_path = parent.tema_in_path | ||||
| 		if isinstance(anode, m.TemaVCisleNode): | ||||
| 			self.tema_in_path = True | ||||
| 
 | ||||
| 	def add_edit_options(self): | ||||
| 		self.deletable = tnltt.deletable(self) | ||||
| 		self.editable_siblings = tnltt.editableSiblings(self) | ||||
| 		self.editable_children = tnltt.editableChildren(self) | ||||
| 		self.text_only_subtree = tnltt.textOnlySubtree(self) | ||||
| 		self.can_podvesit_za = tnltt.canPodvesitZa(self) | ||||
| 		self.can_podvesit_pred = tnltt.canPodvesitPred(self) | ||||
| 		self.appendable_children = tnltt.appendableChildren(self) | ||||
| 		print("appChld",self.appendable_children) | ||||
| 		if self.parent: | ||||
| 			self.appendable_siblings = tnltt.appendableChildren(self.parent) | ||||
| 		else: | ||||
| 			self.appendable_siblings = [] | ||||
| 	@classmethod | ||||
| 	def public_above(cls, anode): | ||||
| 		""" Returns output of verejne for closest Rocnik, Cislo or Problem above. | ||||
| 		(All of them have method verejne.)""" | ||||
| 		parent = anode # chceme začít už od konkrétního node včetně | ||||
| 		while True: | ||||
| 			rocnik = isinstance(parent, s.RocnikNode) | ||||
| 			cislo = isinstance(parent, s.CisloNode) | ||||
| 			uloha = (isinstance(parent, s.UlohaVzorakNode) or | ||||
| 				isinstance(parent, s.UlohaZadaniNode)) | ||||
| 			tema = isinstance(parent, s.TemaVCisleNode) | ||||
| 
 | ||||
| 			if (rocnik or cislo or uloha or tema) or parent==None: | ||||
| 				break | ||||
| 			else: | ||||
| 				parent = treelib.get_parent(parent) | ||||
| 		if rocnik: | ||||
| 			return parent.rocnik.verejne() | ||||
| 		elif cislo: | ||||
| 			return parent.cislo.verejne() | ||||
| 		elif uloha: | ||||
| 			return parent.uloha.verejne() | ||||
| 		elif tema: | ||||
| 			return parent.tema.verejne() | ||||
| 		elif None: | ||||
| 			print("Existuje TreeNode, který není pod číslem, ročníkem, úlohou" | ||||
| 			"ani tématem. {}".format(anode)) | ||||
| 			return False | ||||
| 
 | ||||
| 	@classmethod | ||||
| 	def all_public_children(cls, anode): | ||||
| 		for ch in treelib.all_children(anode): | ||||
| 			if TNLData.public_above(ch): | ||||
| 				yield ch | ||||
| 			else: | ||||
| 				continue | ||||
| 
 | ||||
| 	@classmethod | ||||
| 	def from_treenode(cls, anode, user, parent=None, index=None): | ||||
| 		if TNLData.public_above(anode) or user.has_perm('auth.org'): | ||||
| 			out = cls(anode,parent,index) | ||||
| 		else: | ||||
| 			raise PermissionDenied() | ||||
| 
 | ||||
| 		if user.has_perm('auth.org'): | ||||
| 			enum_children = enumerate(treelib.all_children(anode)) | ||||
| 		else: | ||||
| 			enum_children = enumerate(TNLData.all_public_children(anode)) | ||||
| 
 | ||||
| 		for (idx,ch) in enum_children: | ||||
| 			outitem = cls.from_treenode(ch, user, out,  idx) | ||||
| 			out.children.append(outitem) | ||||
| 		out.add_edit_options() | ||||
| 		return out | ||||
| 
 | ||||
| 	@classmethod | ||||
| 	def from_tnldata_list(cls, tnllist): | ||||
| 		"""Vyrobíme virtuální TNL, který nemá obsah, ale má za potomky všechna zadaná TNLData""" | ||||
| 		result = cls(None) | ||||
| 		for idx, tnl in enumerate(tnllist): | ||||
| 			result.children.append(tnl) | ||||
| 			tnl.parent = result | ||||
| 			tnl.index = idx | ||||
| 		result.add_edit_options() | ||||
| 		return result | ||||
| 
 | ||||
| 	@classmethod | ||||
| 	def filter_treenode(cls, treenode, predicate): | ||||
| 		tnll = cls._filter_treenode_recursive(treenode, predicate) # TreeNodeList List :-) | ||||
| 		return TNLData.from_tnldata_list(tnll) | ||||
| 
 | ||||
| 	@classmethod | ||||
| 	def _filter_treenode_recursive(cls, treenode, predicate): | ||||
| 		if predicate(treenode): | ||||
| 			return [cls.from_treenode(treenode)] | ||||
| 		else: | ||||
| 			found = [] | ||||
| 			for tn in treelib.all_children(treenode): | ||||
| 				result = cls.filter_treenode(tn, predicate) | ||||
| 				# Result by v tuhle chvíli měl být seznam TNLDat odpovídající treenodům, jež matchnuly predikát. | ||||
| 				for tnl in result: | ||||
| 					found.append(tnl) | ||||
| 			return found | ||||
| 
 | ||||
| 	def to_json(self): | ||||
| 		#self.node = anode | ||||
| 		#self.children = [] | ||||
| 		#self.parent = parent | ||||
| 		#self.tema_in_path = False | ||||
| 		#self.index = index | ||||
| 		out = {} | ||||
| 		out['node'] = self.sernode.data | ||||
| 		out['children'] = [n.to_json() for n in self.children] | ||||
| 		out['tema_in_path'] = self.tema_in_path | ||||
| 		out['index'] = self.index | ||||
| 		out['deletable'] = self.deletable | ||||
| 		out['editable_siblings'] = self.editable_siblings | ||||
| 		out['editable_children'] = self.editable_children | ||||
| 		out['text_only_subtree'] = self.text_only_subtree | ||||
| 		out['can_podvesit_za'] = self.can_podvesit_za | ||||
| 		out['can_podvesit_pod'] = self.can_podvesit_pred | ||||
| 		out['appendable_children'] = self.appendable_children | ||||
| 		out['appendable_siblings'] = self.appendable_siblings | ||||
| 
 | ||||
| 		return out | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	def __repr__(self): | ||||
| 		return("TNL({})".format(self.node)) | ||||
| 
 | ||||
| 
 | ||||
| # FIXME: Pozor, níž je ještě jeden ProblemView! | ||||
| #class ProblemView(generic.DetailView): | ||||
|  | @ -749,7 +611,7 @@ class ClankyResitelView(generic.ListView): | |||
| 		queryset = [] | ||||
| 		skupiny_clanku = group_by_rocnik(clanky) | ||||
| 		for skupina in skupiny_clanku: | ||||
| 			skupina.sort(key=lambda clanek: clanek.kod_v_rocniku()) | ||||
| 			skupina.sort(key=lambda clanek: clanek.kod_v_rocniku) | ||||
| 			for clanek in skupina: | ||||
| 				queryset.append(clanek) | ||||
| 		return queryset | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Kateřina Č
						Kateřina Č