def _set_navigation_parent(self, value, tree=None): ct = ContentType.objects.get_for_model(get_article_class()) if value != None: if value < 0: # WTF ??? tree_id = -value tree = get_navTree_class().objects.get(id=tree_id) parent = None else: parent = NavNode.objects.get(id=value) if not tree: tree = parent.tree create_navigation_node(ct, self, tree, parent)
def get_node_choices(): prefix = "--" #choices = [(None, _(u'<not in navigation>')), (0, _(u'<root node>'))] #for root_node in NavNode.objects.filter(parent__isnull=True).order_by('ordering'): # for (progeny, level) in root_node.get_progeny(): # choices.append((progeny.id, prefix*level+progeny.label)) #return choices choices = [(None, _(u'<not in navigation>'))] for tree in get_navTree_class().objects.all(): choices.append((-tree.id, tree.name)) for root_node in NavNode.objects.filter(tree=tree, parent__isnull=True).order_by('ordering'): for (progeny, level) in root_node.get_progeny(): choices.append((progeny.id, prefix*(level+1)+progeny.label)) return choices
def resolve_kwargs(self, context): kwargs = {} for (k, v) in self._kwargs.items(): try: kwargs[k] = v.resolve(context) except VariableDoesNotExist: kwargs[k] = v.var # if the variable can not be resolved, thake the value as is if k == 'css_class': kwargs[k] = self.format_css_class(v) if not 'tree' in kwargs: kwargs['tree'] = 'default' tree, _is_new = get_navTree_class().objects.get_or_create(name=kwargs['tree']) if 'coop_cms_navtrees' in context.dicts[0]: context.dicts[0]['coop_cms_navtrees'].append(tree) else: context.dicts[0]['coop_cms_navtrees'] = [tree] return kwargs
def process_nav_edition(request, tree_id): """This handle ajax request sent by the tree component""" if request.method == "POST" and request.is_ajax() and "msg_id" in request.POST: try: # Get the current tree tree = get_object_or_404(get_navTree_class(), id=tree_id) # check permissions if not request.user.has_perm("coop_cms.change_navtree"): raise PermissionDenied supported_msg = {} # create a map between message name and handler # use the function name as message id for fct in ( view_navnode, rename_navnode, remove_navnode, move_navnode, add_navnode, get_suggest_list, navnode_in_navigation, ): supported_msg[fct.__name__] = fct # Call the handler corresponding to the requested message response = supported_msg[request.POST["msg_id"]](request, tree) # If no exception raise: Success response["status"] = "success" response.setdefault("message", "Ok") # if no message defined in response, add something except KeyError, msg: response = {"status": "error", "message": u"Unsupported message : %s" % msg} except PermissionDenied: response = {"status": "error", "message": u"You are not allowed to add a node"}
from django import forms from fcpe.models import * from fcpe.autocomplete_admin import FkAutocompleteAdmin, InlineAutocompleteAdmin from django.contrib.admin.widgets import AdminTextInputWidget from django.utils.safestring import mark_safe from django.utils.html import escape import unicodedata from django.db.models.loading import get_app, get_models from django.contrib.sites.models import Site from django.contrib.auth.models import Group from coop_cms.settings import get_navTree_class admin.site.unregister(Group) admin.site.unregister(Site) admin.site.unregister(get_navTree_class()) for app in ['coop_cms', 'communes', 'oembed']: for mod in get_models(get_app(app)): try: admin.site.unregister(mod) except: pass def to_ascii(input_str): nkfd_form = unicodedata.normalize('NFKD', unicode(input_str)) only_ascii = nkfd_form.encode('ASCII', 'ignore') return only_ascii
from coop_cms.admin import NavTreeAdmin, ArticleAdmin from coop_cms.settings import get_article_class, get_navTree_class from coop_cms.forms import ArticleAdminForm # -- We need to customize coop-cms NavtreeAdmin class MyNavTreeAdmin(NavTreeAdmin): change_form_template = 'admin/navtree_change_form.html' # list_display = ['__unicode__', 'name', 'sites'] # list_editable = ['name', 'sites'] # if settings.COOP_USE_SITES: # list_display.append('sites') # list_display.append('sites') navtree_model = get_navTree_class() admin.site.unregister(navtree_model) admin.site.register(navtree_model, MyNavTreeAdmin) # -- We need to customize coop-cms ArticleAdmin class CoopArticleForm(ArticleAdminForm): content = forms.CharField(widget=AdminTinyMCE(attrs={'cols': 80, 'rows': 60}), required=False) class Meta: model = get_model('coop_local', 'Article') widgets = {'sites': chosenwidgets.ChosenSelectMultiple()} def __init__(self, *args, **kwargs): super(CoopArticleForm, self).__init__(*args, **kwargs) if 'sites' in self.fields:
def navtypes_list(self, tree): if tree.types.count() == 0: return _(u'All') else: return u' - '.join([unicode(x) for x in tree.types.all()]) navtypes_list.short_description = _(u'navigable types') def change_view(self, request, object_id, extra_context=None): extra_context = extra_context or {} tree = models.get_navTree_class().objects.get(id=object_id) extra_context['navtree'] = tree extra_context['navtree_nodes'] = self.nodes_li(tree) return super(NavTreeAdmin, self).change_view(request, object_id, extra_context=extra_context) admin.site.register(get_navTree_class(), NavTreeAdmin) class ArticleAdmin(admin.ModelAdmin): form = ArticleAdminForm list_display = ['slug', 'title', 'publication', 'is_homepage', 'in_newsletter', 'category', 'modified'] list_editable = ['publication', 'is_homepage', 'in_newsletter', 'category'] readonly_fields = ['slug', 'created', 'modified'] fieldsets = ( #(_('Navigation'), {'fields': ('navigation_parent',)}), (_('General'), {'fields': ('slug', 'title', 'content')}), (_('Advanced'), {'fields': ('template', 'category', 'logo', 'is_homepage', 'in_newsletter')}), (_('Publication'), {'fields': ('publication', 'created', 'modified')}), (_('Summary'), {'fields': ('summary',)}), (_('Debug'), {'fields': ('temp_logo',)}), )