Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5957518
OutputFile.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
OutputFile.php
View Options
<?php
namespace
Shellbox\Command
;
use
Shellbox\ShellboxError
;
/**
* The base class for encapsulated output files.
*
* An OutputFile object is a declaration of a file expected to be created by a
* command. These objects are created on the client side before command
* execution, then they are serialized, sent to the server, unserialized,
* populated with contents, then sent back to the client where the contents
* will be put into its declared destination.
*/
abstract
class
OutputFile
{
use
UserDataTrait
;
/** @var bool */
protected
$received
=
false
;
/** @var callable[] */
private
$receivedListeners
=
[];
/** @var int|null */
private
$requiredExitCode
;
/**
* Add a callback to call after the file is received
*
* @since 4.1.0
* @param callable $callback
* @return $this
*/
public
function
onReceived
(
callable
$callback
)
{
$this
->
receivedListeners
[]
=
$callback
;
return
$this
;
}
/**
* Upload/return the file only if the command returns the specified exit
* code.
*
* @since 4.1.0
* @param ?int $status
* @return $this
*/
public
function
requireExitCode
(
?
int
$status
=
0
)
{
$this
->
requiredExitCode
=
$status
;
return
$this
;
}
/**
* Return true if the file was received from the command or server.
*
* @return bool
*/
public
function
wasReceived
()
{
return
$this
->
received
;
}
/**
* Set the received flag to true and notify the listeners
*
* @internal
*/
protected
function
setReceived
()
{
$this
->
received
=
true
;
foreach
(
$this
->
receivedListeners
as
$listener
)
{
$listener
();
}
}
/**
* Get data for JSON serialization by the client.
*
* @internal
* @return array
*/
public
function
getClientData
()
{
$data
=
[];
if
(
$this
->
requiredExitCode
!==
null
)
{
$data
[
'requiredExitCode'
]
=
$this
->
requiredExitCode
;
}
return
$data
;
}
/**
* @internal
* @return int|null
*/
public
function
getRequiredExitCode
()
{
return
$this
->
requiredExitCode
;
}
/**
* This is used to create a placeholder object for use on the server side.
* It doesn't need to actually be functional since the server is responsible
* for reading output files.
*
* @internal
* @param array $data
* @return OutputFile
*/
public
static
function
newFromClientData
(
$data
)
{
if
(
(
$data
[
'type'
]
??
''
)
===
'url'
)
{
if
(
!
isset
(
$data
[
'url'
]
)
)
{
throw
new
ShellboxError
(
'Missing required parameter for URL file: "url"'
);
}
$file
=
new
OutputFileToUrl
(
$data
[
'url'
]
);
if
(
isset
(
$data
[
'headers'
]
)
)
{
$file
->
headers
(
$data
[
'headers'
]
);
}
if
(
isset
(
$data
[
'mwContentHash'
]
)
)
{
$file
->
enableMwContentHash
(
$data
[
'mwContentHash'
]
);
}
}
else
{
$file
=
new
OutputFilePlaceholder
;
}
if
(
isset
(
$data
[
'requiredExitCode'
]
)
)
{
$file
->
requireExitCode
(
$data
[
'requiredExitCode'
]
);
}
return
$file
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, Oct 3, 05:10 (2 w, 6 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
3d/99/31be8d4ee48af1067ec680bbbc59
Default Alt Text
OutputFile.php (2 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment