Esempio n. 1
0
def check_result_table():
    gs = GlobalSettings()
    res = gs.settings.update_check_result
    if not res:
        return {"error": "no_result"}

    if "error" in res:
        return res

    table = []
    table.append(
        (
            "pretalx",
            pretalx_version,
            res["version"]["latest"],
            res["version"]["updatable"],
        )
    )
    for p in get_all_plugins():
        if p.module in res["plugins"]:
            pdata = res["plugins"][p.module]
            table.append(
                (
                    _("Plugin: {}").format(p.name),
                    p.version,
                    pdata["latest"],
                    pdata["updatable"],
                )
            )
        else:
            table.append((_("Plugin: {}").format(p.name), p.version, "?", False))

    return table
Esempio n. 2
0
    def post(self, request, *args, **kwargs):
        plugins_available = {
            p.module
            for p in get_all_plugins(self.request.event)
            if not p.name.startswith(".") and getattr(p, "visible", True)
        }

        with transaction.atomic():
            for key, value in request.POST.items():
                if key.startswith("plugin:"):
                    module = key.split(":", maxsplit=1)[1]
                    if value == "enable" and module in plugins_available:
                        self.request.event.enable_plugin(module)
                        self.request.event.log_action(
                            "pretalx.event.plugins.enabled",
                            person=self.request.user,
                            data={"plugin": module},
                            orga=True,
                        )
                    else:
                        self.request.event.disable_plugin(module)
                        self.request.event.log_action(
                            "pretalx.event.plugins.disabled",
                            person=self.request.user,
                            data={"plugin": module},
                            orga=True,
                        )
            self.request.event.save()
            messages.success(self.request, _("Your changes have been saved."))
        return redirect(self.request.event.orga_urls.plugins)
Esempio n. 3
0
    def post(self, request, *args, **kwargs):
        from pretalx.common.plugins import get_all_plugins

        plugins_active = self.request.event.get_plugins()
        plugins_available = {
            p.module: p for p in get_all_plugins()
            if not p.name.startswith('.') and getattr(p, 'visible', True)
        }

        with transaction.atomic():
            for key, value in request.POST.items():
                if key.startswith("plugin:"):
                    module = key.split(":", maxsplit=1)[1]
                    if value == "enable" and module in plugins_available:
                        if hasattr(plugins_available[module].app, 'installed'):
                            getattr(plugins_available[module].app, 'installed')(self.request.event)

                        self.request.event.log_action('pretalx.event.plugins.enabled', person=self.request.user, data={'plugin': module}, orga=True)
                        if module not in plugins_active:
                            plugins_active.append(module)
                    else:
                        self.request.event.log_action('pretalx.event.plugins.disabled', person=self.request.user, data={'plugin': module}, orga=True)
                        if module in plugins_active:
                            plugins_active.remove(module)
            self.request.event.plugins = ','.join(plugins_active)
            self.request.event.save()
            messages.success(self.request, _('Your changes have been saved.'))
        return redirect(self.request.event.orga_urls.plugins)
Esempio n. 4
0
 def get_context_data(self, *args, **kwargs) -> dict:
     from pretalx.common.plugins import get_all_plugins
     context = super().get_context_data(*args, **kwargs)
     context['plugins'] = [
         p for p in get_all_plugins() if not p.name.startswith('.')
     ]
     context['plugins_active'] = self.request.event.get_plugins()
     return context
Esempio n. 5
0
def update_check():
    gs = GlobalSettings()

    if not gs.settings.update_check_enabled:
        return

    if not gs.settings.update_check_id:
        gs.settings.set("update_check_id", uuid.uuid4().hex)

    if "runserver" in sys.argv:
        gs.settings.set("update_check_last", now())
        gs.settings.set("update_check_result", {"error": "development"})
        return

    check_payload = {
        "id":
        gs.settings.update_check_id,
        "version":
        pretalx_version,
        "events": {
            "total": Event.objects.count(),
            "public": Event.objects.filter(is_public=True).count(),
        },
        "plugins": [{
            "name": p.module,
            "version": p.version
        } for p in get_all_plugins()],
    }
    try:
        response = requests.post(
            "https://pretalx.com/.update_check/",
            json=check_payload,
        )
    except requests.RequestException:
        gs.settings.set("update_check_last", now())
        gs.settings.set("update_check_result", {"error": "unavailable"})
        return

    gs.settings.set("update_check_last", now())
    if response.status_code != 200:
        gs.settings.set("update_check_result", {"error": "http_error"})
        return

    rdata = response.json()
    update_available = rdata["version"]["updatable"] or any(
        p["updatable"] for p in rdata["plugins"].values())
    gs.settings.set("update_check_result_warning", update_available)
    if update_available and rdata != gs.settings.update_check_result:
        send_update_notification_email()
    gs.settings.set("update_check_result", rdata)
Esempio n. 6
0
    def set_active_plugins(self, modules):
        from pretalx.common.plugins import get_all_plugins

        plugins_active = self.get_plugins()
        plugins_available = {
            p.module: p
            for p in get_all_plugins(self)
            if not p.name.startswith('.') and getattr(p, 'visible', True)
        }

        enable = set(modules) & (set(plugins_available) - set(plugins_active))

        for module in enable:
            if hasattr(plugins_available[module].app, 'installed'):
                getattr(plugins_available[module].app, 'installed')(self)

        self.plugins = ",".join(modules)
Esempio n. 7
0
    def plugin_list(self, modules: list) -> None:
        from pretalx.common.plugins import get_all_plugins

        plugins_active = set(self.plugin_list)
        plugins_available = {
            p.module: p
            for p in get_all_plugins(self)
            if not p.name.startswith(".") and getattr(p, "visible", True)
        }

        enable = set(modules) & (set(plugins_available) - plugins_active)
        disable = plugins_active - set(modules)

        for module in enable:
            with suppress(Exception):
                plugins_available[module].app.installed(self)
        for module in disable:
            with suppress(Exception):
                plugins_available[module].app.uninstalled(self)

        self.plugins = ",".join(modules)
Esempio n. 8
0
 def plugins(self):
     return [
         p for p in get_all_plugins(self.request.event)
         if not p.name.startswith(".") and getattr(p, "visible", True)
     ]
Esempio n. 9
0
def test_get_all_plugins():
    assert PluginApp.PretalxPluginMeta in get_all_plugins(), get_all_plugins()
Esempio n. 10
0
def test_get_all_plugins_with_event(event, expected):
    assert (PluginApp.PretalxPluginMeta in get_all_plugins(event)) is expected