| Current File : /home/jvzmxxx/wiki1/extensions/Flow/includes/BlockFactory.php |
<?php
namespace Flow;
use Flow\Block\AbstractBlock;
use Flow\Block\HeaderBlock;
use Flow\Block\TopicBlock;
use Flow\Block\TopicListBlock;
use Flow\Block\TopicSummaryBlock;
use Flow\Block\BoardHistoryBlock;
use Flow\Model\Workflow;
use Flow\Data\ManagerGroup;
use Flow\Exception\DataModelException;
use Flow\Exception\InvalidDataException;
use Flow\Repository\RootPostLoader;
class BlockFactory {
/**
* @var ManagerGroup
*/
protected $storage;
/**
* @var RootPostLoader
*/
protected $rootPostLoader;
public function __construct(
ManagerGroup $storage,
RootPostLoader $rootPostLoader
) {
$this->storage = $storage;
$this->rootPostLoader = $rootPostLoader;
}
/**
* @param Workflow $workflow
* @return AbstractBlock[]
* @throws DataModelException When the workflow type is unrecognized
* @throws InvalidDataException When multiple blocks share the same name
*/
public function createBlocks( Workflow $workflow ) {
switch( $workflow->getType() ) {
case 'discussion':
$blocks = array(
new HeaderBlock( $workflow, $this->storage ),
new TopicListBlock( $workflow, $this->storage ),
new BoardHistoryBlock( $workflow, $this->storage ),
);
break;
case 'topic':
$blocks = array(
new TopicBlock( $workflow, $this->storage, $this->rootPostLoader ),
new TopicSummaryBlock( $workflow, $this->storage ),
);
break;
default:
throw new DataModelException( 'Not Implemented', 'process-data' );
break;
}
$return = array();
/** @var AbstractBlock[] $blocks */
foreach ( $blocks as $block ) {
if ( isset( $return[$block->getName()] ) ) {
throw new InvalidDataException( 'Multiple blocks with same name is not yet supported', 'fail-load-data' );
}
$return[$block->getName()] = $block;
}
return $return;
}
}