Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
mentors.debian.net
debexpo
Commits
66a0aaa0
Commit
66a0aaa0
authored
Sep 30, 2011
by
Arno Töll
Browse files
Store filters in the query string, make it possible to store the filter list in the client session
parent
e85ce772
Changes
3
Hide whitespace changes
Inline
Side-by-side
debexpo/config/routing.py
View file @
66a0aaa0
...
@@ -64,7 +64,7 @@ def make_map(config):
...
@@ -64,7 +64,7 @@ def make_map(config):
map
.
connect
(
'intro-maintainers'
,
'/intro-maintainers'
,
map
.
connect
(
'intro-maintainers'
,
'/intro-maintainers'
,
controller
=
'index'
,
action
=
'intro_maintainers'
)
controller
=
'index'
,
action
=
'intro_maintainers'
)
map
.
connect
(
'sponsors'
,
'/sponsors'
,
controller
=
'sponsor'
,
action
=
'index'
)
map
.
connect
(
'sponsors'
,
'/sponsors'
,
controller
=
'sponsor'
,
action
=
'index'
)
map
.
connect
(
'sponsor_tag_
toggl
e'
,
'/sponsors/
toggle/{tag}
'
,
controller
=
'sponsor'
,
action
=
'
toggl
e'
)
map
.
connect
(
'sponsor_tag_
sav
e'
,
'/sponsors/
save
'
,
controller
=
'sponsor'
,
action
=
'
sav
e'
)
map
.
connect
(
'sponsor_tag_clear'
,
'/sponsors/clear'
,
controller
=
'sponsor'
,
action
=
'clear'
)
map
.
connect
(
'sponsor_tag_clear'
,
'/sponsors/clear'
,
controller
=
'sponsor'
,
action
=
'clear'
)
map
.
connect
(
'intro-reviewers'
,
'/intro-reviewers'
,
controller
=
'index'
,
action
=
'intro_reviewers'
)
map
.
connect
(
'intro-reviewers'
,
'/intro-reviewers'
,
controller
=
'index'
,
action
=
'intro_reviewers'
)
map
.
connect
(
'my'
,
'/my'
,
controller
=
'my'
,
action
=
'index'
)
map
.
connect
(
'my'
,
'/my'
,
controller
=
'my'
,
action
=
'index'
)
...
...
debexpo/controllers/sponsor.py
View file @
66a0aaa0
...
@@ -38,7 +38,7 @@ __license__ = 'MIT'
...
@@ -38,7 +38,7 @@ __license__ = 'MIT'
import
logging
import
logging
from
debexpo.lib.base
import
BaseController
,
c
,
config
,
render
,
session
,
\
from
debexpo.lib.base
import
BaseController
,
c
,
config
,
render
,
session
,
\
redirect
,
url
,
abort
redirect
,
url
,
abort
,
request
from
debexpo.lib
import
constants
from
debexpo.lib
import
constants
from
debexpo.model.sponsor_metrics
import
SponsorMetrics
,
SponsorTags
,
SponsorMetricsTags
from
debexpo.model.sponsor_metrics
import
SponsorMetrics
,
SponsorTags
,
SponsorMetricsTags
from
debexpo.model.users
import
User
from
debexpo.model.users
import
User
...
@@ -51,6 +51,28 @@ log = logging.getLogger(__name__)
...
@@ -51,6 +51,28 @@ log = logging.getLogger(__name__)
class
SponsorController
(
BaseController
):
class
SponsorController
(
BaseController
):
def
_validate_tags
(
self
,
tags
,
existing_tags
=
None
):
"""
Validates a list of tags with actual existing ones
```tags```
A list of tags which need to be verified
```existing_tags````
The list of existing tags. Might be None to let this method fetch the tag list
"""
if
not
existing_tags
:
existing_tags
=
[
tag
.
tag
for
tag
in
meta
.
session
.
query
(
SponsorTags
).
all
()]
else
:
existing_tags
=
[
tag
.
tag
for
tag
in
existing_tags
]
for
tag
in
tags
:
if
not
tag
in
existing_tags
:
return
False
return
True
def
clear
(
self
):
def
clear
(
self
):
"""
"""
Clear applied filters in the session.
Clear applied filters in the session.
...
@@ -65,7 +87,7 @@ class SponsorController(BaseController):
...
@@ -65,7 +87,7 @@ class SponsorController(BaseController):
redirect
(
url
(
'sponsors'
))
redirect
(
url
(
'sponsors'
))
def
toggl
e
(
self
,
tag
):
def
sav
e
(
self
):
"""
"""
Toggle a filter within the session.
Toggle a filter within the session.
This method prepares a list of filters to limit results in the sponsor list
This method prepares a list of filters to limit results in the sponsor list
...
@@ -74,18 +96,14 @@ class SponsorController(BaseController):
...
@@ -74,18 +96,14 @@ class SponsorController(BaseController):
list remove it, add it otherwise.
list remove it, add it otherwise.
"""
"""
if
tag
not
in
[
x
.
tag
for
x
in
meta
.
session
.
query
(
SponsorTags
).
all
()]:
tags
=
request
.
params
.
getall
(
't'
)
if
not
self
.
_validate_tags
(
tags
):
abort
(
404
)
abort
(
404
)
if
'sponsor_filters'
not
in
session
:
if
'sponsor_filters'
not
in
session
:
session
[
'sponsor_filters'
]
=
[]
session
[
'sponsor_filters'
]
=
[]
if
tag
in
session
[
'sponsor_filters'
]:
session
[
'sponsor_filters'
]
=
tags
log
.
debug
(
"Removing tag %s from the filter list"
%
(
tag
))
session
[
'sponsor_filters'
].
remove
(
tag
)
else
:
log
.
debug
(
"Adding tag %s to the filter list"
%
(
tag
))
session
[
'sponsor_filters'
].
append
(
tag
)
session
.
save
()
session
.
save
()
redirect
(
url
(
'sponsors'
))
redirect
(
url
(
'sponsors'
))
...
@@ -131,9 +149,13 @@ class SponsorController(BaseController):
...
@@ -131,9 +149,13 @@ class SponsorController(BaseController):
c
.
sponsor_filter
=
session
[
'sponsor_filters'
]
c
.
sponsor_filter
=
session
[
'sponsor_filters'
]
else
:
else
:
c
.
sponsor_filter
=
[]
c
.
sponsor_filter
=
[]
if
request
.
params
.
getall
(
't'
):
c
.
sponsor_filter
=
request
.
params
.
getall
(
't'
)
c
.
technical_tags
=
meta
.
session
.
query
(
SponsorTags
).
filter_by
(
tag_type
=
constants
.
SPONSOR_METRICS_TYPE_TECHNICAL
).
all
()
c
.
technical_tags
=
meta
.
session
.
query
(
SponsorTags
).
filter_by
(
tag_type
=
constants
.
SPONSOR_METRICS_TYPE_TECHNICAL
).
all
()
c
.
social_tags
=
meta
.
session
.
query
(
SponsorTags
).
filter_by
(
tag_type
=
constants
.
SPONSOR_METRICS_TYPE_SOCIAL
).
all
()
c
.
social_tags
=
meta
.
session
.
query
(
SponsorTags
).
filter_by
(
tag_type
=
constants
.
SPONSOR_METRICS_TYPE_SOCIAL
).
all
()
if
not
self
.
_validate_tags
(
c
.
sponsor_filter
,
c
.
technical_tags
+
c
.
social_tags
):
abort
(
404
)
return
render
(
'/sponsor/index.mako'
)
return
render
(
'/sponsor/index.mako'
)
debexpo/templates/sponsor/index.mako
View file @
66a0aaa0
...
@@ -44,12 +44,20 @@ To help you find a sponsor interested in your package, they can formulate sponso
...
@@ -44,12 +44,20 @@ To help you find a sponsor interested in your package, they can formulate sponso
<%def name="tag_helper(requirement)">
<%def name="tag_helper(requirement)">
% if not c.sponsor_filter:
% if not c.sponsor_filter:
<dt id="${requirement.tag}">${ requirement.label } (${ h.tags.link_to( _('Filter'), h.url.current(action='
toggle
', t
ag
=requirement.tag)) })</dt>
<dt id="${requirement.tag}">${ requirement.label } (${ h.tags.link_to( _('Filter'), h.url.current(action='
index
', t=requirement.tag)) })</dt>
<dd>${ requirement.long_description | n}</dd>
<dd>${ requirement.long_description | n}</dd>
% elif requirement.tag not in c.sponsor_filter:
% elif requirement.tag not in c.sponsor_filter:
<dt><span id="${requirement.tag}" style="text-decoration: line-through;">${ requirement.label }</span> (${ h.tags.link_to( _('Add to filter'), h.url.current(action='toggle', tag=requirement.tag)) })</dt>
<%
new_tag_list = c.sponsor_filter[:]
new_tag_list.append(requirement.tag)
%>
<dt><span id="${requirement.tag}" style="text-decoration: line-through;">${ requirement.label }</span> (${ h.tags.link_to( _('Add to filter'), h.url.current(action='index', t=new_tag_list)) })</dt>
% else:
% else:
<dt id="${requirement.tag}">${ requirement.label } (${ h.tags.link_to( _('Remove filter'), h.url.current(action='toggle', tag=requirement.tag)) })</dt>
<%
new_tag_list = c.sponsor_filter[:]
new_tag_list.remove(requirement.tag)
%>
<dt id="${requirement.tag}">${ requirement.label } (${ h.tags.link_to( _('Remove filter'), h.url.current(action='index', t=new_tag_list)) })</dt>
<dd>${ requirement.long_description | n}</dd>
<dd>${ requirement.long_description | n}</dd>
% endif
% endif
</%def>
</%def>
...
@@ -94,6 +102,7 @@ To help you find a sponsor interested in your package, they can formulate sponso
...
@@ -94,6 +102,7 @@ To help you find a sponsor interested in your package, they can formulate sponso
% for filter in c.sponsor_filter:
% for filter in c.sponsor_filter:
${ filter }
${ filter }
% endfor
% endfor
- ${ h.tags.link_to( _('Store filter as default'), h.url('sponsor_tag_save', t=c.sponsor_filter)) }
- ${ h.tags.link_to( _('Remove all filters'), h.url.current(action='clear')) }
- ${ h.tags.link_to( _('Remove all filters'), h.url.current(action='clear')) }
% endif
% endif
</p>
</p>
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment