Zlacz takie same przyciski podczas naprawiania.
[redakcja.git] / apps / toolbar / management / commands / fixbuttons.py
1 # -*- conding: utf-8
2 __author__="lreqc"
3 __date__ ="$2009-09-08 14:31:26$"
4 from django.core.management.base import NoArgsCommand
5 from toolbar.models import Button
6 from django.utils import simplejson as json
7 import re
8
9 class Command(NoArgsCommand):
10     
11     def handle_noargs(self, **options):
12         buttons = Button.objects.all()
13         print "Validating parameters... "
14         for b in buttons:
15             params = b.params;
16             try:
17                 v = json.loads(b.params)               
18             except ValueError, e:
19                 print 'Trying to fix button "%s" ...' % b.slug
20                 if params[0] == u'(':
21                     params = params[1:]
22                 if params[-1] == u')':
23                     params = params[:-1]
24                 try:
25                     v = son.loads(re.sub(u'([\\w-]+)\\s*:', u'"\\1": ', params).encode('utf-8'))
26                 except ValueError, e:
27                     print "Unable to fix '%s' " % b.params
28                     print "Try to fix this button manually and rerun the script."
29                     return False
30
31             # resave
32             b.params = json.dumps(v)
33             b.save()
34
35         print "Merge duplicate buttons (if any)..."
36         hash = {}
37         for b in buttons:
38             if b.slug not in hash:
39                 hash[b.slug] = b
40                 continue
41                 
42             # duplicate button
43             print "Found duplicate of '%s'" % b.slug
44             a = hash[b.slug]
45
46             remove_duplicate = True
47             if a.params != b.params:
48                 print "Conflicting params for duplicate of '%s'." % b.slug
49                 print "Groups will be joined, but won't remove duplicates."
50                 remove_duplicate = False
51
52             for g in b.group.all():
53                 a.group.add(g)
54
55             b.group.clear()
56
57             a.save()
58             b.delete()