Sindbad~EG File Manager

Current Path : /var/www/ispania.gr/plugins/privacy/rsdirectory/
Upload File :
Current File : /var/www/ispania.gr/plugins/privacy/rsdirectory/rsdirectory.php

<?php
/**
 * @package	RSDirectory!
 * @copyright	(c) 2013 - 2021 RSJoomla!
 * @link		https://www.rsjoomla.com
 * @license	GNU General Public License http://www.gnu.org/licenses/gpl-3.0.en.html
 */

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

use Joomla\Utilities\ArrayHelper;
use Joomla\CMS\Language\Text;

if (version_compare(JVERSION, '5.0', '>=') && !class_exists('PrivacyPlugin'))
{
	JLoader::registerAlias('PrivacyPlugin', '\\Joomla\\Component\\Privacy\\Administrator\\Plugin\\PrivacyPlugin', '5.0');
	JLoader::registerAlias('PrivacyRemovalStatus', '\\Joomla\\Component\\Privacy\\Administrator\\Removal\\Status', '5.0');
}
else
{
	JLoader::register('PrivacyPlugin', JPATH_ADMINISTRATOR . '/components/com_privacy/helpers/plugin.php');
	JLoader::register('PrivacyRemovalStatus', JPATH_ADMINISTRATOR . '/components/com_privacy/helpers/removal/status.php');
}

/**
 * RSDirectory! Privacy Plugin.
 */
class PlgPrivacyRsdirectory extends PrivacyPlugin
{
	const EXTENSION = 'plg_privacy_rsdirectory';

	/**
	 * Can the plugin run?
	 *
	 * @access public
	 *
	 * @return bool
	 */
	public function canRun()
	{
		return file_exists(JPATH_ADMINISTRATOR . '/components/com_rsdirectory/helpers/rsdirectory.php');
	}

	/**
	 * 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   PrivacyTableRequest  $request  The request record being processed
	 * @param   JUser                $user     The user account associated with this request if available
	 *
	 * @return  PrivacyRemovalStatus
	 *
	 * @since   3.9.0
	 */
	public function onPrivacyCanRemoveData(PrivacyTableRequest $request, JUser $user = null)
	{
		$status = new PrivacyRemovalStatus;

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

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

		return $status;
	}

	/**
	 * Function that retrieves the information for the RSDirectory Component Capabilities
	 * @return array
	 *
	 */
	public function onPrivacyCollectAdminCapabilities()
	{
		if (!$this->canRun())
		{
			return array();
		}

		$capabilities = array(
			Text::_('PLG_PRIVACY_RSDIRECTORY_CAPABILITIES_GENERAL') => array(
				Text::_('PLG_PRIVACY_RSDIRECTORY_CAPABILITIES_ENTRIES'),
				Text::_('PLG_PRIVACY_RSDIRECTORY_CAPABILITIES_REPORTED_ENTRIES'),
				Text::_('PLG_PRIVACY_RSDIRECTORY_CAPABILITIES_REVIEWED_ENTRIES'),
				Text::_('PLG_PRIVACY_RSDIRECTORY_CAPABILITIES_TRANSACTIONS'),
				Text::_('PLG_PRIVACY_RSDIRECTORY_CAPABILITIES_RECAPTCHA'),
			)
		);

		return $capabilities;
	}
	/**
	 *
	 * @param   PrivacyTableRequest  $request  The request record being processed
	 * @param   JUser                $user     The user account associated with this request if available
	 *
	 * @return  PrivacyExportDomain[]
	 *
	 * @since   3.9.0
	 */
	public function onPrivacyExportRequest(PrivacyTableRequest $request, JUser $user = null)
	{
		if (!$this->canRun())
		{
			return array();
		}

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

		/** @var JTableUser $userTable */
		$userTable = JUser::getTable();
		$userTable->load($user->id);

		$domains = array();
		$domains[] = $this->createUserEntriesDomain($userTable);
		$domains[] = $this->createUserEntriesReportedDomain($userTable);
		$domains[] = $this->createUserReviewsDomain($userTable);

		return $domains;
	}

	/**
	 * Removes the data associated with a remove information request
	 *
	 * This event will pseudoanonymise the user account
	 *
	 * @param   PrivacyTableRequest  $request  The request record being processed
	 * @param   JUser                $user     The user account associated with this request if available
	 *
	 * @return  void
	 *
	 * @since   3.9.0
	 */
	public function onPrivacyRemoveData(PrivacyTableRequest $request, JUser $user = null)
	{
		if (!$this->canRun())
		{
			return;
		}

		// This plugin only processes data for registered user accounts
		if (!$user)
		{
			return;
		}

        // Anonymise data
		JFactory::getLanguage()->load('com_rsdirectory', JPATH_ADMINISTRATOR);
        require_once JPATH_ADMINISTRATOR . '/components/com_rsdirectory/helpers/rsdirectory.php';
        RSDirectoryHelper::anonymise($user->id, 0);
	}


	/**
	 * Create the domain for the entries list
	 *
	 * @param   JTableUser  $user  The JTableUser object to process
	 *
	 * @return  PrivacyExportDomain
	 *
	 * @since   3.9.0
	 */
	private function createUserEntriesDomain(JTableUser $user)
	{
		$domain = $this->createDomain('user_rsdirectory_entries', 'rsdirectory_entries_list');

		$query = $this->db->getQuery(true)
			->select('id')
			->from($this->db->qn('#__rsdirectory_entries'))
			->where($this->db->qn('user_id') . ' = '. $this->db->quote($user->id));

		$items = $this->db->setQuery($query)->loadColumn();

		// build the ids
		if (!empty($items)) {
			$items = RSDirectoryHelper::getEntriesObjectListByIds($items);

			foreach ($items as $item) {
				$form_fields = $this->getFormFields($item->form_id);

				// convert to array first
				if (!is_array($item)) {
					$item = (array)$item;
				}

				if (isset($form_fields['names']) && !empty($form_fields['names'])) {
					foreach ($form_fields['names'] as $column_name => $actual_name) {
						// Normal fields
						if (isset($item[$column_name])) {
							$item[$actual_name] = $item[$column_name];
							unset($item[$column_name]);
							continue;
						}

						// Map fields
						if (isset($item[$column_name . '_address'])) {
							$item[$actual_name . '_address'] = $item[$column_name . '_address'];
							unset($item[$column_name . '_address']);
						}

						if (isset($item[$column_name . '_lat'])) {
							$item[$actual_name . '_lat'] = $item[$column_name . '_lat'];
							unset($item[$column_name . '_lat']);
						}

						if (isset($item[$column_name . '_lng'])) {
							$item[$actual_name . '_lng'] = $item[$column_name . '_lng'];
							unset($item[$column_name . '_lng']);
						}
					}
				}

				// try and find the 'images', 'images_upload', 'fileupload'
				if (isset($form_fields['images']) && (!empty($form_fields['images']) || empty($form_fields['images_upload']) || empty($form_fields['fileupload']))) {
					// retrieve all the images and files
					$files_list = RSDirectoryHelper::getFilesObjectList(0, $item['id']);

					$images = array();
					$images_uploads = array();
					$fileuploads = array();

					foreach ($files_list as $file) {
						// remove unnecessary stuff
						unset($file->id);
						unset($file->user_id);
						unset($file->hash);
						unset($file->file_id);
						unset($file->entry_id);
						unset($file->ordering);

						// build the path to the original file
						$file->path = JUri::root()."/components/com_rsdirectory/files/entries/".$item['id']."/".$file->file_name;

						if (!empty($form_fields['images'])) {
							foreach ($form_fields['images'] as $images_field) {
								if (!isset($images[$images_field->name])) {
									$images[$images_field->name] = array();
								}

								if ($file->field_id == $images_field->id) {
									unset($file->field_id);
									$images[$images_field->name][] = $file;
									continue 2;
								}
							}
						}


						if (!empty($form_fields['images_upload'])) {
							foreach ($form_fields['images_upload'] as $images_upload_field) {
								if (!isset($images_uploads[$images_upload_field->name])) {
									$images_uploads[$images_upload_field->name] = array();
								}

								if ($file->field_id == $images_upload_field->id) {
									unset($file->field_id);
									$images_uploads[$images_upload_field->name][] = $file;
									continue 2;
								}
							}
						}


						if (!empty($form_fields['fileuploads'])) {
							foreach ($form_fields['fileuploads'] as $upload_field) {
								if (!isset($fileuploads[$upload_field->name])) {
									$fileuploads[$upload_field->name] = array();
								}

								if ($file->field_id == $upload_field->id) {
									unset($file->field_id);
									$fileuploads[$upload_field->name][] = $file;
									continue 2;
								}
							}
						}
					}

					if (!empty($images)) {
						$item['entry_images'] = json_encode($images);
					}
					if (!empty($images_uploads)) {
						$item['entry_images_upload'] = json_encode($images_uploads);
					}
					if (!empty($fileuploads)) {
						$item['entry_fileuploads'] = json_encode($fileuploads);
					}

				}

				// clean a bit the output of old "f_" that are not used in the form and are empty
				foreach ($item as $key => $value) {
					$value = trim($value);
					if (strpos($key, 'f_') === 0 && empty($value)) {
						unset($item[$key]);
					}
				}

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

		return $domain;
	}

	protected static function getFormFields($form_id) {
		static $fields = array();
		if (!isset($fields[$form_id])) {
			// get all the fields
			$form_fields =  RSDirectoryHelper::getFormFields($form_id);

			// retrieve only the column name and the proper name value of the field
			$data = array(
				'names' => array(),
				'images' => array(),
				'images_upload' => array(),
				'fileuploads' => array(),
			);

			// add the images
			$data['images'] 		= RSDirectoryHelper::findFormField('images', $form_fields, false);
			$data['images_upload'] 	= RSDirectoryHelper::findFormField('image_upload', $form_fields, false);
			$data['fileuploads'] 	= RSDirectoryHelper::findFormField('fileupload', $form_fields, false);

			foreach ($form_fields as $field) {
				if (!empty($field->column_name) && strpos($field->column_name, 'f_') === 0) {
					$data['names'][$field->column_name] = $field->name;
				}
			}
			$fields[$form_id] = $data;
		}

		return $fields[$form_id];
	}

	/**
	 * Create the domain for the reported entries list
	 *
	 * @param   JTableUser  $user  The JTableUser object to process
	 *
	 * @return  PrivacyExportDomain
	 *
	 * @since   3.9.0
	 */
	private function createUserEntriesReportedDomain(JTableUser $user)
	{
		$domain = $this->createDomain('user_rsdirectory_reported_entries', 'rsdirectory_reported_entries_list');

		$query = $this->db->getQuery(true)
			->select('*')
			->from($this->db->qn('#__rsdirectory_entries_reported'))
			->where($this->db->qn('user_id') . ' = '. $this->db->quote($user->id));

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

		if (!empty($items)) {
			// Remove user ID columns
			foreach (array('user_id') as $column) {
				$items = ArrayHelper::dropColumn($items, $column);
			}

			foreach ($items as $item) {
				$domain->addItem($this->createItemFromArray($item, $item['id']));
			}
		}

		return $domain;
	}

	/**
	 * Create the domain for the reported entries list
	 *
	 * @param   JTableUser  $user  The JTableUser object to process
	 *
	 * @return  PrivacyExportDomain
	 *
	 * @since   3.9.0
	 */
	private function createUserReviewsDomain(JTableUser $user)
	{
		$domain = $this->createDomain('user_rsdirectory_reviews_entries', 'rsdirectory_reviews_entries_list');

		$query = $this->db->getQuery(true)
			->select('*')
			->from($this->db->qn('#__rsdirectory_reviews'))
			->where($this->db->qn('user_id') . ' = '. $this->db->quote($user->id));

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

		if (!empty($items)) {
			// Remove user ID columns
			foreach (array('user_id') as $column) {
				$items = ArrayHelper::dropColumn($items, $column);
			}

			foreach ($items as $item) {
				$domain->addItem($this->createItemFromArray($item, $item['id']));
			}
		}

		return $domain;
	}
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists