private function addBlock($dir, array $options, $blockName) { $filename = sprintf('%s/blocks/%s.json', $dir, $blockName); $block = BlockFactory::createBlock($options["type"]); $block->setName($blockName); $block->setSlotName($options["slot"]); $blockClass = get_class($block); $encodedBlock = $this->serializer->serialize($block, 'json'); $event = Dispatcher::dispatch(BlockEvents::BLOCK_ADDING, new BlockAddingEvent($this->serializer, $filename, $encodedBlock, $blockClass)); $blockContent = $event->getFileContent(); FilesystemTools::writeFile($filename, $blockContent); Dispatcher::dispatch(BlockEvents::BLOCK_ADDED, new BlockAddedEvent($this->serializer, $filename, $encodedBlock, $blockClass)); return $blockContent; }
/** * Approves a contribution * * @param string $sourceDir * @param array $options * @param string $username * * @return array The approved block */ public function approve($sourceDir, array $options, $username) { $this->init($sourceDir, $options, $username); $sourceFilename = sprintf('%s/blocks/%s.json', $this->contributorDir, $options['blockname']); $targetFilename = sprintf('%s/blocks/%s.json', $this->productionDir, $options['blockname']); Dispatcher::dispatch(BlockEvents::BLOCK_APPROVING, new BlockApprovingEvent($this->serializer, $sourceFilename, $targetFilename)); $blockValues = JsonTools::jsonDecode(FilesystemTools::readFile($sourceFilename)); $blockValues["history"] = array(); FilesystemTools::writeFile($targetFilename, json_encode($blockValues)); $slotDefinitionContribution = $this->getSlotDefinition($this->getContributorDir()); $this->saveSlotDefinition($this->productionDir, $slotDefinitionContribution); Dispatcher::dispatch(BlockEvents::BLOCK_APPROVED, new BlockApprovedEvent($this->serializer, $sourceFilename, $targetFilename)); DataLogger::log(sprintf('Block "%s" has been approved on the "%s" slot on page "%s" for the "%s_%s" language', $options["blockname"], $options["slot"], $options["page"], $options["language"], $options["country"])); return $blockValues; }
private function writeSlots($template, array $slots, $repeat) { foreach ($slots as $slotName) { $fileName = sprintf('%s/%s/%s.json', $this->themeDir, $template, $slotName); $value = array("blocks" => array()); if (file_exists($fileName)) { $slot = json_decode(FilesystemTools::readFile($fileName), true); if ($slot["repeat"] == $repeat) { continue; } $value["blocks"] = $slot["blocks"]; } $value["repeat"] = $repeat; FilesystemTools::writeFile($fileName, json_encode($value)); } }
/** * Edits the given block * * @param string $sourceDir * @param array $options * @param string $username * @param array $values */ public function edit($sourceDir, array $options, $username, $values) { $this->resolveOptions($options); $this->init($sourceDir, $options, $username); $this->createContributorDir($sourceDir, $options, $username); $filename = sprintf('%s/blocks/%s.json', $this->getDirInUse(), $options["blockname"]); $currentBlock = $options["baseBlock"] = JsonTools::jsonDecode(FilesystemTools::readFile($filename)); $values = $this->parseChildren($values); $block = JsonTools::join($currentBlock, $values); $encodedBlock = json_encode($block); $blockClass = BlockFactory::getBlockClass($block["type"]); $event = Dispatcher::dispatch(BlockEvents::BLOCK_EDITING, new BlockEditingEvent($this->serializer, $filename, $encodedBlock, $blockClass)); $blockContent = $event->getFileContent(); FilesystemTools::writeFile($filename, $blockContent); Dispatcher::dispatch(BlockEvents::BLOCK_EDITED, new BlockEditedEvent($this->serializer, $filename, $encodedBlock, $blockClass)); DataLogger::log(sprintf('Block "%s" has been edited on the "%s" slot on page "%s" for the "%s_%s" language', $options["blockname"], $options["slot"], $options["page"], $options["language"], $options["country"])); }
/** * Archives the given block * * @param string $sourceDir * @param array $options * @param string $username * @param array $block */ public function archive($sourceDir, array $options, $username, $block) { $this->resolveOptions($options); $block = json_decode($block, true); $block["history"] = array(); $this->init($sourceDir, $options, $username); $historyDirName = sprintf('%s/archive/%s', $this->getDirInUse(), $options["blockname"]); $historyFileName = $historyDirName . '/history.json'; if (!is_dir($historyDirName)) { mkdir($historyDirName); } $history = array(); if (file_exists($historyFileName)) { $history = json_decode(file_get_contents($historyFileName), true); } $history = array_merge($history, array($block["history_name"] => $block)); FilesystemTools::writeFile($historyFileName, json_encode($history)); }
/** * Implements the action to update the user information * @param array $options * * @return \Symfony\Component\HttpFoundation\Response */ public function save(array $options) { $resolver = new OptionsResolver(); $this->configureOptions($resolver); $this->options = $resolver->resolve($options); $request = $this->options["request"]; $password = $request->get('password'); $user = $this->fetchUser($this->options['security'], $this->options['configuration_handler']); $factory = $this->options['encoder_factory']; $encoder = $factory->getEncoder($user); $salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36); $password = $encoder->encodePassword($password, $salt); $userName = "******"; $usersFile = $this->options['configuration_handler']->usersDir() . '/users.json'; $users = json_decode(FilesystemTools::readFile($usersFile), true); $user = $users[$userName]; $user["password"] = $password; $user["salt"] = $salt; $users[$userName] = $user; FilesystemTools::writeFile($usersFile, json_encode($users)); }
private function saveTemplateSlots(array $slots, $templateName) { foreach ($slots as $slot) { $slotName = $slot->getSlotName(); $templateSlotFile = sprintf('%s/%s/%s.json', $this->themeDir, $templateName, $slotName); if (!file_exists($templateSlotFile)) { continue; } $templateSlotContent = json_decode(file_get_contents($templateSlotFile), true); $blocks = array(); foreach ($slot->getProductionEntities() as $block) { $blocks[] = json_decode($block, true); } $templateSlotContent["blocks"] = $blocks; FilesystemTools::writeFile($templateSlotFile, json_encode($templateSlotContent)); } }
private function saveQueueFile($message) { $queueDir = dirname($this->queueFile); if (!is_dir($queueDir)) { mkdir($queueDir); } $queue = array("error" => $message, "queue" => $this->queue["queue"]); FilesystemTools::writeFile($this->queueFile, json_encode($queue)); }
/** * Generate blocks for the current slot * @param array $blocks * @param string $blocksDir * @param string $targetDir */ protected function generateBlocks(array $blocks, $blocksDir, $targetDir) { $c = 1; $generatedBlocks = array(); foreach ($blocks as $block) { $blockName = 'block' . $c; $fileName = sprintf('%s/%s.json', $blocksDir, $blockName); $generatedBlocks[] = $blockName; $value = $block; if (is_array($value)) { $value = json_encode($block); } FilesystemTools::writeFile($fileName, $value); $c++; } $slotDefinition = array('next' => $c, 'blocks' => $generatedBlocks, 'revision' => 1); FilesystemTools::writeFile($targetDir . '/slot.json', json_encode($slotDefinition)); }
private function moveBlockToSameSlot($baseDir, array $options, $username) { $sourceDir = $this->init($baseDir, $options, $username)->getDirInUse(); $slotsFilename = sprintf('%s/slot.json', $sourceDir); $slot = JsonTools::jsonDecode(FilesystemTools::readFile($slotsFilename), true); $blocks = $slot["blocks"]; $key = array_search($options["blockname"], $blocks); $blockName = $blocks[$key]; unset($blocks[$key]); array_splice($blocks, $options["position"], 0, $blockName); $slot["blocks"] = $blocks; $encodedSlot = json_encode($slot); $targetFile = sprintf('%s/blocks/%s.json', $sourceDir, $options["blockname"]); $event = Dispatcher::dispatch(BlockEvents::BLOCK_MOVING_SAME_SLOT, new BlockMovingSameSlotEvent($this->serializer, $blocks, $options["position"], $targetFile, $encodedSlot)); $slotContent = $event->getFileContent(); FilesystemTools::writeFile($slotsFilename, $slotContent); $block = FilesystemTools::readFile($targetFile); Dispatcher::dispatch(BlockEvents::BLOCK_MOVED_SAME_SLOT, new BlockMovedSameSlotEvent($this->serializer, $blocks, $options["position"], $targetFile, $encodedSlot)); DataLogger::log(sprintf('Block "%s" has been moved to position "%s" on the slot "%s" on "%s" page for "%s_%s" language', $options["blockname"], $options["position"], $options["slot"], $options["page"], $options["language"], $options["country"])); return $block; }
/** * Approves the page in production * @param $pageName * @param $languageName * * @return string The json seo content */ public function approve($pageName, $languageName) { $this->contributorDefined(); $baseDir = $this->pagesDir . '/' . $pageName . '/' . $languageName; $sourceFile = $baseDir . '/' . $this->username . '.json'; $targetFile = $baseDir . '/seo.json'; if (!file_exists($targetFile)) { throw new PageNotPublishedException('exception_page_not_published'); } $values = json_decode(FilesystemTools::readFile($sourceFile), true); if (!empty($values["current_permalink"])) { $values["changed_permalinks"][] = $values["current_permalink"]; $values["current_permalink"] = ""; } $encodedSeo = json_encode($values); $event = Dispatcher::dispatch(PageEvents::PAGE_APPROVING, new PageApprovingEvent($sourceFile, $encodedSeo)); $encodedSeo = $event->getFileContent(); FilesystemTools::writeFile($sourceFile, $encodedSeo); FilesystemTools::writeFile($targetFile, $encodedSeo); Dispatcher::dispatch(PageEvents::PAGE_APPROVED, new PageApprovedEvent($sourceFile, $encodedSeo)); DataLogger::log(sprintf('Page SEO attributes "%s" for language "%s" were approved', $pageName, $languageName)); return $encodedSeo; }
/** * Edits the handled page * @param array $values * * @return string The encoded page */ public function edit(array $values) { $currentName = $values["currentName"]; unset($values["currentName"]); $pageDir = $this->pagesDir . '/' . $values["name"]; if (!is_dir($pageDir)) { $pageDir = $this->pagesDir . '/' . $currentName; } $pageFile = $pageDir . '/' . $this->pageFile; $currentValues = json_decode(FilesystemTools::readFile($pageFile), true); if (array_key_exists("template", $values) && $currentValues["template"] != $values["template"]) { Dispatcher::dispatch(PageCollectionEvents::TEMPLATE_CHANGED, new TemplateChangedEvent($currentValues["template"], $values["template"], $this->username)); } $values = array_merge($currentValues, $values); $values = $this->slugifyPageName($values); $targetFolder = $this->pagesDir . '/' . $values["name"]; $encodedPage = json_encode($values); $event = Dispatcher::dispatch(PageCollectionEvents::PAGE_COLLECTION_EDITING, new PageCollectionEditingEvent($pageFile, $encodedPage)); $encodedPage = $event->getFileContent(); FilesystemTools::writeFile($pageFile, $encodedPage); if ($currentName != $values["name"]) { rename($pageDir, $targetFolder); } Dispatcher::dispatch(PageCollectionEvents::PAGE_COLLECTION_EDITED, new PageCollectionEditedEvent($pageFile, $encodedPage)); DataLogger::log(sprintf('Page "%s" was successfully edited', $currentName)); return $encodedPage; }
/** * Saves the slot definition * * @param string $dir * @param array $slot */ protected function saveSlotDefinition($dir, array $slot) { $slotsFilename = $this->getSlotDefinitionFile($dir); FilesystemTools::writeFile($slotsFilename, json_encode($slot), $this->filesystem); }