AnonSec Shell
Server IP : 54.36.91.62  /  Your IP : 216.73.217.112
Web Server : Apache
System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : coopiak ( 151928)
PHP Version : 8.3.23
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/coopiak/amisdesseniors-fr/aix/plugins/privacy/kunena/src/Extension/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/aix/plugins/privacy/kunena/src/Extension/Kunena.php
<?php

/**
 * Kunena Privacy Plugin
 *
 * @package         Kunena.Plugins
 * @subpackage      Privacy
 *
 * @copyright       Copyright (C) 2023 - 2025 Kunena Team. All rights reserved.
 * @license         https://www.gnu.org/copyleft/gpl.html GNU/GPL
 * @link            https://www.kunena.org
 **/

namespace Kunena\Forum\Plugin\Privacy\Kunena\Extension;

// No direct access
\defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\CMS\User\User;
use Joomla\Component\Privacy\Administrator\Export\Domain;
use Joomla\Component\Privacy\Administrator\Plugin\PrivacyPlugin;
use Joomla\Component\Privacy\Administrator\Removal\Status;
use Joomla\Component\Privacy\Administrator\Table\RequestTable;
use Joomla\Database\ParameterType;
use Kunena\Forum\Plugin\Privacy\Kunena\Helper\KunenaHelper;

/**
 * Plug-in to prevent Registering with Disposable Email Addresses
 *
 * @since  6.1.0
 */
class Kunena extends PrivacyPlugin
{
    /**
     * Application object
     *
     * @var    CMSApplicationInterface
     * @since  6.1.0
     */
    protected $app;

    /**
     * Performs validation to determine if the data associated with a remove information request can be processed
     *
     * This event will not allow a super user account to be removed
     *
     * @param   RequestTable  $request  The request record being processed
     * @param   User          $user     The user account associated with this request if available
     *
     * @return  Status
     *
     * @since   6.1.0
     */
    public function onPrivacyCanRemoveData(RequestTable $request, User $user = null)
    {
        $status = new Status();

        if (!$user) {
            return $status;
        }

        if ($user->authorise('core.admin')) {
            $status->canRemove = false;
            $status->reason    = Text::_('PLG_PRIVACY_USER_ERROR_CANNOT_REMOVE_SUPER_USER');
        }

        return $status;
    }

    /**
     * Processes an export request for Kunena user data
     *
     * This event will collect data for the following Kunena tables:
     *
     * - #__kunena_announcement
     * - #__kunena_attachments
     * - #__kunena_logs
     * - #__kunena_messages > #__kunena_messages_text
     * - #__kunena_polls_users > #__kunena_polls
     * - #__kunena_private
     * - #__kunena_rate
     * - #__kunena_thankyou
     * - #__kunena_topics
     * - #__kunena_users
     * - #__kunena_user_banned
     *
     * @param   RequestTable  $request  The request record being processed
     * @param   User          $user     The user account associated with this request if available
     *
     * @return  \Joomla\Component\Privacy\Administrator\Export\Domain[]
     *
     * @since   6.1.0
     */
    public function onPrivacyExportRequest(RequestTable $request, User $user = null)
    {
        if (!$user) {
            return [];
        }

        $domains = [];
        $domains[] = $this->createKunenaUserDomain($user->id);
        $domains[] = $this->createKunenaAnnouncementDomain($user->id);
        $domains[] = $this->createKunenaAttachmentsDomain($user->id);
        $domains[] = $this->createKunenaLogsDomain($user->id);
        $domains[] = $this->createKunenaMessagesDomain($user->id);
        $domains[] = $this->createKunenaPollsDomain($user->id);
        $domains[] = $this->createKunenaPrivateDomain($user->id);
        $domains[] = $this->createKunenaRateDomain($user->id);
        $domains[] = $this->createKunenaThankyouDomain($user->id);
        $domains[] = $this->createKunenaTopicsDomain($user->id);
        $domains[] = $this->createKunenaUserbannedDomain($user->id);

        return $domains;
    }

    /**
     * Removes the data associated with a remove information request
     *
     * This event will pseudoanonymise the user data
     *
     * @param   RequestTable  $request  The request record being processed
     * @param   User          $user     The user account associated with this request if available
     *
     * @return  void
     *
     * @since   6.1.0
     */
    public function onPrivacyRemoveData(RequestTable $request, User $user = null)
    {
        // This plugin only processes data for registered user accounts
        if (!$user) {
            return;
        }

        $anonymizedname = 'User ID ' . $user->id;

        // Anomynize User name in messages
        KunenaHelper::anomynizeUserData('#__kunena_messages', 'userid', $user->id, 'name', $anonymizedname);
        KunenaHelper::anomynizeUserData('#__kunena_messages', 'userid', $user->id, 'ip', '');

        // Anomynize User name in topics
        KunenaHelper::anomynizeUserData('#__kunena_topics', 'first_post_userid', $user->id, 'first_post_guest_name', $anonymizedname);
        KunenaHelper::anomynizeUserData('#__kunena_topics', 'last_post_userid', $user->id, 'last_post_guest_name', $anonymizedname);

        // Delete Kunena User Profile
        KunenaHelper::deleteUserData('#__kunena_users', 'userid', $user->id);

        // Delete User Category / Topic subscriptions, User Topic / Message Read status
        KunenaHelper::deleteUserData('#__kunena_user_categories', 'user_id', $user->id);
        KunenaHelper::deleteUserData('#__kunena_user_topics', 'user_id', $user->id);
        KunenaHelper::deleteUserData('#__kunena_user_read', 'user_id', $user->id);

        // Delete miscelanious
        KunenaHelper::deleteUserData('#__kunena_logs', 'user_id', $user->id);
        KunenaHelper::deleteUserData('#__kunena_logs', 'target_user', $user->id);
        KunenaHelper::deleteUserData('#__kunena_rate', 'userid', $user->id);
        KunenaHelper::deleteUserData('#__kunena_thankyou', 'userid', $user->id);
        KunenaHelper::deleteUserData('#__kunena_thankyou', 'targetuserid', $user->id);
        KunenaHelper::deleteUserData('#__kunena_users_banned', 'userid', $user->id);
    }

    /**
     * Adds the Kunena Privacy Information to Joomla Privacy plugin.
     *
     * @return  array
     *
     * @since   6.1.0
     */
    public function onPrivacyCollectAdminCapabilities(): array
    {
        return [
            'Kunena Privacy' => [
                Text::_('PLG_PRIVACY_KUNENA_CAPABILITY_EMAIL'),
                Text::_('PLG_PRIVACY_KUNENA_CAPABILITY_IP_ADDRESS'),
                Text::_('PLG_PRIVACY_KUNENA_CAPABILITY_USERPROFILE'),
                Text::_('PLG_PRIVACY_KUNENA_CAPABILITY_POSTS'),
                Text::_('PLG_PRIVACY_KUNENA_CAPABILITY_RATINGS'),
                Text::_('PLG_PRIVACY_KUNENA_CAPABILITY_STATISTICS'),
                Text::_('PLG_PRIVACY_KUNENA_CAPABILITY_COOKIES'),
                Text::_('PLG_PRIVACY_KUNENA_CAPABILITY_LOGS'),
                Text::_('PLG_PRIVACY_KUNENA_CAPABILITY_SOCIAL'),
            ],
        ];
    }

    /**
     * Create the domain for the user data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaUserDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user', 'kunena_user_data');
        $redacted = [];
        $excluded = [];
        $item     = KunenaHelper::getUserItems('#__kunena_users', 'userid', $userid, true);
        $data     = KunenaHelper::processUserData($item, $excluded, $redacted);

        $domain->addItem($this->createItemFromArray($data, $userid));

        return $domain;
    }

    /**
     * Create the domain for the user announcement data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaAnnouncementDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_announcement', 'kunena_user_announcement_data');
        $redacted = [];
        $excluded = [];
        $items    = KunenaHelper::getUserItems('#__kunena_announcement', 'created_by', $userid);

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['id']));
        }

        return $domain;
    }

    /**
     * Create the domain for the user attachments data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaAttachmentsDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_attachments', 'kunena_user_attachments_data');
        $redacted = [];
        $excluded = [];
        $items    = KunenaHelper::getUserItems('#__kunena_attachments', 'userid', $userid);

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['id']));
        }

        return $domain;
    }

    /**
     * Create the domain for the user logs data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaLogsDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_logs', 'kunena_user_logs_data');
        $redacted = [];
        $excluded = [];
        $items    = KunenaHelper::getUserItems('#__kunena_logs', 'user_id', $userid);

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['id']));
        }

        return $domain;
    }

    /**
     * Create the domain for the user messages data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaMessagesDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_messages', 'kunena_user_messages_data');
        $db       = $this->db;
        $redacted = [];
        $excluded = [];

        $query = $db->createQuery()
            ->select(['m.*', 't.message'])
            ->from($db->quoteName('#__kunena_messages', 'm'))
            ->join('LEFT', $db->quoteName('#__kunena_messages_text', 't') . ' ON ' . $db->quoteName('m.id') . ' = ' . $db->quoteName('t.mesid'))
            ->where($db->quoteName('m.userid') . ' = :userid')
            ->bind(':userid', $userid, ParameterType::INTEGER);

        $items = $db->setQuery($query)->loadAssocList();

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['id']));
        }

        return $domain;
    }

    /**
     * Create the domain for the user polls data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaPollsDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_polls', 'kunena_user_polls_data');
        $db       = $this->db;
        $redacted = [];
        $excluded = [];

        $query = $db->createQuery()
            ->select(['u.*', 'p.title'])
            ->from($db->quoteName('#__kunena_polls_users', 'u'))
            ->join('LEFT', $db->quoteName('#__kunena_polls', 'p') . ' ON ' . $db->quoteName('u.pollid') . ' = ' . $db->quoteName('p.id'))
            ->where($db->quoteName('u.userid') . ' = :userid')
            ->bind(':userid', $userid, ParameterType::INTEGER);

        $items = $db->setQuery($query)->loadAssocList();

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['id']));
        }

        return $domain;
    }

    /**
     * Create the domain for the user private data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaPrivateDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_private', 'kunena_user_private_data');
        $redacted = [];
        $excluded = ['params'];
        $items    = KunenaHelper::getUserItems('#__kunena_private', 'author_id', $userid);

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['id']));
        }

        return $domain;
    }

    /**
     * Create the domain for the user rate data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaRateDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_rate', 'kunena_user_rate_data');
        $redacted = [];
        $excluded = [];
        $items    = KunenaHelper::getUserItems('#__kunena_rate', 'userid', $userid);

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['id']));
        }

        return $domain;
    }

    /**
     * Create the domain for the user thankyou data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaThankyouDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_thankyou', 'kunena_user_thankyou_data');
        $redacted = [];
        $excluded = ['targetuserid'];
        $items    = KunenaHelper::getUserItems('#__kunena_thankyou', 'userid', $userid);

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['postid']));
        }

        return $domain;
    }

    /**
     * Create the domain for the user topics data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaTopicsDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_topics', 'kunena_user_topics_data');
        $redacted = [];
        $excluded = ['first_post_message', 'last_post_message', 'last_post_userid', 'last_post_guest_name', 'params'];
        $items    = KunenaHelper::getUserItems('#__kunena_topics', 'first_post_userid', $userid);

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['id']));
        }

        return $domain;
    }

    /**
     * Create the domain for the user banned data
     *
     * @param   int  $userid  The User ID
     *
     * @return  Domain
     *
     * @since   6.1.0
     */
    private function createKunenaUserbannedDomain(int $userid)
    {
        $domain   = $this->createDomain('kunena_user_banned', 'kunena_user_banned_data');
        $redacted = [];
        $excluded = ['created_by', 'reason_private', 'modified_by', 'modified_time', 'params'];
        $items    = KunenaHelper::getUserItems('#__kunena_users_banned', 'userid', $userid);

        foreach ($items as $item) {
            $data = KunenaHelper::processUserData($item, $excluded, $redacted);

            $domain->addItem($this->createItemFromArray($data, $data['id']));
        }

        return $domain;
    }
}

Anon7 - 2022
AnonSec Team