--- a/src/cm/client.py Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/client.py Tue Dec 08 16:51:48 2009 +0100
@@ -225,7 +225,7 @@
return ret
@has_perm_on_text("can_create_comment")
-def add_comment(request, key):
+def add_comment(request, key, version_key):
# if edit_comment_id : #
# if self.request.user.is_anonymous() : # accessing via an admin url ?
# and comment.user == self.request.user
@@ -251,7 +251,7 @@
reply_to = Comment.objects.get(id=reply_to_id)
text = Text.objects.get(key=key)
- text_version = text.get_latest_version()
+ text_version = TextVersion.objects.get(key=version_key)
comment_state = 'approved' if text_version.mod_posteriori else 'pending'
comment = Comment.objects.create(state=comment_state, text_version=text_version, user=user, name=name, email=email, title=title, content=content, content_html=content_html, tags = tags, start_wrapper = start_wrapper, end_wrapper = end_wrapper, start_offset = start_offset, end_offset = end_offset, reply_to=reply_to)
--- a/src/cm/converters/oo_converters.py Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/converters/oo_converters.py Tue Dec 08 16:51:48 2009 +0100
@@ -5,7 +5,7 @@
# mkdir /var/www/.qt ; chown www-data:www-data /var/www/.qt
# mkdir /var/www/.kde ; chown www-data:www-data /var/www/.kde
-UNO_IMPORT = True
+UNO_IMPORT = False
if UNO_IMPORT:
import uno
--- a/src/cm/fixtures/test_content.yaml Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/fixtures/test_content.yaml Tue Dec 08 16:51:48 2009 +0100
@@ -113,7 +113,9 @@
content: 'aaa bbb ccc ddd eee fff ggg'
text: 1
mod_posteriori: True
-
+ key: "textversion_key_1"
+ adminkey: "tv_adminkey_1"
+
- model : cm.text
pk: 1
fields:
@@ -137,6 +139,8 @@
content: 'aaa bbb ccc ddd eee fff ggg'
text: 2
mod_posteriori: False
+ key: "textversion_key_2"
+ adminkey: "tv_adminkey_2"
- model : cm.text
pk: 2
@@ -334,6 +338,9 @@
long text'
text: 3
+ key: "textversion_key_3"
+ adminkey: "tv_adminkey_3"
+
- model : cm.text
pk: 3
--- a/src/cm/media/js/client/c_server_exchange.js Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/media/js/client/c_server_exchange.js Tue Dec 08 16:51:48 2009 +0100
@@ -22,6 +22,7 @@
doExchange = function(serverFun, obj, formId, retFunc, clientContext, clientArgs, inCaseErrorMsg) {
obj['fun'] = serverFun ;
obj['key'] = sv_key ;
+ obj['version_key'] = sv_version_key ;
// obj['adminKey'] = sv_adminKey ;
var cfg = {
@@ -70,6 +71,7 @@
warn_server = function(obj) {
obj['fun'] = "warn" ;
obj['key'] = sv_key ;
+ obj['version_key'] = sv_version_key ;
var obj2 = CY.UA ;
--- a/src/cm/media/js/client/c_sync.js Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/media/js/client/c_sync.js Tue Dec 08 16:51:48 2009 +0100
@@ -131,14 +131,14 @@
function() { // special case : no waiting for the return, no error check, nothing !
var cfg = {
method: "POST",
- data: urlEncode({'fun':'ownNotify', 'key':sv_key, 'email':ret['email'], 'active':false})
+ data: urlEncode({'fun':'ownNotify', 'key':sv_key, 'version_key':sv_version_key, 'email':ret['email'], 'active':false})
} ;
CY.io(sv_client_url, cfg);
}, this, null,
function() { // special case : no waiting for the return, no error check, nothing !
var cfg = {
method: "POST",
- data: urlEncode({'fun':'ownNotify', 'key':sv_key, 'email':ret['email'], 'active':true})
+ data: urlEncode({'fun':'ownNotify', 'key':sv_key, 'version_key':sv_version_key, 'email':ret['email'], 'active':true})
} ;
CY.io(sv_client_url, cfg);
}, this, null) ;
--- a/src/cm/models.py Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/models.py Tue Dec 08 16:51:48 2009 +0100
@@ -138,13 +138,17 @@
DEFAULT_INPUT_FORMAT = getattr(settings, 'DEFAULT_INPUT_FORMAT', DEFAULT_INPUT_FORMAT_PANDOC)
CHOICES_INPUT_FORMATS = getattr(settings, 'CHOICES_INPUT_FORMATS', CHOICES_INPUT_FORMATS_PANDOC)
-class TextVersionManager(models.Manager):
+class TextVersionManager(KeyManager):
def duplicate(self, text_version, duplicate_comments=True):
#import pdb;pdb.set_trace()
old_comment_set = set(text_version.comment_set.all())
text_version.id = None
- #import pdb;pdb.set_trace()
+
+ # generate new key
+ text_version.key = self._gen_key()
+ text_version.adminkey = self._gen_adminkey()
+
text_version.save()
duplicate_text_version = text_version
@@ -165,7 +169,7 @@
return duplicate_text_version
-class TextVersion(AuthorModel):
+class TextVersion(AuthorModel, KeyModel):
modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
--- a/src/cm/templates/site/text_history.html Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/templates/site/text_history.html Tue Dec 08 16:51:48 2009 +0100
@@ -96,6 +96,8 @@
{% endif %}
{{ content }}
+{{ embed_code }}
+
{% endautoescape %}
</div>
{% endblock %}
--- a/src/cm/templates/site/text_view.html Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/templates/site/text_view.html Tue Dec 08 16:51:48 2009 +0100
@@ -21,7 +21,10 @@
<!-- border-width: 0pt; frameborder="0" -->
<div id="text_view_frame_container">
<center>
-<iframe id="text_view_frame" name="text_view_frame" style="height:400px;width:99.9%;" frameborder="0" src ="{% url text-view-comments-frame text.key %}?{{ request.GET.urlencode }}"/>
+{% autoescape off %}
+{{ embed_code }}
+{% endautoescape %}
+<!-- <iframe id="text_view_frame" name="text_view_frame" style="height:400px;width:99.9%;" frameborder="0" src ="{% url text-view-comments-frame-version text.key text_version.key %}?{{ request.GET.urlencode }}"/> -->
</center>
</div>
--- a/src/cm/templates/site/text_view_comments.html Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/templates/site/text_view_comments.html Tue Dec 08 16:51:48 2009 +0100
@@ -68,6 +68,7 @@
sv_client_date_fmt = "{{ client_date_fmt.js_parse }}"; //"%Y-%m-%dT%H:%M:%S" ;
sv_key = "{{ text.key|escapejs }}";
+sv_version_key = "{{ text_version.key|escapejs }}";
sv_format = "{{ text_version.format }}";
sv_withComments = true ; // TODO will bug when false (!)
--- a/src/cm/templates/site/text_view_frame.html Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/templates/site/text_view_frame.html Tue Dec 08 16:51:48 2009 +0100
@@ -83,7 +83,7 @@
</DIV>
<iframe id="text_view_comments" name="text_view_comments" class="ui-layout-center"
width="100%" height="100%" frameborder="0" scrolling="auto"
- src="{% url text-view-comments text.key %}?{{ request.GET.urlencode }}"></iframe>
+ src="{% url text-view-comments-version text.key text_version.key %}?{{ request.GET.urlencode }}"></iframe>
<!-- exemple de passage d'arguments <iframe id="text_view_comments" name="text_view_comments" class="ui-layout-center"
width="100%" height="100%" frameborder="0" scrolling="auto"
--- a/src/cm/urls.py Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/urls.py Tue Dec 08 16:51:48 2009 +0100
@@ -54,6 +54,8 @@
# text
url(r'^text/(?P<key>\w*)/view/$', text_view, name="text-view"),
+# url(r'^text/(?P<key>\w*)/view/(?P<version_key>\w*)/$', text_view, name="text-view-version"),
+
url(r'^text/(?P<key>\w*)/edit/$', text_edit, name="text-edit"),
url(r'^text/(?P<key>\w*)/pre_edit/$', text_pre_edit, name="text-preedit"),
url(r'^text/(?P<key>\w*)/share/$', text_share, name="text-share"),
@@ -67,9 +69,13 @@
url(r'^text/(?P<key>\w*)/export/(?P<format>\w*)/(?P<download>\w*)/(?P<whichcomments>\w*)/(?P<withcolor>\w*)/$', text_export, name="text-export"),
url(r'^text/(?P<key>\w*)/history/$', text_history, name="text-history"),
url(r'^text/(?P<key>\w*)/diff/(?P<id_v1>\w*)/(?P<id_v2>\w*)/$', text_diff, name="text-diff"),
- url(r'^text/(?P<key>\w*)/version/(?P<id_version>\w*)/$', text_version, name="text-version"),
+# url(r'^text/(?P<key>\w*)/version/(?P<id_version>\w*)/$', text_version, name="text-version"),
+
url(r'^text/(?P<key>\w*)/comments_frame/$', text_view_frame, name="text-view-comments-frame"),
+ url(r'^text/(?P<key>\w*)/comments_frame/(?P<version_key>\w*)/$', text_view_frame, name="text-view-comments-frame-version"),
+
url(r'^text/(?P<key>\w*)/comments/$', text_view_comments, name="text-view-comments"),
+ url(r'^text/(?P<key>\w*)/comments/(?P<version_key>\w*)/$', text_view_comments, name="text-view-comments-version"),
url(r'^text/(?P<key>\w*)/user/add/$', user_add, name="user-add-text"),
url(r'^text/(?P<key>\w*)/user/mass-add/$', user_mass_add, name="user-mass-add-text"),
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/utils/embed.py Tue Dec 08 16:51:48 2009 +0100
@@ -0,0 +1,12 @@
+from django.core.urlresolvers import reverse
+from django.conf import settings
+
+def embed_html(text_key, attrs='', version_key=None) :
+ if version_key :
+ url = reverse('text-view-comments-frame-version', args=[text_key, version_key])
+ else :
+ url = reverse('text-view-comments-frame', args=[text_key])
+
+ embed_code = '<iframe %s frameborder="0" src="%s%s" style="height: 200px; width: 99.9%%; position: relative; top: 0px;">'%(attrs, settings.SITE_URL, url)
+
+ return embed_code
--- a/src/cm/views/__init__.py Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/views/__init__.py Tue Dec 08 16:51:48 2009 +0100
@@ -17,12 +17,25 @@
import simplejson
import sys
+def get_textversion_by_keys_or_404(textversion_key, adminkey=None, key=None):
+ try:
+ if not adminkey:
+ textversion = TextVersion.objects.get(key=textversion_key)
+ else:
+ textversion = TextVersion.objects.get(key=textversion_key, adminkey=adminkey)
+ if textversion.text.key == key:
+ return textversion
+ else :
+ raise Http404('Mismatch keys Text / TextVersion')
+ except TextVersion.DoesNotExist:
+ raise Http404('No TextVersion with such keys')
+
def get_text_by_keys_or_404(key, adminkey=None):
try:
if not adminkey:
return Text.objects.get(key=key)
else:
- return Text.objects.get(key = key, adminkey = adminkey)
+ return Text.objects.get(key=key, adminkey=adminkey)
except Text.DoesNotExist:
raise Http404('No Text with such keys')
--- a/src/cm/views/notifications.py Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/views/notifications.py Tue Dec 08 16:51:48 2009 +0100
@@ -3,6 +3,7 @@
from cm.models import ApplicationConfiguration, Notification, Configuration, UserRole
from cm.models_base import generate_key
from cm.views import get_text_by_keys_or_404
+from cm.utils.embed import embed_html
from django import forms
from django.conf import settings
from django.contrib.auth.decorators import login_required
@@ -70,7 +71,8 @@
text_notify_check = Notification.objects.filter(text=text,type='text',user=user, active=True).count()
workspace_notify_check = Notification.objects.filter(text=None,type='workspace',user=user, active=True).count()
- embed_code = '<iframe frameborder="0" src="%s%s" style="height: 166px; width: 99.9%%; position: relative; top: 0px;">'%(settings.SITE_URL, reverse('text-view-comments-frame', args=[text.key]))
+ #embed_code = '<iframe frameborder="0" src="%s%s" style="height: 166px; width: 99.9%%; position: relative; top: 0px;">'%(settings.SITE_URL, reverse('text-view-comments-frame', args=[text.key]))
+ embed_code = embed_html(text.key) ;
if request.method == 'POST':
if 'activate' in request.POST:
--- a/src/cm/views/texts.py Fri Dec 04 14:05:05 2009 +0100
+++ b/src/cm/views/texts.py Tue Dec 08 16:51:48 2009 +0100
@@ -1,3 +1,4 @@
+from cm.utils.embed import embed_html
from cm.activity import register_activity
from cm.client import jsonize, get_filter_datas, edit_comment, remove_comment, \
add_comment, RequestComplexEncoder, comments_thread, own_notify
@@ -15,7 +16,7 @@
insert_comment_markers
from cm.utils.html import cleanup_textarea
from cm.utils.spannifier import spannify
-from cm.views import get_keys_from_dict, get_text_by_keys_or_404, redirect
+from cm.views import get_keys_from_dict, get_textversion_by_keys_or_404, get_text_by_keys_or_404, redirect
from cm.views.export import content_export2
from cm.views.user import AnonUserRoleForm, cm_login
from difflib import unified_diff
@@ -169,12 +170,12 @@
@has_perm_on_text('can_view_text')
def text_view(request, key, adminkey=None):
-
text = get_text_by_keys_or_404(key)
register_activity(request, "text_view", text=text)
+ text_version = text.get_latest_version()
+ embed_code = embed_html(key, 'id="text_view_frame" name="text_view_frame"')
- text_version = text.get_latest_version()
- template_dict = { 'text' : text, 'text_version' : text_version, 'title' : text_version.title, 'content' : text_version.get_content()}
+ template_dict = { 'embed_code':embed_code, 'text' : text, 'text_version' : text_version, 'title' : text_version.title, 'content' : text_version.get_content()}
return render_to_response('site/text_view.html', template_dict, context_instance=RequestContext(request))
@has_perm_on_text('can_delete_text')
@@ -188,10 +189,13 @@
return HttpResponse('') # no redirect because this is called by js
@has_perm_on_text('can_view_text') # only protected by text_view / comment filtering done in view
-def text_view_comments(request, key, adminkey=None):
+def text_view_comments(request, key, version_key=None, adminkey=None):
text = get_text_by_keys_or_404(key)
- #TODO: stupid why restrict to latest ?
- text_version = text.get_latest_version()
+ if version_key :
+ text_version = get_textversion_by_keys_or_404(version_key, adminkey, key)
+ else :
+ text_version = text.get_latest_version()
+
comments = get_viewable_comments(request, text_version.comment_set.filter(reply_to__isnull=True),text)
filter_datas = get_filter_datas(request, text_version, text)
@@ -222,6 +226,7 @@
#print request.POST
elif request.POST:
key = request.POST['key']
+ version_key = request.POST['version_key']
text = Text.objects.get(key=key) ;
#TODO: stupid why restrict to latest ?
@@ -234,7 +239,7 @@
if function_name == 'editComment' :
ret = edit_comment(request=request, key=key, comment_key=request.POST['comment_key'])
elif function_name == 'addComment' :
- ret = add_comment(request=request, key=key)
+ ret = add_comment(request=request, key=key, version_key=version_key)
elif function_name == 'removeComment' :
ret = remove_comment(request=request, key=key, comment_key=request.POST['comment_key'])
@@ -398,11 +403,14 @@
context_instance=RequestContext(request))
@has_perm_on_text('can_view_text')
-def text_view_frame(request, key, adminkey=None):
+def text_view_frame(request, key, version_key=None, adminkey=None):
text = get_text_by_keys_or_404(key)
- text_version = text.get_latest_version()
- template_dict = {'text' : text}
+ if version_key :
+ text_version = get_textversion_by_keys_or_404(version_key, adminkey, key)
+ else :
+ text_version = text.get_latest_version()
+ template_dict = {'text' : text, 'text_version' : text_version}
return render_to_response('site/text_view_frame.html',
template_dict,
context_instance=RequestContext(request))
@@ -441,8 +449,10 @@
vv2 = None
paired_versions.append((vv1, vv2, colors_dict.get(vv1.get_name(), '#D9D9D9')))
+ embed_code = ""
+ content = ""
if v1_nid and not v2_nid:
- content = v1.get_content()
+ embed_code = embed_html(key, 'id="text_view_frame" name="text_view_frame"', v1.key)
else:
content = get_uniffied_inner_diff_table(cleanup_textarea(v1.content), cleanup_textarea(v2.content))
@@ -455,6 +465,7 @@
'version1': v1,
'version2': v2,
'content' : content,
+ 'embed_code':embed_code,
'author_colors' : author_colors,
}
return render_to_response('site/text_history.html', template_dict, context_instance=RequestContext(request))
@@ -563,14 +574,14 @@
title = _text_diff(text_version_1.title, text_version_2.title)
return render_to_response('site/text_view.html', {'text' : text, 'text_version_1' : text_version_1, 'text_version_2' : text_version_2, 'title' : title, 'content' : content}, context_instance=RequestContext(request))
-
-@has_perm_on_text('can_view_text')
-def text_version(request, key, id_version):
- text = get_text_by_keys_or_404(key)
- text_version = TextVersion.objects.get(pk=id_version)
- # TODO : assert text_v in text ...
- # TODO : do not use db id
- return render_to_response('site/text_view.html', {'text' : text, 'text_version' : text_version, 'title' : text_version.title, 'content' : text_version.get_content()}, context_instance=RequestContext(request))
+# commented out, unused suspected
+#@has_perm_on_text('can_view_text')
+#def text_version(request, key, id_version):
+# text = get_text_by_keys_or_404(key)
+# text_version = TextVersion.objects.get(pk=id_version)
+# # TODO : assert text_v in text ...
+# # TODO : do not use db id
+# return render_to_response('site/text_view.html', {'text' : text, 'text_version' : text_version, 'title' : text_version.title, 'content' : text_version.get_content()}, context_instance=RequestContext(request))
class EditTextForm(ModelForm):
title = forms.CharField(label=_("Title"), widget=forms.TextInput)