예제 #1
0
    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"))
예제 #2
0
    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)
예제 #3
0
    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"")
예제 #4
0
    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
예제 #5
0
 def disable_user_controls(event):
     if context.get("sending_email", False):
         event.output["show_user_controls"] = False
예제 #6
0
 def disable_user_controls(event):
     if context.get("exporting_static_site", False):
         event.output["show_user_controls"] = False
예제 #7
0
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