%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/stream/actions/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/stream/actions/StreamResponse.php |
<?php
namespace humhub\modules\stream\actions;
use humhub\modules\stream\models\StreamQuery;
use humhub\modules\stream\models\StreamSuppressQuery;
use Yii;
use yii\base\Exception;
/**
* This class is used to build up a stream array or json response used in stream actions.
*
* @package humhub\modules\stream\actions
* @since 1.7
*/
class StreamResponse
{
/**
* @var array contains the result array of the different entries
*/
public $entries = [];
/**
* @var array contains the order of entries
*/
public $entryOrder = [];
/**
* @var array resulting array
*/
private $result = [];
/**
* @var StreamQuery the StreamQuery used to fetch the entries
*/
private $streamQuery;
/**
* @var int
*/
private $lastContentId;
/**
* @var string
*/
public $error;
/**
* @var int
*/
public $errorCode;
/**
* StreamResponse constructor.
* @param StreamQuery $streamQuery
*/
public function __construct(StreamQuery $streamQuery)
{
$this->streamQuery = $streamQuery;
}
/**
* Adds entries to the response by providing either an response array or a StreamEntryResponse instance.
* An $entry array needs at least to provide a `id` and `output` value. When injecting an entry outside of the
* stream query result the $injectIndex should be set to either an existing result index or to true. This will
* make sure the injected entry will be ignored in the stream flow (load more).
*
* @param array|StreamEntryResponse $entry
* @param bool|int $injectIndex
* @throws Exception
*/
public function addEntry($entry, $injectIndex = false)
{
if($entry instanceof StreamEntryResponse) {
$entry = $entry->asArray();
}
$entryId = $entry['id'];
$this->entries[$entryId] = $entry;
if(is_int($injectIndex)) {
array_splice( $this->entryOrder, $injectIndex, 0, $entryId );
} else {
$this->entryOrder[] = $entryId;
}
if($injectIndex === false) {
$this->lastContentId = $entry['id'];
}
}
/**
* Can be used to set error information.
* @param $code int
* @param $msg string
*/
public function setError($code, $msg)
{
$this->error = $msg;
$this->errorCode = $code;
}
/**
* Returns the stream response array.
* @return array
* @throws Exception
*/
public function asArray()
{
$this->result['content'] = $this->entries;
$this->result['contentOrder'] = $this->entryOrder;
$this->result['lastContentId'] = $this->lastContentId;
$this->isLast(count($this->entries) < $this->streamQuery->limit);
if ($this->streamQuery instanceof StreamSuppressQuery && !$this->streamQuery->isSingleContentQuery()) {
$this->result['contentSuppressions'] = $this->streamQuery->getSuppressions();
$this->result['lastContentId'] = $this->streamQuery->getLastContentId();
}
if ($this->error) {
$this->result['error'] = $this->error;
}
if ($this->errorCode) {
$this->result['errorCode'] = $this->errorCode;
}
if ($this->streamQuery->hasErrors()) {
$this->result['filterErrors'] = $this->streamQuery->getErrors();
}
return $this->result;
}
/**
* Returns the stream action result as json response.
* @return \yii\web\Response
* @throws Exception
*/
public function asJson()
{
return Yii::$app->controller->asJson($this->asArray());
}
/**
* @param $isLast boolean sets the isLast flag of the response
*/
private function isLast($isLast)
{
$this->result['isLast'] = $isLast;
}
}