Ferreteria/v0.6/clade/Sys/Events/ItWent/@code
Jump to navigation
Jump to search
|
Code Snapshots & Removals
|
interface iItWent extends BaseIface {
// SETUP
static function AsNoOp() : self;
function CopyFrom(self $o); // direct copy, overriding self
function Assimilate(self $o); // include any errors or messages from $o
function Clear();
// ACTION
function WasTried() : bool;
function SetOkay(bool $ok);
function GetOkay() : bool;
function SetNoOp();
function GetStatusText() : string;
// MESSAGES
function AllMessages() : array; // mainly diagnostic
function AnyMessages() : bool;
function QtyMessages() : int;
function AddMsgObject(MsgIface $o) : void;
function AddMsgString(string $s) : void;
function RenderMessages() : string;
// ERRORS
function SetError(int $n);
function GetError() : ?int;
function HasError() : bool;
}
class cItWent extends BaseClass implements SelfIface {
// ++ CONFIG ++ //
protected function InspectorClass() : string { return ViewClass::class; }
protected function MessageClass() : string { return MsgClass::class; }
// -- CONFIG -- //
// ++ SETUP ++ //
static public function AsNoOp() : SelfIface { $o = new static; $o->SetNoOp(); return $o; }
public function CopyFrom(SelfIface $o) {
$this->isTried = $o->WasTried();
$this->isOkay = $o->GetOkay();
$this->arMsgs = $o->AllMessages();
$this->nErr = $o->GetError();
}
public function Assimilate(SelfIface $o) {
$this->isTried = $o->WasTried();
if ($this->isOkay) $this->isOkay = $o->GetOkay();
$this->arMsgs = array_merge($this->arMsgs, $o->AllMessages());
if ($o->HasError) $this->nErr = $o->GetError();
}
public function Clear() {
$this->isTried = FALSE;
$this->arMsgs = [];
$this->nErr = NULL;
}
// -- SETUP -- //
// ++ STATE ++ //
private $isTried = FALSE; // was the action tried?
public function WasTried() : bool { return $this->isTried; }
private $isOkay = FALSE; // if tried, did it succeed?
public function SetOkay(bool $ok) {
$this->isTried = TRUE;
$this->isOkay = $ok;
}
public function GetOkay() : bool {
if ($this->isTried || $this->isOkay) {
return $this->isOkay;
} else {
$sError = 'action status requested before action attempted.';
throw new \exception('Internal error: '.$sError);
}
}
public function SetNoOp() {
$this->isTried = FALSE;
$this->isOkay = TRUE;
}
public function GetStatusText() : string {
if ($this->WasTried()) {
if ($this->GetOkay()) {
$out = 'Operation successful.';
} else {
if ($this->HasError()) {
$nErr = $this->GetNumber();
$sErr = $this->GetMessage();
$out = "Error #$nErr: $sErr";
} else {
$out = 'Operation failed.';
}
$out .= ' (TODO: add any Messages, or note how many there are.)'; // 2025-01-24
}
} else {
$out = 'Operation has not been attempted yet!';
}
return $out;
}
// -- STATE -- //
// ++ RESULT ++ //
private $arMsgs = [];
public function AllMessages() : array { return $this->arMsgs; }
public function AnyMessages() : bool { return count($this->arMsgs) > 0; }
public function QtyMessages() : int { return count($this->arMsgs); }
public function AddMsgObject(MsgIface $o) : void { $this->arMsgs[] = $o; }
public function AddMsgString(string $s) : void {
$o = new ($this->MessageClass())($s);
$this->AddMsgObject($o);
}
public function RenderMessages() : string {
$oScrn = self::Screen();
if ($this->GetOkay()) {
$sOut = '';
} else {
$sOut = $oScrn->ErrorIt('Error report');
if ($this->HasError()) {
$ftErNum = $oScrn->BoldIt($this->GetError());
$sOut .= " code $ftErNum.".CRLF;
} else {
$sOut .= ':'.CRLF;
}
}
$ar = $this->arMsgs;
foreach ($ar as $oMsg) {
$sOut .= ' - '.$oMsg->Full().CRLF;
}
return $sOut;
}
// ++ RESULT: errors ++ //
private $nErr = NULL;
public function SetError(int $n) { $this->nErr = $n; }
public function GetError() : ?int { return $this->nErr; }
public function HasError() : bool { return $this->nErr > 0; }
// -- RESULT -- //
}