0002-views-flag-connectors-with-open-access-on-homepage-4.patch
passerelle/base/models.py | ||
---|---|---|
597 | 597 |
exception_to_text(exc_value), |
598 | 598 |
exc_info=exc_info) |
599 | 599 | |
600 |
@property |
|
601 |
def has_open_access_right(self): |
|
602 |
return AccessRight.objects.filter( |
|
603 |
resource_type=ContentType.objects.get_for_model(self), |
|
604 |
resource_pk=self.pk, |
|
605 |
apiuser__key='' |
|
606 |
).exists() |
|
607 | ||
600 | 608 | |
601 | 609 |
@six.python_2_unicode_compatible |
602 | 610 |
class AccessRight(models.Model): |
passerelle/static/css/style.css | ||
---|---|---|
54 | 54 | |
55 | 55 |
select#id_msg_class { max-width: 30em; } |
56 | 56 | |
57 |
.connector.is-open a { |
|
58 |
color: #088a08; |
|
59 |
} |
|
60 | ||
57 | 61 |
li span.connector-name { |
58 | 62 |
display: block; |
59 | 63 |
position: absolute; |
... | ... | |
61 | 65 |
width: 100%; |
62 | 66 |
} |
63 | 67 | |
64 |
li span.connector-type {
|
|
68 |
li span.connector-details {
|
|
65 | 69 |
display: block; |
66 | 70 |
font-size: 80%; |
67 |
opacity: 0.6;
|
|
71 |
color: #576b6b;
|
|
68 | 72 |
position: absolute; |
69 | 73 |
bottom: 2ex; |
70 | 74 |
width: 100%; |
71 | 75 |
} |
72 | 76 | |
77 |
li span.connector-details .connector-open { |
|
78 |
color: #088a08; |
|
79 |
font-weight: bold; |
|
80 |
} |
|
81 | ||
73 | 82 |
ul.connectors { |
74 | 83 |
clear: both; |
75 | 84 |
} |
passerelle/templates/passerelle/manage.html | ||
---|---|---|
19 | 19 |
<div> |
20 | 20 |
<ul class="objects-list single-links connectors"> |
21 | 21 |
{% for a in apps %} |
22 |
<li class="connector {{ a.get_css_class_name }} status-{{ a.get_availability_status.status }}" |
|
23 |
><a href="{{ a.get_absolute_url }}"><span class="connector-name">{{ a.title }}</span> |
|
24 |
<span class="connector-type">({{ a.get_verbose_name }})</span></a></li> |
|
22 |
{% with a.has_open_access_right as is_open %} |
|
23 |
<li class="connector {{ a.get_css_class_name }} status-{{ a.get_availability_status.status }} {% if is_open %}is-open{% endif %}"> |
|
24 |
<a href="{{ a.get_absolute_url }}"> |
|
25 |
<span class="connector-name">{{ a.title }}</span> |
|
26 |
<span class="connector-details">({{ a.get_verbose_name }}{% if is_open %}, |
|
27 |
<span class="connector-open">{% trans "open access" %}</span>{% endif %})</span> |
|
28 |
</a> |
|
29 |
</li> |
|
30 |
{% endwith %} |
|
25 | 31 |
{% endfor %} |
26 | 32 |
</ul> |
27 | 33 |
</div> |
tests/test_manager.py | ||
---|---|---|
542 | 542 |
resp.form['confirm_open_access'] = True |
543 | 543 |
resp.form.submit().follow() |
544 | 544 |
assert AccessRight.objects.count() == 2 |
545 | ||
546 | ||
547 |
def test_manager_open_access_flag(app, admin_user): |
|
548 |
csv = CsvDataSource.objects.create(csv_file=File(StringIO('1;t\n'), 't.csv'), slug='t', title='t') |
|
549 |
api = ApiUser.objects.create(username='test', fullname='test', keytype='', key='test') |
|
550 | ||
551 |
app = login(app) |
|
552 |
resp = app.get('/manage/', status=200) |
|
553 |
assert len(resp.pyquery('li.connector')) == 1 |
|
554 |
assert not 'Open access' in resp.text |
|
555 | ||
556 |
obj_type = ContentType.objects.get_for_model(csv) |
|
557 |
AccessRight.objects.create(codename='can_access', apiuser=api, resource_type=obj_type, |
|
558 |
resource_pk=csv.pk) |
|
559 | ||
560 |
resp = app.get('/manage/', status=200) |
|
561 |
assert not 'Open access' in resp.text |
|
562 | ||
563 |
api.key = '' |
|
564 |
api.save() |
|
565 | ||
566 |
resp = app.get('/manage/', status=200) |
|
567 |
assert 'Open access' in resp.text |
|
545 |
- |