public function fetchBlock($slotDir, $slotName, $blockName)
 {
     $filename = $slotDir . '/blocks/' . $blockName . '.json';
     if (!file_exists($filename)) {
         return null;
     }
     if ($this->isProduction) {
         return file_get_contents($filename);
     }
     $block = $this->updateBlock($filename, $slotName, $blockName);
     if (null === $block) {
         return null;
     }
     $block->setHistory($this->fetchArchivedBlocks($slotDir . '/archive/' . $blockName, $slotName));
     return JsonTools::toJson($this->serializer, $block);
 }
 /**
  * Renders the slots
  * @param \RedKiteCms\FilesystemEntity\Page $page
  *
  * @return array
  */
 protected function renderSlots(Page $page)
 {
     $templateRenderer = $this->options['page_renderer'];
     // We need to render all blocks to avoid problems when a kind ok block is
     // not present on a page
     $availableBlocks = array();
     $blocks = BlockFactory::createAllBlocks();
     foreach ($blocks as $block) {
         if ($block->isInternal()) {
             continue;
         }
         $availableBlocks[$block->getType()] = JsonTools::toJson($this->options["serializer"], $block);
     }
     $templateRenderer->render($page, array('available_blocks' => $availableBlocks));
     $slots = $templateRenderer->getSlots();
     $cmsBlocks = $templateRenderer->renderCmsBlocks($blocks, $this->options["username"], array('available_blocks' => $availableBlocks));
     return array('slots' => $slots, 'cms_blocks' => $cmsBlocks, 'available_blocks' => $availableBlocks);
 }