def adapt_object(self, context): context.consume("upload") upload = context.get("upload", None) if upload: context.set("file_name", schema.get(upload, "file_name")) context.set("mime_type", schema.get(upload, "mime_type")) context.set("file_size", schema.get(upload, "file_size")) context.set("file_hash", schema.get(upload, "file_hash"))
def is_available(self, context, target): # Prevent action nesting edit_stacks_manager = \ controller_context.get("edit_stacks_manager") if edit_stacks_manager: edit_stack = edit_stacks_manager.current_edit_stack if edit_stack: for node in edit_stack[:-1]: if isinstance(node, EditNode) \ and node.item is target: return False return UserAction.is_available(self, context, target)
def translate_uri(self, path=None, language=None): current_language = get_language() if language is None: language = current_language if path is None: is_current_publishable = True path = cherrypy.request.path_info qs = cherrypy.request.query_string else: is_current_publishable = False qs = u"" if isinstance(path, str): path = try_decode(path) if isinstance(qs, str): qs = try_decode(qs) if is_current_publishable and language != current_language: publishable = context.get("original_publishable") \ or context["publishable"] current_uri = publishable.get_uri(language=current_language, encode=False) translation_uri = publishable.get_uri(language=language) path = path.replace(current_uri, translation_uri) else: path_components = path.strip("/").split("/") if (path_components and path_components[0] in Configuration.instance.languages): path_components.pop(0) path_components.insert(0, self.language_to_uri_component(language)) path = u"/" + u"/".join(path_components) return path + (u"?" + qs if qs else u"")
def is_available(self, context, target): if UserAction.is_available(self, context, target): if isinstance(target, type): content_type = target else: content_type = type(target) # Prevent action nesting edit_stacks_manager = \ controller_context.get("edit_stacks_manager") if edit_stacks_manager: edit_stack = edit_stacks_manager.current_edit_stack if edit_stack: for node in edit_stack: if isinstance(node, EditBlocksNode) \ and node.item is target: return False return type_is_block_container(content_type) return False
def disable_user_controls(event): if context.get("sending_email", False): event.output["show_user_controls"] = False
def disable_user_controls(event): if context.get("exporting_static_site", False): event.output["show_user_controls"] = False
class GoogleAnalyticsExtension(Extension): def __init__(self, **values): Extension.__init__(self, **values) self.extension_author = u"Whads/Accent SL" self.set("description", u"""Integra el lloc web amb Google Analytics.""", "ca") self.set("description", u"""Integra el sitio web con Google Analytics.""", "es") self.set("description", u"""Integrates the site with Google Analytics.""", "en") def _load(self): from woost.extensions.googleanalytics import (strings, configuration, website, document, eventredirection) from cocktail.events import when from woost.controllers import CMSController @when(CMSController.producing_output) def handle_producing_output(e): publishable = e.output.get("publishable") if (publishable is None or getattr( publishable, "is_ga_tracking_enabled", lambda: True)()): html = e.output.get("head_end_html", "") if html: html += " " html += self.get_analytics_page_hit_script(publishable) e.output["head_end_html"] = html inclusion_code = { "ga.js-async": """ <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', '%(account)s']); %(commands)s (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> """, "ga.js-sync": """ <script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script> <script type="text/javascript"> _gaq.push(['_setAccount', '%(account)s']); %(commands)s </script> """, "universal-async": """ <script type="text/javascript"> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga("create", "%(account)s"); %(commands)s </script> """, "universal-sync": """ <script type="text/javascript"> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga("create", "%(account)s"); ga(function () { %(commands)s }); </script> """, } declaring_tracker = Event() def get_analytics_script(self, publishable=None, commands=None, async=True): config = Configuration.instance api = config.google_analytics_api classic_api = (api == "ga.js") if publishable is None: publishable = context.get("publishable") event = self.declaring_tracker( api=api, publishable=publishable, account=config.get_setting("google_analytics_account"), template=self.inclusion_code[api + ("-async" if async else "-sync")], values=None if classic_api else self.get_analytics_values(publishable), commands=commands or []) parameters = {"account": event.account} if classic_api: parameters["commands"] = \ self._serialize_ga_commands(event.commands) else: commands = event.commands if event.values: commands.insert(0, ("set", event.values)) parameters["commands"] = \ self._serialize_universal_commands(commands) return event.template % parameters