<?php
namespace PhpOffice\PhpSpreadsheet;
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
use PhpOffice\PhpSpreadsheet\Helper\Size;
use PhpOffice\PhpSpreadsheet\RichText\RichText;
use PhpOffice\PhpSpreadsheet\Shared\Drawing as SharedDrawing;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
class Comment implements IComparable
{
/**
* Author.
*
* @var string
*/
private $author;
/**
* Rich text comment.
*
* @var RichText
*/
private $text;
/**
* Comment width (CSS style, i.e. XXpx or YYpt).
*
* @var string
*/
private $width = '96pt';
/**
* Left margin (CSS style, i.e. XXpx or YYpt).
*
* @var string
*/
private $marginLeft = '59.25pt';
/**
* Top margin (CSS style, i.e. XXpx or YYpt).
*
* @var string
*/
private $marginTop = '1.5pt';
/**
* Visible.
*
* @var bool
*/
private $visible = false;
/**
* Comment height (CSS style, i.e. XXpx or YYpt).
*
* @var string
*/
private $height = '55.5pt';
/**
* Comment fill color.
*
* @var Color
*/
private $fillColor;
/**
* Alignment.
*
* @var string
*/
private $alignment;
/**
* Background image in comment.
*
* @var Drawing
*/
private $backgroundImage;
/**
* Create a new Comment.
*/
public function __construct()
{
// Initialise variables
$this->author = 'Author';
$this->text = new RichText();
$this->fillColor = new Color('FFFFFFE1');
$this->alignment = Alignment::HORIZONTAL_GENERAL;
$this->backgroundImage = new Drawing();
}
/**
* Get Author.
*/
public function getAuthor(): string
{
return $this->author;
}
/**
* Set Author.
*/
public function setAuthor(string $author): self
{
$this->author = $author;
return $this;
}
/**
* Get Rich text comment.
*/
public function getText(): RichText
{
return $this->text;
}
/**
* Set Rich text comment.
*/
public function setText(RichText $text): self
{
$this->text = $text;
return $this;
}
/**
* Get comment width (CSS style, i.e. XXpx or YYpt).
*/
public function getWidth(): string
{
return $this->width;
}
/**
* Set comment width (CSS style, i.e. XXpx or YYpt). Default unit is pt.
*/
public function setWidth(string $width): self
{
$width = new Size($width);
if ($width->valid()) {
$this->width = (string) $width;
}
return $this;
}
/**
* Get comment height (CSS style, i.e. XXpx or YYpt).
*/
public function getHeight(): string
{
return $this->height;
}
/**
* Set comment height (CSS style, i.e. XXpx or YYpt). Default unit is pt.
*/
public function setHeight(string $height): self
{
$height = new Size($height);
if ($height->valid()) {
$this->height = (string) $height;
}
return $this;
}
/**
* Get left margin (CSS style, i.e. XXpx or YYpt).
*/
public function getMarginLeft(): string
{
return $this->marginLeft;
}
/**
* Set left margin (CSS style, i.e. XXpx or YYpt). Default unit is pt.
*/
public function setMarginLeft(string $margin): self
{
$margin = new Size($margin);
if ($margin->valid()) {
$this->marginLeft = (string) $margin;
}
return $this;
}
/**
* Get top margin (CSS style, i.e. XXpx or YYpt).
*/
public function getMarginTop(): string
{
return $this->marginTop;
}
/**
* Set top margin (CSS style, i.e. XXpx or YYpt). Default unit is pt.
*/
public function setMarginTop(string $margin): self
{
$margin = new Size($margin);
if ($margin->valid()) {
$this->marginTop = (string) $margin;
}
return $this;
}
/**
* Is the comment visible by default?
*/
public function getVisible(): bool
{
return $this->visible;
}
/**
* Set comment default visibility.
*/
public function setVisible(bool $visibility): self
{
$this->visible = $visibility;
return $this;
}
/**
* Set fill color.
*/
public function setFillColor(Color $color): self
{
$this->fillColor = $color;
return $this;
}
/**
* Get fill color.
*/
public function getFillColor(): Color
{
return $this->fillColor;
}
/**
* Set Alignment.
*/
public function setAlignment(string $alignment): self
{
$this->alignment = $alignment;
return $this;
}
/**
* Get Alignment.
*/
public function getAlignment(): string
{
return $this->alignment;
}
/**
* Get hash code.
*/
public function getHashCode(): string
{
return md5(
$this->author .
$this->text->getHashCode() .
$this->width .
$this->height .
$this->marginLeft .
$this->marginTop .
($this->visible ? 1 : 0) .
$this->fillColor->getHashCode() .
$this->alignment .
($this->hasBackgroundImage() ? $this->backgroundImage->getHashCode() : '') .
__CLASS__
);
}
/**
* Implement PHP __clone to create a deep clone, not just a shallow copy.
*/
public function __clone()
{
$vars = get_object_vars($this);
foreach ($vars as $key => $value) {
if (is_object($value)) {
$this->$key = clone $value;
} else {
$this->$key = $value;
}
}
}
/**
* Convert to string.
*/
public function __toString(): string
{
return $this->text->getPlainText();
}
/**
* Check is background image exists.
*/
public function hasBackgroundImage(): bool
{
$path = $this->backgroundImage->getPath();
if (empty($path)) {
return false;
}
return getimagesize($path) !== false;
}
/**
* Returns background image.
*/
public function getBackgroundImage(): Drawing
{
return $this->backgroundImage;
}
/**
* Sets background image.
*/
public function setBackgroundImage(Drawing $objDrawing): self
{
if (!array_key_exists($objDrawing->getType(), Drawing::IMAGE_TYPES_CONVERTION_MAP)) {
throw new PhpSpreadsheetException('Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.');
}
$this->backgroundImage = $objDrawing;
return $this;
}
/**
* Sets size of comment as size of background image.
*/
public function setSizeAsBackgroundImage(): self
{
if ($this->hasBackgroundImage()) {
$this->setWidth(SharedDrawing::pixelsToPoints($this->backgroundImage->getWidth()) . 'pt');
$this->setHeight(SharedDrawing::pixelsToPoints($this->backgroundImage->getHeight()) . 'pt');
}
return $this;
}
}
At NFC Pay, we strive to provide a seamless and satisfactory experience with our services. This Refund Policy outlines the circumstances under which refunds may be issued for transactions made through our platform. Please read this policy carefully to understand your rights regarding refunds.
1. Eligibility for Refunds
Refunds may be considered under the following circumstances:
2. Non-Refundable Situations
Refunds will generally not be issued in the following situations:
3. Refund Process
To request a refund, please follow these steps:
4. Refund Exceptions
Certain transactions may be subject to specific terms and conditions, including non-refundable fees or charges. Please review the terms associated with each transaction carefully, as some fees may not be eligible for refunds.
5. Modifications to the Refund Policy
NFC Pay reserves the right to modify this Refund Policy at any time. Changes will be communicated through updates on our website and app, and the effective date will be updated accordingly. We encourage you to review this policy periodically to stay informed about our refund practices.
By using NFC Pay, you agree to this Refund Policy and understand the terms under which refunds may be issued. Our goal is to ensure a fair and transparent refund process, providing you with confidence and peace of mind when using our services.