Sindbad~EG File Manager
<?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