Current File : /home/pacjaorg/www/cop29/wp-content/plugins/duplicator-pro/src/Models/BrandEntity.php |
<?php
/**
*
* @package Duplicator
* @copyright (c) 2022, Snap Creek LLC
*/
namespace Duplicator\Models;
use DUP_PRO_Log;
use Duplicator\Addons\ProBase\License\License;
use Duplicator\Core\Models\AbstractEntityList;
use Duplicator\Libs\Snap\SnapIO;
use ReflectionObject;
/**
* Brand entity
* DUP_PRO_Brand_Entity
*/
class BrandEntity extends AbstractEntityList
{
const MODE_KEEP_PLUGIN = 0;
const MODE_REMOVE_PLUGIN = 1;
/** @var string */
public $name = '';
/** @var string */
public $notes = '';
/** @var bool */
public $editable = true;
/** @var string */
public $logo = '<i class="fa fa-bolt fa-sm"></i> Duplicator Pro';
/** @var string[] */
public $attachments = array();
/** @var bool */
protected $default = false;
/** @var int */
protected $brandMode = self::MODE_REMOVE_PLUGIN;
/** @var bool */
public $active = false;
/** @var array<string, mixed> */
public $style = array();
/**
* Return entity type identifier
*
* @return string
*/
public static function getType()
{
return 'DUP_PRO_Brand_Entity';
}
/**
* Get the value of default
*
* @return bool true if is default brand
*/
public function isDefault()
{
return $this->default;
}
/**
* Return all list of brand with default brand included
*
* @return self[]|false false on failure
*/
public static function getAllWithDefault()
{
if (License::can(License::CAPABILITY_BRAND)) {
$brands = self::getAll();
} else {
$brands = [];
}
if ($brands === false) {
return false;
}
array_unshift($brands, self::getDefaultBrand());
return $brands;
}
/**
* Get entity by id
* For legacy reason $id can be -2 and thar case the brand is default
*
* @param int $id entity id
*
* @return self Return entity brand istance or default if son't exists
*/
public static function getByIdOrDefault($id)
{
if ($id < 0 || !License::can(License::CAPABILITY_BRAND)) {
return self::getDefaultBrand();
} elseif (($result = parent::getById($id)) == false) {
return self::getDefaultBrand();
} else {
return $result;
}
}
/**
* Get mode text
*
* @return string
*/
public function getModeText()
{
$txt = __('Unknown', 'duplicator-pro');
switch ($this->brandMode) {
case self::MODE_KEEP_PLUGIN:
$txt = __('Keep Plugin', 'duplicator-pro');
break;
case self::MODE_REMOVE_PLUGIN:
$txt = __('Remove Plugin', 'duplicator-pro');
break;
}
return $txt;
}
/**
* Save entity
*
* @return bool True on success, or false on error.
*/
public function save()
{
if (!License::can(License::CAPABILITY_BRAND)) {
return false;
}
if ($this->default) {
return false;
}
return parent::save();
}
/**
* Collect all attachments into `$this->attachments`
*
* @param string|string[] $attachments image paths inside /wp-content/uploads folder, Accept array or comma delimited array
*
* @return void
*/
public function setAttachments($attachments)
{
if (!is_array($attachments)) {
$attachments = array_map("trim", preg_split('/(;|,)/', $attachments));
}
$upload_dir = wp_upload_dir();
$dir = $upload_dir['basedir'];
// Uploads folder
$dir = str_replace(array('\\', '//'), array('/', '/'), $dir);
foreach ($attachments as $attachment) {
if (file_exists("{$dir}{$attachment}")) {
$this->attachments[] = $attachment;
}
}
}
/**
* Return default brand object
*
* @return self
*/
public static function getDefaultBrand()
{
$brand = new self();
$brand->name = __('Default', 'duplicator-pro');
$brand->notes = __('The default content used when a brand is not defined', 'duplicator-pro');
$brand->logo = sprintf(__('%s Duplicator Pro', 'duplicator-pro'), '<i class="fa fa-bolt fa-sm"></i>');
$brand->editable = false;
$brand->attachments = [];
$refObject = new ReflectionObject($brand);
$refProperty = $refObject->getProperty('default');
$refProperty->setAccessible(true);
$refProperty->setValue($brand, true);
return $brand;
}
/**
* Prepare attahcment to installer
*
* @return bool true on success, fail on failure
*/
public function prepareAttachmentsInstaller()
{
$this->emptyAttachmentFolder();
if (empty($this->attachments)) {
return true;
}
$brandAttFolder = self::getAttachmentFolder();
if (wp_mkdir_p($brandAttFolder) === false) {
return false;
}
$uploadInfo = wp_upload_dir();
$uploadDir = SnapIO::safePathUntrailingslashit($uploadInfo['basedir']);
$copied = false;
foreach ($this->attachments as $attachment) {
$sourceFile = $uploadDir . $attachment;
$targetFile = $brandAttFolder . $attachment;
if (!file_exists($sourceFile)) {
continue;
}
if (wp_mkdir_p(dirname($targetFile)) === false) {
return false;
}
if (copy($sourceFile, $targetFile) === false) {
DUP_PRO_Log::error("Error copying {$sourceFile} to {$targetFile}", '', false);
} else {
$copied = true;
}
}
return $copied;
}
/**
* Empty brand attachment folder
*
* @return bool true on success, fail on failure
*/
protected function emptyAttachmentFolder()
{
$dir = self::getAttachmentFolder();
if (file_exists($dir)) {
return SnapIO::rrmdir($dir);
}
return true;
}
/**
* Return attahcment folder
*
* @todo move this folder outsite pligin installation. (add attachmetn directly ad packag.
*
* @return string
*/
protected static function getAttachmentFolder()
{
return DUPLICATOR____PATH . "/installer/dup-installer/assets/images/brand";
}
}