def get_items(self, resource, context): # Keep the query parameters schema = context.view.get_query_schema() params = encode_query(context.query, schema) return [ {'title': MSG(u'Download "Last Att." images as one Zip'), 'href': ';zip?%s' % params} ] + TrackerViewMenu.get_items(self, resource, context)
def action_diff(self, resource, context, form): # Take newer and older revisions, even if many selected ids = sorted(form['ids']) # Each item is a (index, revision) tuple revision = ids.pop()[1] to = ids.pop(0)[1] if ids else 'HEAD' # FIXME same hack than rename to call a GET from a POST query = encode_query({'revision': revision, 'to': to}) uri = '%s/;changes?%s' % (context.get_link(resource), query) return get_reference(uri)
def get_tags_namespace(self, context): tags_folder = self.get_site_root().get_resource('tags') # query query = encode_query(context.uri.query) tags = [] for tag_name in self.get_property('tags'): tag = tags_folder.get_resource(tag_name) href = context.get_link(tag) if query: href = '%s?%s' % (href, query) tags.append({'title': tag.get_title(), 'href': href}) return tags
def get_tags_namespace(self, context): tags_folder = self.get_site_root().get_resource("tags") ac = tags_folder.get_access_control() # query query = encode_query(context.uri.query) tags = [] for tag_name in self.get_property("tags"): tag = tags_folder.get_resource(tag_name) # Check ACL if ac.is_allowed_to_view(context.user, tag) is False: continue href = context.get_link(tag) if query: href = "%s?%s" % (href, query) tags.append({"title": tag.get_title(), "href": href}) return tags
def test_query(self): input = 'a&a' output = encode_query(decode_query(input)) self.assertEqual(output, input)
def get_namespace(self, resource, context): tags_folder = self._get_tags_folder(resource, context) # description (help text) bo_description = False ac = tags_folder.get_access_control() if ac.is_allowed_to_edit(context.user, tags_folder): if is_navigation_mode(context) is False and \ self.show_description and \ type(context.resource) is type(tags_folder): bo_description = True tag_brains = tags_folder.get_tag_brains(context) tag_base_link = '%s/%%s' % context.get_link(tags_folder) if self.formats: query = {'format': self.formats} tag_base_link = '%s?%s' % (tag_base_link, encode_query(query)) # query root = context.root tags_query = tags_folder.get_tags_query_terms(state='public', formats=self.formats) tags_results = root.search(AndQuery(*tags_query)) items_nb = [] tags = [] for brain in tag_brains: if self.tags_to_show and len(items_nb) == self.tags_to_show: break sub_results = tags_results.search(PhraseQuery('tags', brain.name)) nb_items = len(sub_results) if nb_items: d = {} title = brain.title or brain.name if self.show_number: title = u'%s (%s)' % (title, nb_items) d['title'] = title d['xml_title'] = title.replace(u' ', u'\u00A0') d['link'] = tag_base_link % brain.name d['css'] = None items_nb.append(nb_items) d['nb_items'] = nb_items tags.append(d) if not tags: return {'tags': [], 'bo_description': bo_description} max_items_nb = max(items_nb) if items_nb else 0 min_items_nb = min(items_nb) if items_nb else 0 css_index_max = self.css_index_max delta = (max_items_nb - min_items_nb) or 1 percentage_per_item = float(css_index_max - 1) / delta # Special case of there is only one item default_css = 'tag-1' for tag in tags: if min_items_nb == max_items_nb: tag['css'] = default_css else: nb_items = tag['nb_items'] css_index = int(ceil(nb_items) * percentage_per_item) or 1 # FIXME sometimes css_index = 0, this should never append # set css_index to 1 css_index = abs(css_index_max - css_index + 1) or 1 tag['css'] = 'tag-%s' % css_index # Random if self.random_tags: shuffle(tags) return {'tags': tags, 'bo_description': bo_description}