Ticket #6071: utils.py

File utils.py, 33.8 KB (added by hans.rauch@…, 16 years ago)
Line 
1#-*-coding: utf-8 -*-
2"""
3/dms/utils.py
4
5.. enthaelt Hilfefunktionen fuer
6 Django content Management System
7
8Hans Rauch
9
10hans.rauch@gmx.net
11
12Die Programme des dms-Systems koennen frei genutzt und den spezifischen
13Beduerfnissen entsprechend angepasst werden.
14
150.01 13.01.2007 Beginn der Dokumentation
160.02 16.01.2007 check_name
170.03 20.1.2007 base_site_url
180.04 04.02.2007 bei Vortraegen wird der Titel in der breadcrum angezeigt
190.05 01.03.2007 send_control_email
200.06 17.05.2007 show_link - info=''
210.07 01.06.2007 get_folderish_actions ueberarbeitet
220.08 10.09.2007 add_if_app_available
230.09 02.10.2007 manage_site_mode, manage_domain_mode
240.10 03.10.2007 get_site_actions
250.11 17.10.2007 get_link_by_item_container fuer Redirects in Lernarchiven angepasst
260.12 23.10.2007 get_item_container_data_object_by_id
270.13 31.10.2007 PROJECT_FOLDER
280.14 10.11.2007 is_protected
29"""
30
31import string
32import datetime
33
34from django.utils.translation import ugettext as _
35
36from math import floor
37from datetime import date
38
39from django.utils.translation import ugettext as _
40
41from django.utils.encoding import smart_unicode
42from django import newforms as forms
43
44from django.utils.translation import ugettext as _
45
46from dms.settings import DOWNLOAD_URL
47from dms.settings import MY_DOMAINS
48
49from dms.queries import get_top_item
50from dms.queries import get_parent_item_container
51from dms.queries import get_menuitems_navmenu_top
52from dms.queries import get_menuitems_navmenu_left
53from dms.queries import is_file_by_item_container
54from dms.queries import get_prev_parent_item_containers
55from dms.queries import get_next_parent_item_containers
56from dms.queries import get_licenses
57from dms.queries import get_site_url
58from dms.queries import get_base_site_url
59from dms.queries import get_faecher
60from dms.queries import get_schularten
61from dms.queries import is_app_available
62from dms.queries import get_item_container_data_object_by_id
63from dms.queries import is_protected
64
65from dms.encode_decode import decode_html
66from dms.encode_decode import encode_html
67
68from dms.text_icons import FOLDER_ICON, PROJECT_ICON
69from dms.text_icons import EXTERN_ICON, NEW_WINDOW_ICON, FILE_DETAIL, REDIRECT_ICON
70
71# -----------------------------------------------------
72# E-Mail-Adressen verschluesseln
73
74# Created by jmeile
75# Anpassung an zecom: Hans Rauch, 3.12.2002, 04.01-2006
76
77def encode_email(emailvalue, namevalue=None,rClass=None,info=None):
78 #Taken from http://www.happysnax.com.au/testemail.php
79 #Original comments:
80 '''this function creates the hexadecimal equivalent to
81 "document.write('<a href="mailto:emailaddress">name</a>')"
82 ie it effectively encrpts this as far as spam-bots are concerned
83 the Javascript to unencrypt it simply changes the hex back into ascii
84 then executes the code using the 'eval' statement
85 /... and ta da ... you've got a normal mailto address displayed in the browser.
86 //Written by Jeff Robson of Cynergic Net Solutions www.cynergic.net jeff.robson@cynergic.net'''
87 if emailvalue == '' :
88 return namevalue
89 if namevalue == None :
90 namevalue = emailvalue
91 if rClass != None :
92 cClass = ' class="' + rClass + '"'
93 else :
94 cClass = ''
95 if info != None :
96 cInfo = ' title="' + info + '"'
97 else :
98 cInfo = ''
99 new_text = hex_string ( 'document.write(\'<a' + cClass + ' href=\"mailto:'+emailvalue+'\"' + \
100 cInfo + '>'+namevalue+'</a>\')' )
101 return '<script type=\"text/javascript\">eval(unescape(\''+new_text+'\'))</script>'
102
103def hex_string(mystring):
104 #Taken from http://www.happysnax.com.au/testemail.php
105 '''Written by Jeff Robson of Cynergic Net Solutions www.cynergic.net jeff.robson@cynergic.net'''
106 newstring=''
107 length=len(mystring)
108 for i in range(length):
109 newstring=newstring+'%'+tohex(ord(mystring[i]))
110 return newstring
111
112def tohex(n):
113 #Taken from http://www.happysnax.com.au/testemail.php
114 '''Written by Jeff Robson of Cynergic Net Solutions www.cynergic.net jeff.robson@cynergic.net'''
115 hs='0123456789ABCDEF'
116 return hs[int(floor(n/16))]+hs[n%16]
117
118# -----------------------------------------------------
119def get_footer_email(object, use_string_1=False):
120 """ liefert Namen und Adresse des Autors """
121 if smart_unicode(str(type(object))) == "<class 'dms.models.DmsItem'>":
122 item = object
123 else:
124 item = object.item
125 try:
126 my_ext_item = get_ext_item(item)
127 return encode_email(my_ext_item.owner_email, my_ext_item.owner, 'navLink')
128 except:
129 if use_string_1:
130 return encode_email(item.string_2, item.string_1, 'navLink')
131 else:
132 return encode_email(item.owner.email, item.owner.get_full_name(), 'navLink')
133
134def get_author_email(author, email):
135 """ liefert Namen und Adresse des Autors """
136 return encode_email(email, author, 'nav')
137
138# -----------------------------------------------------
139def get_tabbed_form(rFormItems, rFormHelp, rHelpName, rFormData,
140 do_tab=True, tab_cluster={}, valign=True, max_cols=1,
141 show_errors=True):
142 """ baut Tabbed-Formulare zusammen: Quelle ??? """
143 from dms.form_system import form_system
144 from django.template.loader import get_template
145 from django.template import Context
146
147 t = get_template('utils/yui_tab_base.html')
148 content = ''
149 headers = []
150 tabs = []
151 tab_id = 'tab_'
152 tab_no = 0
153 for item in rFormItems:
154 this_tab_id = tab_id + str(tab_no)
155 tab_no += 1
156 headers.append ( {'tab_id': this_tab_id,
157 'text': rFormHelp[item[0]]['title'],
158 'selected': tab_no == 1
159 } )
160 tabs.append ( {'tab_id': this_tab_id,
161 'info': rFormHelp[item[0]]['info'],
162 'content': form_system().get_form(item[1], rFormHelp,
163 rHelpName, rFormData,
164 tab_cluster, valign, max_cols, show_errors)
165 } )
166 c = Context ( {'headers': headers, 'tabs': tabs } )
167 return t.render(c)
168
169# -----------------------------------------------------
170def info_slot_to_header(text) :
171 """ wandelt rechten Infoslot in HTML fuer WYSIWYG-Editor um """
172 HEADER_START = '<!-- header start -->'
173 HEADER_END = '<!-- header end -->'
174 INFO_START = '<!-- info start -->'
175 INFO_END = '<!-- info end -->'
176 ret = ''
177 nStart = 0
178 nHStart = string.find(text, HEADER_START, nStart)
179 while nHStart >= 0 :
180 nHEnd = string.find ( text, HEADER_END, nHStart )
181 header = text[nHStart+len(HEADER_START):nHEnd]
182 nIStart = string.find ( text, INFO_START, nHEnd )
183 nIEnd = string.find ( text, INFO_END, nIStart )
184 info = text[nIStart+len(INFO_START):nIEnd]
185 ret += '<h4>'+header+'</h4>\n'
186 ret += info + '\n'
187 nHStart = string.find(text, HEADER_START, nIEnd)
188 return ret
189
190# -----------------------------------------------------
191def get_section_choices(sections):
192 """ wandelt Textzeilen in Liste um """
193 ret = []
194 sections = string.splitfields(decode_html(sections), '\n')
195 for s in sections :
196 s = string.strip(s)
197 ret.append((encode_html(s), s))
198 return ret
199 # if s != '':
200 # yield(encode_html(s), s)
201
202# -----------------------------------------------------
203def get_parent_section_choices(my_item_container):
204 item_container = get_parent_item_container(my_item_container)
205 return get_section_choices(item_container.container.sections)
206
207# -----------------------------------------------------
208def get_license_choices(my_item_container):
209 #return get_section_choices(get_licenses())
210 ret = []
211 licenses = get_licenses()
212 for lic in licenses:
213 if lic.url != '':
214 l = show_link(lic.url, lic.name)
215 else:
216 l = lic.name
217 ret.append((lic.id, l))
218 return ret
219
220# -----------------------------------------------------
221def get_fach_choices():
222 # --- Liste aller Faecher
223 ret = []
224 ret.append((-1, '---'))
225 faecher = get_faecher()
226 for fach in faecher:
227 ret.append((fach.id, decode_html(fach.name)))
228 return ret
229
230# -----------------------------------------------------
231def get_schulart_choices():
232 # --- Liste aller Faecher
233 ret = []
234 ret.append((-1, '---'))
235 schularten = get_schularten()
236 for schulart in schularten:
237 ret.append((schulart.id, decode_html(schulart.name)))
238 return ret
239
240# -----------------------------------------------------
241def check_name( name, is_name_ok):
242 """ entfernt Umlaute etc. aus Dateinamen """
243 try:
244 name = unicode(name, 'utf-8')
245 except:
246 pass
247 name = name[max(string.rfind(name,'/'),
248 string.rfind(name,'\\'),
249 string.rfind(name,':')
250 )+1:]
251 name = string.replace(name, u"'", u'_')
252 name = string.replace(name, u'ä', u'ae')
253 name = string.replace(name, u'ö', u'oe')
254 name = string.replace(name, u'ü', u'ue')
255 name = string.replace(name, u'Ä', u'Ae')
256 name = string.replace(name, u'Ö', u'Oe')
257 name = string.replace(name, u'Ü', u'Ue')
258 name = string.replace(name, u'ß', u'ss')
259 bad_chars = ' ,;()[]{}*"#%+~!'
260 good_chars = '________________'
261 TRANSMAP = string.maketrans(bad_chars, good_chars)
262 name = name.encode('iso-8859-1')
263 name = string.translate(name, TRANSMAP)
264 if is_name_ok:
265 return name
266 html = '.html'
267 if name[-5:] != html :
268 name += html
269 return name
270
271# -----------------------------------------------------
272def show_link(url, info='', url_extern=False, url_class='', title=''):
273 """ zeigt Verweise an - externe Verweise werden optisch gekennzeichnet """
274 if info == '':
275 if url.startswith('http://'):
276 info += url[7:]
277 else:
278 info = url
279 from dms.settings import MY_DOMAINS
280 from django.template.loader import get_template
281 from django.template import Context
282 t = get_template('utils/show_link.html')
283 target = ''
284 start = ''
285 is_my_domain = False
286 # --- Parameter in URL ausschliessen
287 n_pos = url.find('?')
288 if n_pos > -1:
289 u = url[:n_pos]
290 else:
291 u = url
292 if u.startswith('http://'):
293 for domain in MY_DOMAINS:
294 if u.find(domain) >= 0 :
295 is_my_domain = True
296 break
297 if is_my_domain :
298 if url_extern :
299 target = '_extern'
300 start = NEW_WINDOW_ICON
301 else :
302 target = '_extern'
303 start = EXTERN_ICON
304 else :
305 # Javascript - das Oeffnen in einem eigenen Fenster erfolgt ueber Javascript
306 #target = '_extern'
307 start = NEW_WINDOW_ICON
308 if url_class != '' and not url_class.startswith('class='):
309 url_class = u' class="%s"' % url_class
310 if title != '' and not title.startswith('title='):
311 title = u' title="%s"' % title
312 c = Context ( {'start': start, 'url' : url, 'class': url_class,
313 'target': target, 'info': info, 'title': title } )
314 return t.render(c)
315
316# -----------------------------------------------------
317def get_link_by_item_container(item_container, is_folder=False):
318 """ liefert die entsprechende URL """
319 d_extern = ''
320 d_info = ''
321 d_title = item_container.item.title
322 if item_container.item.app.is_folderish or is_folder:
323 #d_class = 'class="folderLink" '
324 postfix = FOLDER_ICON
325 else :
326 #d_class = ''
327 postfix = ''
328 # --- handelt es sich um ein Datei- oder Ordner-Objekt?
329 is_file = is_file_by_item_container(item_container)
330 is_text = item_container.item.app.name == 'dmsText'
331 if string.find(item_container.item.name, '.html') > 0 or is_file or is_text:
332 if item_container.item.app.name == 'dmsRedirect':
333 d_url = item_container.item.url_more
334 if string.find(item_container.item.url_more, 'http://') >= 0:
335 is_my_domain = False
336 for domain in MY_DOMAINS:
337 if string.find(item_container.item.url_more, domain) >= 0:
338 is_my_domain = True
339 break
340 if is_my_domain:
341 if item_container.item.url_more_extern:
342 d_extern = '_extern'
343 d_extern_icon = NEW_WINDOW_ICON
344 else :
345 d_extern = '_extern'
346 d_extern_icon = EXTERN_ICON
347 elif is_file:
348 d_extern = '_extern'
349 d_extern_icon = NEW_WINDOW_ICON
350 d_info = FILE_DETAIL % get_site_url(item_container, item_container.item.name + '/show/')
351 d_url = DOWNLOAD_URL + item_container.container.path + item_container.item.name
352 else:
353 d_url = get_site_url(item_container, item_container.item.name)
354 else :
355 if item_container.is_data_object:
356 d_url = get_site_url(item_container, 'index.html')
357 else:
358 real_item_container = get_item_container_data_object_by_id(item_container.item.id)
359 if real_item_container == None:
360 d_url = get_site_url(item_container, 'index.html')
361 else:
362 d_url = get_site_url(real_item_container[0], 'index.html')
363 if d_extern:
364 help = _('Wird in einem eigenen Fenster ge&ouml;ffnet ...')
365 this_link = d_extern_icon + u'<a href="%s" target="d_extern" title="%s">%s</a>' % \
366 (d_url, help, d_title)
367 elif item_container.item.app.name == 'dmsRedirect' or not item_container.is_data_object:
368 s_info = REDIRECT_ICON + '&nbsp;'
369 help = _('Springt zu einer anderen Stelle ...')
370 this_link = s_info + u'<a href="%s" title="%s">%s</a>' % (d_url, help, d_title)
371 else:
372 this_link = u'<a href="%s">%s</a>' % (d_url, d_title)
373 if is_protected(item_container):
374 return '<i>' + this_link + d_info + '</i>' + PROJECT_ICON
375 return this_link + d_info + postfix
376
377# -----------------------------------------------------
378def show_more ( url, url_extern, info='Mehr ...' ) :
379 """ erzeugt einen Verweis fuer "mehr ..." """
380 return show_link ( url, info, url_extern )
381
382# -----------------------------------------------------
383def get_breadcrumb(item_container, text_only=False, ignore_own_breadcrumb=False):
384 """ Navigationszeile zusammenbauen """
385 if text_only:
386 ret = ''
387 length = len(item_container.container.site.base_folder)
388 n = 0 # --- Begrenzung der Schachtelungstiefe
389 if not item_container.item.app.is_folderish:
390 item_container = get_parent_item_container(item_container)
391 while item_container != None \
392 and (ignore_own_breadcrumb or \
393 not item_container.item.app.has_own_breadcrumb) \
394 and not item_container.container.is_top_folder \
395 and item_container.parent_item_id != -1 \
396 and n < 20:
397 ret = item_container.container.nav_title + ' | ' + ret
398 n += 1
399 if n >= 20:
400 assert False
401 item_container = get_parent_item_container(item_container)
402 return ret
403 else:
404 from django.template.loader import get_template
405 from django.template import Context
406 t = get_template('utils/nav_item.html')
407 ret = ''
408 length = len(item_container.container.site.base_folder)
409 n = 0 # --- Begrenzung der Schachtelungstiefe
410 if not item_container.item.app.is_folderish:
411 item_container = get_parent_item_container(item_container)
412 while item_container != None \
413 and (ignore_own_breadcrumb or \
414 not item_container.item.app.has_own_breadcrumb) \
415 and not item_container.container.is_top_folder \
416 and item_container.parent_item_id != -1 \
417 and n < 20:
418 c = Context( {'url' : item_container.container.site.url+\
419 item_container.container.path[length:]+'index.html',
420 'title': item_container.item.title,
421 'info' : item_container.container.nav_title,})
422 ret = t.render(c) + ret
423 n += 1
424 if n >= 20:
425 assert False
426 item_container = get_parent_item_container(item_container)
427 if item_container != None:
428 if item_container.item.app.has_own_breadcrumb :
429 c=Context({'url' : get_site_url(item_container, 'index.html'),
430 'title': item_container.item.title,
431 'info' : item_container.container.nav_title,})
432 ret = t.render(c) + ret
433 parent_item_container = get_parent_item_container(item_container)
434 c=Context({'url' : parent_item_container.get_absolute_url(),
435 'title': _('Zur&uuml;ck zu den normalen Web-Seiten'),
436 'info' : _('Ausgang'),})
437 elif item_container.container.is_top_folder:
438 c=Context({'url' : get_site_url(item_container, 'index.html'),
439 'title': item_container.item.title,
440 'info' : item_container.container.nav_title,})
441 ret = t.render(c) + ret
442 item_container = get_top_item()
443 c=Context({'url' : get_site_url(item_container, 'index.html'),
444 'title': item_container.item.title,
445 'info' : item_container.container.nav_title,})
446 else:
447 c=Context({'url' : get_site_url(item_container, 'index.html'),
448 'title': item_container.item.title,
449 'info' : item_container.container.nav_title,})
450 ret = t.render(c) + ret
451 return ret
452 else:
453 return 'item_container == None!!!'
454
455# -----------------------------------------------------
456def get_prev_next(item_container):
457 """ Geschwisterseiten """
458
459 def get_string(line, max_char=30):
460 if len(line) < max_char:
461 return line
462 return line[:max_char] + ' ...'
463
464 items = get_prev_parent_item_containers(item_container)
465 p_len = len(items)
466 if p_len == 0:
467 prev_url = ''
468 prev_info = ''
469 else:
470 p_item = items[p_len-1].item
471 prev_url = p_item.name
472 prev_info = get_string(p_item.title)
473 items = get_next_parent_item_containers(item_container)
474 if len(items) >0:
475 next_url = items[0].item.name
476 next_info = get_string(items[0].item.title)
477 else:
478 next_url = ''
479 next_info = ''
480 return prev_url, prev_info, next_url, next_info
481
482# -----------------------------------------------------
483def get_prev_next_line(item_container):
484 """ Geschwisterseiten anzeigen """
485 from django.template.loader import get_template
486 from django.template import Context
487 t = get_template('utils/prev_next.html')
488 prev_url, prev_info, next_url, next_info = get_prev_next(item_container)
489 c = Context({'prev_url' : prev_url,
490 'prev_info' : prev_info,
491 'complete_url': './index.html/show_complete/',
492 'next_url' : next_url,
493 'next_info' : next_info, })
494 return t.render(c)
495
496# -----------------------------------------------------
497def get_folderish_actions(request, user_perms, item_container, app_name,
498 has_user_folder, dont={}):
499 from django.template.loader import get_template
500 from django.template import Context
501 if not request.user.is_authenticated():
502 return ''
503 t = get_template('app/manage_options_folderish.html')
504 nPos = max ( string.rfind ( request.path, '/add/' ),
505 string.rfind ( request.path, '/edit/' ),
506 string.rfind ( request.path, '/navigation/' ),
507 string.rfind ( request.path, '/navigation_left/' ),
508 string.rfind ( request.path, '/navigation_top/' ),
509 string.rfind ( request.path, '/manage/' ),
510 string.rfind ( request.path, '/manage_browseable/' ),
511 string.rfind ( request.path, '/manage_comments/' ),
512 string.rfind ( request.path, '/import/' ),
513 string.rfind ( request.path, '/export/' ),
514 string.rfind ( request.path, '/manage_site/' ),
515 string.rfind ( request.path, '/manage_user/' ),
516 string.rfind ( request.path, '/sort/' ),
517 string.rfind ( request.path, '/empty_folders/' ),
518 string.rfind ( request.path, '/find_items/' ),
519 )
520 if nPos > -1 or dont != {}:
521 path = request.path[:nPos]
522 show_mode = not dont.has_key('show_mode') and user_perms.perm_read
523 add_mode = not dont.has_key('add_mode') and \
524 user_perms.perm_add and item_container.item.has_user_support
525 edit_mode = not dont.has_key('edit_mode') and \
526 user_perms.perm_edit
527 # --- Stimmen diese Rechte bei ..own..??
528 manage_mode = not dont.has_key('manage_mode') and \
529 ( user_perms.perm_manage or user_perms.perm_edit_own \
530 or user_perms.perm_manage_own )
531 import_mode = not dont.has_key('import_mode') and \
532 user_perms.perm_manage_folderish
533 export_mode = not dont.has_key('export_mode') and \
534 user_perms.perm_manage_folderish
535 browseable_mode = not dont.has_key('browseable_mode') and \
536 user_perms.perm_edit
537 comment_mode = not dont.has_key('comment_mode') and \
538 item_container.item.has_comments and \
539 user_perms.perm_edit
540 user_mode = not dont.has_key('user_mode') and \
541 user_perms.perm_manage_user and has_user_folder
542 navigation_mode = not dont.has_key('navigation_mode') and \
543 user_perms.perm_manage_folderish
544 navigation_top_mode = not dont.has_key('navigation_top_mode') and \
545 user_perms.perm_manage_site and item_container.container.id == 1
546 navigation_left_mode = not dont.has_key('navigation_left_mode') and \
547 user_perms.perm_manage_site and item_container.container.id == 1
548 sort_mode = not dont.has_key('sort_mode') and \
549 user_perms.perm_manage
550 empty_mode = not dont.has_key('empty_mode') and \
551 user_perms.perm_manage
552 search_mode = not dont.has_key('search_mode') and \
553 user_perms.perm_add
554 else :
555 path = request.path
556 show_mode = False
557 add_mode = False
558 edit_mode = False
559 manage_mode = True
560 import_mode = False
561 export_mode = False
562 browseable_mode = False
563 comment_mode = False
564 user_mode = False
565 navigation_mode = False
566 navigation_top_mode = False
567 navigation_left_mode = False
568 sort_mode = False
569 empty_mode = False
570 search_mode = False
571
572 if string.find ( path, 'index.html' ) < 0 :
573 path += 'index.html'
574 if ( string.find(request.path, '/add/') >= 0 ) :
575 edit_mode = False
576 import_mode = False
577 export_mode = False
578 browseable_mode = False
579 comment_mode = False
580 user_mode = False
581 navigation_mode = False
582 navigation_left_mode = False
583 sort_mode = False
584 empty_mode = False
585 search_mode = False
586 elif ( string.find(request.path, '/edit/') >= 0 ) :
587 edit_mode = False
588 user_mode = False
589 elif ( string.find(request.path, '/manage/') >= 0 ) :
590 manage_mode = False
591 elif ( string.find(request.path, '/manage_browseable/') >= 0 ) :
592 browseable_mode = False
593 elif ( string.find(request.path, '/manage_comment/') >= 0 ) :
594 import_mode = False
595 export_mode = False
596 comment_mode = False
597 user_mode = False
598 navigation_mode = False
599 navigation_left_mode = False
600 sort_mode = False
601 elif ( string.find(request.path, '/sort/') >= 0 ) :
602 user_mode = False
603 sort_mode = False
604 elif ( string.find(request.path, '/empty_folders/') >= 0 ):
605 empty_mode = False
606 elif ( string.find(request.path, '/navigation/') >= 0 ) :
607 user_mode = False
608 navigation_mode = False
609 elif ( string.find(request.path, '/navigation_top/') >= 0 ) :
610 user_mode = False
611 navigation_top_mode = False
612 elif ( string.find(request.path, '/navigation_left/') >= 0 ) :
613 user_mode = False
614 navigation_left_mode = False
615 c = Context( {'authenticated' : request.user.is_authenticated(),
616 'app_name' : app_name,
617 'show_mode' : show_mode,
618 'add_mode' : add_mode,
619 'edit_mode' : edit_mode,
620 'manage_mode' : manage_mode,
621 'import_mode' : import_mode,
622 'export_mode' : import_mode,
623 'browseable_mode' : browseable_mode,
624 'comment_mode' : comment_mode,
625 'navigation_mode' : navigation_mode,
626 'navigation_top_mode' : navigation_top_mode,
627 'navigation_left_mode': navigation_left_mode,
628 'sort_mode' : sort_mode,
629 'empty_mode' : empty_mode,
630 'search_mode' : search_mode,
631 'user_mode' : has_user_folder and user_mode,
632 'path' : get_site_url(item_container, 'index.html'),
633 'user_path' : get_site_url(item_container,
634 'acl_users/index.html'),
635 'user_perms' : user_perms,
636 'user_name' : request.user,
637 'base_site_url' : get_base_site_url(),
638 } )
639 return t.render(c).strip()
640
641# -----------------------------------------------------
642def get_item_actions(request, user_perms, item_container, app_name,
643 item_comments, commands={}):
644 from django.template.loader import get_template
645 from django.template import Context
646 t = get_template('app/manage_options_item.html')
647 show_mode = commands.has_key('show_mode')
648 edit_mode = commands.has_key('edit_mode')
649 rss_mode = commands.has_key('rss_mode')
650 image_mode = commands.has_key('image_mode')
651 export_mode = commands.has_key('export_mode')
652 if item_comments != None and item_comments != False and request.user.is_authenticated():
653 has_comments = ( string.find(request.path, '/manage_comments/') < 0 )
654 else:
655 has_comments = False
656 if string.find(request.path, '/change_owner/') >= 0:
657 manage_site_mode = False
658 else:
659 manage_site_mode = request.user.is_authenticated() \
660 and user_perms.perm_manage_site
661 c = Context ( { 'authenticated' : request.user.is_authenticated(),
662 'show_mode' : show_mode,
663 'edit_mode' : edit_mode,
664 'export_mode' : export_mode,
665 'rss_mode' : rss_mode,
666 'manage_comments_mode': has_comments,
667 'image_mode' : image_mode,
668 'manage_site_mode' : manage_site_mode,
669 'user_perms' : user_perms,
670 'user_name' : request.user,
671 'path' : get_site_url(item_container,
672 item_container.item.name), } )
673 return t.render(c).strip()
674
675# -----------------------------------------------------
676def get_site_actions(request, user_perms, item_container, dont={}):
677 from django.template.loader import get_template
678 from django.template import Context
679 if not request.user.is_authenticated():
680 return ''
681 t = get_template('app/manage_options_site.html')
682 nPos = max ( string.rfind ( request.path, '/add/' ),
683 string.rfind ( request.path, '/edit/' ),
684 string.rfind ( request.path, '/navigation/' ),
685 string.rfind ( request.path, '/navigation_left/' ),
686 string.rfind ( request.path, '/navigation_top/' ),
687 string.rfind ( request.path, '/manage/' ),
688 string.rfind ( request.path, '/manage_browseable/' ),
689 string.rfind ( request.path, '/manage_comments/' ),
690 string.rfind ( request.path, '/import/' ),
691 string.rfind ( request.path, '/manage_site/' ),
692 string.rfind ( request.path, '/manage_user/' ),
693 string.rfind ( request.path, '/sort/' ),
694 )
695 if nPos > -1 :
696 path = request.path[:nPos]
697 manage_domain_mode = request.user.is_authenticated() \
698 and not dont.has_key('manage_site_mode') \
699 and user_perms.perm_manage_site \
700 and item_container.item.app.name == 'dmsFolder'
701 manage_site_mode = request.user.is_authenticated() \
702 and not dont.has_key('manage_site_mode') \
703 and user_perms.perm_manage_site
704 else :
705 path = request.path
706 manage_domain_mode = False
707 manage_site_mode = False
708
709 if string.find ( path, 'index.html' ) < 0 :
710 path += 'index.html'
711 if ( string.find(request.path, '/manage_site/') >= 0 ) :
712 manage_site_mode = False
713 user_mode = False
714 elif ( string.find(request.path, '/manage_domain/') >= 0 ) :
715 manage_domain_mode = False
716 user_mode = False
717 c = Context( {'authenticated' : request.user.is_authenticated(),
718 'manage_domain_mode' : manage_domain_mode,
719 'manage_site_mode' : manage_site_mode,
720 'path' : get_site_url(item_container, 'index.html'),
721 'user_path' : get_site_url(item_container,
722 'acl_users/index.html'),
723 'user_perms' : user_perms,
724 'user_name' : request.user,
725 'base_site_url' : get_base_site_url(),
726 } )
727 return t.render(c).strip()
728
729# -----------------------------------------------------
730def get_item_actions(request, user_perms, item_container, app_name,
731 item_comments, commands={}):
732 from django.template.loader import get_template
733 from django.template import Context
734 t = get_template('app/manage_options_item.html')
735 show_mode = commands.has_key('show_mode')
736 edit_mode = commands.has_key('edit_mode')
737 rss_mode = commands.has_key('rss_mode')
738 image_mode = commands.has_key('image_mode')
739 export_mode = commands.has_key('export_mode')
740 if item_comments != None and item_comments != False and request.user.is_authenticated():
741 has_comments = ( string.find(request.path, '/manage_comments/') < 0 )
742 else:
743 has_comments = False
744 if string.find(request.path, '/change_owner/') >= 0:
745 manage_site_mode = False
746 else:
747 manage_site_mode = request.user.is_authenticated() \
748 and user_perms.perm_manage_site
749 c = Context ( { 'authenticated' : request.user.is_authenticated(),
750 'show_mode' : show_mode,
751 'edit_mode' : edit_mode,
752 'export_mode' : export_mode,
753 'rss_mode' : rss_mode,
754 'manage_comments_mode': has_comments,
755 'image_mode' : image_mode,
756 'manage_site_mode' : manage_site_mode,
757 'user_perms' : user_perms,
758 'user_name' : request.user,
759 'path' : get_site_url(item_container,
760 item_container.item.name), } )
761 return t.render(c).strip()
762
763# -----------------------------------------------------
764def get_item_add_actions(request, user_perms, item_container, commands):
765 from django.template.loader import get_template
766 from django.template import Context
767 t = get_template('app/manage_options_item.html')
768 if commands == {}:
769 show_mode = True
770 edit_mode = False
771 rss_mode = False
772 image_mode = False
773 has_comments = False
774 else:
775 show_mode = commands.has_key('show_mode')
776 edit_mode = commands.has_key('edit_mode')
777 rss_mode = commands.has_key('rss_mode')
778 image_mode = commands.has_key('image_mode')
779 #if item_comments != None and item_comments != False and request.user.is_authenticated():
780 # has_comments = ( string.find(request.path, '/manage_comments/') < 0 )
781 #else:
782 has_comments = False
783 c = Context ( { 'authenticated' : request.user.is_authenticated(),
784 'show_mode' : show_mode,
785 'edit_mode' : edit_mode,
786 'rss_mode' : rss_mode,
787 'image_mode' : image_mode,
788 'manage_comments_mode': has_comments,
789 'user_perms' : user_perms,
790 'user_name' : request.user,
791 'path' : get_site_url(item_container, 'index.html'), } )
792 return t.render(c).strip()
793
794# -----------------------------------------------------
795def get_navigation_left(item_container):
796 """ liefert den linken Navigationsbereich """
797 items = get_menuitems_navmenu_left(item_container.container.menu_left_id,
798 item_container.container.nav_name_left)
799 if len(items) > 0:
800 return items[0].navigation
801 else:
802 return '<p>%s<br />%i, %s</p>' % \
803 (_('Navigation fehlt!'), item_container.container.menu_left_id,
804 item_container.container.nav_name_left)
805
806# -----------------------------------------------------
807def get_navigation_top(item_container):
808 """ liefert den oberen Navigationsbereich """
809 items = get_menuitems_navmenu_top(item_container.container.menu_top_id,
810 item_container.container.nav_name_top)
811 n = items[0].navigation
812 if len(items) > 0:
813 return n
814 else:
815 return _('<p>Navigation fehlt!<br />%(menu_left_id)i, %(menu_left_name)s</p>' % \
816 (item_container.container.menu_top_id,
817 item_container.container.nav_name_top) )
818
819# -----------------------------------------------------
820def get_german_date(d):
821 """ d=2003-02-01 10:11:12 -> 01.02.2003 10:11"""
822 arr = string.splitfields(d, ' ')
823 Y, M, D = string.splitfields(arr[0], '-')
824 h, m, s = string.splitfields(arr[1], ':')
825 dt = datetime.datetime(int(Y),int(M),int(D),int(h),int(m))
826 return dt.strftime('%d.%m.%Y %H:%M')
827
828# -----------------------------------------------------
829def remove_link_icons(t):
830 """ entfernt Icons, mit denen Verweise (automatisch) gekennzeichnet werden """
831 t = string.replace(t, EXTERN_ICON + '<a', '<a')
832 t = string.replace(t, NEW_WINDOW_ICON + '<a', '<a')
833 return t
834
835# -----------------------------------------------------
836def add_if_app_available(item_container, add_on, name, url, info):
837 """
838 Welche Applikationsobjekte (in der Management-Sicht) duerfen ergaenzt werden?
839 Falls die Applikation <name> erlaubt ist, wird ein dictionary mit <url> und
840 <info> bei der Liste <add_on> ergaenzt.
841 """
842 if is_app_available(name):
843 add_on.append( { 'url' : get_site_url(item_container, url), 'info': info, } )
844
Back to Top